定向转发和重定向实现 <select >下拉表单数据传送

       定向转发的特点:

              (1). 实行转发时浏览器上的网址不变  (如果你这点忽视了,那你就要接受我无尽的鄙视吧! 哇咔咔~~~)

              (2). 实行转发时 :   只有一次请求。  不信,看这下面的图:   (俗话说,没图说个jb)

                                       

              (3).  定向转发的网址必须是本站点的网址.    (因为它不消除,消除数据)

            (4)  定向转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。  

    实现的两个API:        

1 RequestDispatcher rd 
2          = request.getRequestDispatcher("Demo_1/Login.jsp");
3 
4 rd.forward(request, response);
定向转发

         关于定向转发实现selected选项功能:

                                 

上面这个控件的代码:

       JSP代码:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     <title>注册页面</title>    
12     <meta http-equiv="pragma" content="no-cache">
13     <meta http-equiv="cache-control" content="no-cache">
14     <meta http-equiv="expires" content="0">    
15     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
16     <meta http-equiv="description" content="This is my page">
17     <!--
18     <link rel="stylesheet" type="text/css" href="styles.css">
19     -->
20   </head>
21   
22   <body>
23   <%   String authority = (String) request.getAttribute("authority"); %>
24      <form action="LoginServlet"    method="post" > 
25        username :<input type="text" name="username" value="<%=null==request.getAttribute("username")?"":request.getAttribute("username")%>"><br>
26        password :<input type="password" name="password"><br>
27        
28        authority:
29        <select name="authority">
30              <option value="1"<%="1".equals(authority)?"selected":""%>>common user</option>
31             
32              <option value="2"<%="2".equals(authority)?"selected='selected'":""%>>administrator</option>
33    
34       </select><br>
35  
36        <input type="submit" value="submit">
37    
38      </form>
39   </body>
40 </html>

     效果图:

          

关于: 然后需要一个Servlet  类:   (即纯java文件)

 1 package Demo;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.RequestDispatcher;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12 
13 public class LoginServlet extends HttpServlet {
14 
15     public void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         String username = request.getParameter("username");
18         String password =request.getParameter("password");
19         String authority =request.getParameter("authority");
20         
21            Login log = new Login();
22            HttpSession  session = request.getSession();
23         if("1".equals(authority))
24         {
25               //  登录的是普通用户
26           if("zhangsan".equals(username) && "123".equals(password))
27           {
28               //    将用户的信息放置到Session当中
29             
30                log.setUsername(username);
31                log.setAuthority(authority);
32                log.setPassword(password);
33                session.setAttribute("log", log);
34           }else {
35     
36               //定向转发
37               request.setAttribute("username",username);
38               request.setAttribute("password", password);
39               request.setAttribute("authority",authority);
40               RequestDispatcher  rd = request.getRequestDispatcher("Demo_1/Login.jsp");
41                rd.forward(request, response);
42           }
43         }
44         else if("2".equals(authority)){
45           //    登录的是系统管理员
46           if("Tom".equals(username) && "456".equals(password))
47           {
48               log.setAuthority(authority);
49               log.setPassword(password);
50               log.setUsername(username);
51               session.setAttribute("log",log);
52           }
53           else  {
54 
55                    // 采取的是定向转发
56     
57               request.setAttribute("username",username);
58               request.setAttribute("password", password);
59               request.setAttribute("authority",authority);
60                RequestDispatcher  rd = request.getRequestDispatcher("Demo_1/Login.jsp");
61                rd.forward(request, response);
62           }
63         } else  {
64         
65             request.setAttribute("username",username);
66             request.setAttribute("password", password);
67             request.setAttribute("authority",authority);
68             RequestDispatcher  rd = request.getRequestDispatcher("Demo_1/Login.jsp");
69             rd.forward(request, response);
70 
71         }
72     
73     }
74     
75     public void doPost(HttpServletRequest request, HttpServletResponse response)
76             throws ServletException, IOException {
77                    this.doGet(request, response);
78     }
79 }

