1. 程式人生 > >客戶端跳轉

客戶端跳轉

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 }

  實現類:

    @Override
    
public 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>

客戶端跳轉