前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >定向转发和重定向实现 <select >下拉表单数据传送

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

作者头像
Gxjun
发布2018-03-26 15:39:23
1.1K0
发布2018-03-26 15:39:23
举报
文章被收录于专栏:mlml

       定向转发的特点:

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

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

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

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

    实现的两个API:        

代码语言:javascript
复制
1 RequestDispatcher rd 
2          = request.getRequestDispatcher("Demo_1/Login.jsp");
3 
4 rd.forward(request, response);

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

上面这个控件的代码:

       JSP代码:

代码语言:javascript
复制
 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文件)

代码语言:javascript
复制
 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文件:

代码语言:javascript
复制
 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:

代码语言:javascript
复制
 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类:

代码语言:javascript
复制
 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类:

代码语言:javascript
复制
 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 }

显示的效果:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-12-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档