定向转发和重定向实现 <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 }

显示的效果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

JSP简单入门(2)

六、行为元素(JSP标签,简述) JSP提供了一种称之为Action的元素,在JSP页面中使用Action元素可以完成各种通用的JSP页面功能。Action元素...

39750
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb12-JSP, EL表达式,JSTL标签

JSP & EL & JSTL 一.JSP 1. jsp回顾 jsp作用 jsp全称java server pages(java服务器页面),本质是一个serv...

77590
来自专栏Java帮帮-微信公众号-技术文章全总结

JSP简单入门(1)

JSP页面中可以包含模板元素、脚本元素、EL表达式、注释、指令、和行为元素(JSP标签)等内容。有三种类型的脚本元素:JSP脚本片断、JSP表达式和JSP声明,...

505110
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb11-jsp.cookie.session(2)

http协议规定 Http协议对Cookie做了一些规定,如下所示: a. 一个Cookie的大小,最大为4KB; b. 一个服务器最多向一个浏览器保存20个C...

46790
来自专栏Java帮帮-微信公众号-技术文章全总结

JSP与EL表达式重点学习笔记(1)

Jsp&el表达式 JSP指令 ? JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件...

40690
来自专栏Java帮帮-微信公众号-技术文章全总结

错误集锦2.jsp页面syntax error,insert“}”to complete block

补:错误集锦1-HttpServlet was not found on the Java Build Path。 我们在用Eclipse进行Java web开...

40340
来自专栏Java帮帮-微信公众号-技术文章全总结

Java开发必会框架Struts2第四天

一、OGNL配合通用标签的其他使用 1、iterator标签(很重要) ? ? ? 2、OGNL投影(了解) 2.1、使用过滤条件投影 ? 2.2、投影指定属性...

379120
来自专栏Java帮帮-微信公众号-技术文章全总结

JSP与EL表达式重点学习笔记(2)

EL(表达式语言) 1 EL概述 ? 1.1 EL的作用 JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标...

29140
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb11-jsp.cookie.session(1)

? Jsp&cookie & session 一.jsp 1. jsp的介绍 JSP全名为Java Server Pages,中文名叫java服务器页面,本质...

32550
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb13-设计模式案例实现(Java真正的全栈开发)

? JavaWeb设计模式&案例 一.JavaWeb的设计模式 1. jsp模式介绍 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一...

38960

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励