客戶端跳轉
阿新 • • 發佈:2019-04-21
servle protect where 需要 welcome 對比 parameter ret except
客戶端跳轉
概述:
客戶端跳轉 又叫 做客戶端轉發 還可以叫做 客戶端重定向,
客戶端跳轉就是每次進行的跳轉都是客戶端的一個新的請求.
實現客戶端的跳轉的方式有: 頁面的超鏈接跳轉, 表單的提交, js中使用 window.location.href
以上跳轉都是在客戶端直接實現的, 也可以在 servlet 中實現客戶端跳轉,
要在 servlet 中實現客戶端跳轉, 需要使用到 response 內置對象的一個方法 sendRedirect("轉發的路徑")
特征:
1.瀏覽器地址欄信息會改變
2.客戶端跳轉就是發送一次新的請求
3.客戶端跳轉之後保存在 request 內置對象中的屬性不存在了(因為這是新的請求了)
Demo: 客戶端轉發
從登陸到歡迎頁面一共發送了兩次請求,
第一次是我們點擊登陸按鈕發送的請求(客戶端請求),
第二次是在 servlet 中使用客戶端跳轉
1.修改數據表 (增加 pwd 字段)
2.修改 dao 層 (增加登錄的 dao 層方法)
1 public interface IEmpDAO extends IBaseDAO<Emp>{ 2 //定義子接口特有的方法 3 public Emp selectLogin(String name,String pwd) throws Exception; 4 }
實現類:
@Overridepublic Emp selectLogin(String name, String pwd) throws Exception { String sql = "SELECT * " + " FROM emp WHERE ename=? AND pwd=?"; List<Emp> list = super.selectList(conn, sql, Emp.class, name,pwd); if (list.size()!=0) { return list.get(0); }else { return null; } }
3.在業務層增加實現登錄的操作
接口:
/** * 實現登錄的操作 調用數據層的 selectLogin() 方法 * @param name * @param pwd * @return * @throws Exception */ public Emp findLogin(String name,String pwd) throws Exception;
實現類:
@Override public Emp findLogin(String name, String pwd) throws Exception { return this.empDAO.selectLogin(name, pwd); }
4.定義控制層代碼
1 @SuppressWarnings("serial") 2 public class EmpServlet extends HttpServlet { 3 //獲取業務層實現類對象 4 private IEmpService empservice = (IEmpService)ServiceFactory.getInstance(EmpServiceImpl.class); 5 @Override 6 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 7 //處理中文亂碼 8 req.setCharacterEncoding("utf-8"); 9 String pathInfo = req.getPathInfo(); 10 try { 11 if ("/login".equals(pathInfo)) { 12 this.login(req,resp); 13 } 14 } catch (Exception e) { 15 e.printStackTrace(); 16 } 17 } 18 //負責登錄的方法 19 public void login(HttpServletRequest req, HttpServletResponse resp) throws Exception { 20 String name = req.getParameter("username"); 21 String pwd = req.getParameter("pwd"); 22 //查詢數據庫中的用戶密碼和用戶輸入的進行對比 23 Emp emp = empservice.findLogin(name, pwd); 24 if (emp != null) { 25 //將用戶的信息保存到 seesion 內置對象 26 req.getSession().setAttribute("emp", emp); 27 // 客戶端跳轉 28 resp.sendRedirect("/MvcPro/pages/welcome.jsp"); 29 } else { 30 // 重新返回登錄頁面再次登錄(服務器端跳轉) 31 req.getRequestDispatcher("/login.html").forward(req, resp); 32 } 33 } 34 @Override 35 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 36 this.doGet(req, resp); 37 } 38 }
5.修改 welcome.heml 為 welcome.jsp 和代碼
<body> <h1> 歡迎${emp.ename}光臨! </h1> </body>
客戶端跳轉