首页 > 代码库 > 定向转发和重定向实现 <select >下拉表单数据传送

定向转发和重定向实现 <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="http://www.mamicode.com/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="http://www.mamicode.com/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 }

显示的效果:

     

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