一个  javabean文件:

     

 1 package Demo;
 2 
 3 //设置一个JavaBean 类
 4 
 5 public class Login {
 6   
 7     private String username   ;
 8     private String password   ;
 9     private String authority  ;
10     
11     public String getUsername() {
12         return username;
13     }
14     
15     public void setUsername(String username) {
16         this.username = username;
17     }
18     
19     public String getPassword() {
20         return password;
21     }
22     
23     public void setPassword(String password) {
24         this.password = password;
25     }
26     
27     public String getAuthority() {
28         return authority;
29     }
30     
31     public void setAuthority(String authority) {
32         this.authority = authority;
33     }
34 }

     重定向的特点:

       (1)执行重定向时浏览器上的网址改变.  

       (2)重定向实际上产生了两次请求  (看下面的图)

          

        (3)执行重定向时 的网址可以是任何网址。

   调用的 API 函数:

             1 response.sendRedirect("Demo_1/Login.jsp? username="+username+"&authority="+authority);  

    对于定向转发和重定向的实际执行情况,可以简单的慨括为:

       对于重定向:

           发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器 

   对于定向的转发:

               发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器 

特别需要注意的是:

                 重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
          转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

然后运用重定向实现<select> 下拉列表的代码:

    对于JSP:

          

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     <title>注册页面</title>    
12     <meta http-equiv="pragma" content="no-cache">
13     <meta http-equiv="cache-control" content="no-cache">
14     <meta http-equiv="expires" content="0">    
15     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
16     <meta http-equiv="description" content="This is my page">
17     <!--
18     <link rel="stylesheet" type="text/css" href="styles.css">
19     -->
20   </head>
21   
22   <body>
23    <%  
24       String username = request.getParameter("username");
25       String authority = request.getParameter("authority");
26    %>
27      <form action="LoginServlet"    method="post" > 
28        username :<input type="text" name="username" <%= null == username ? "":username %> ><br>
29        password :<input type="password" name="password"><br>
30        
31        authority:
32        <select name="authority">
33              <option value="1" <%= "1" == authority ?"":"selected"%> >common user</option>
34             
35              <option value="2" <%= "2" == authority ?"":"selected"%> >administrator</option>
36    
37       </select><br>
38  
39        <input type="submit" value="submit">
40    
41      </form>
42   </body>
43 </html>

对于Servlet类:

   

 1 package Demo;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.RequestDispatcher;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12 
13 public class LoginServlet extends HttpServlet {
14 
15     public void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         String username = request.getParameter("username");
18         String password =request.getParameter("password");
19         String authority =request.getParameter("authority");
20         
21            Login log = new Login();
22            HttpSession  session = request.getSession();
23         if("1".equals(authority))
24         {
25               //  登录的是普通用户
26           if("zhangsan".equals(username) && "123".equals(password))
27           {
28               //    将用户的信息放置到Session当中
29             
30                log.setUsername(username);
31                log.setAuthority(authority);
32                log.setPassword(password);
33                session.setAttribute("log", log);
34           }else {
35               //执行重定向函数               
36              response.sendRedirect("Demo_1/Login.jsp? username="+username+"&authority="+authority);
37           }
38         }
39         else if("2".equals(authority)){
40           //    登录的是系统管理员
41           if("Tom".equals(username) && "456".equals(password))
42           {
43               log.setAuthority(authority);
44               log.setPassword(password);
45               log.setUsername(username);
46               session.setAttribute("log",log);
47           }
48           else  {
49 //               采取的是重定向
50                response.sendRedirect("Demo_1/Login.jsp?username="+username+"&authority="+authority);
51                   }
52         } else  {
53         
54 //               采取的是重定向
55             response.sendRedirect("Demo_1/Login.jsp?username="+username+"&authority="+authority);
56         }
57     
58     }
59     
60     public void doPost(HttpServletRequest request, HttpServletResponse response)
61             throws ServletException, IOException {
62                    this.doGet(request, response);
63     }
64 }

对于JavaBean类:

      

 1 package Demo;
 2 
 3 //设置一个JavaBean 类
 4 
 5 public class Login {
 6   
 7     private String username   ;
 8     private String password   ;
 9     private String authority  ;
10     
11     public String getUsername() {
12         return username;
13     }
14     
15     public void setUsername(String username) {
16         this.username = username;
17     }
18     
19     public String getPassword() {
20         return password;
21     }
22     
23     public void setPassword(String password) {
24         this.password = password;
25     }
26     
27     public String getAuthority() {
28         return authority;
29     }
30     
31     public void setAuthority(String authority) {
32         this.authority = authority;
33     }
34 }

显示的效果:

     

posted @ 2014-12-12 12:10  龚细军  阅读(2110)  评论(0编辑  收藏  举报