定向转发和重定向实现 <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 }
显示的效果:
- thinkphp生成的验证码不显示问题解决
- 深入剖析Spring(二)——IoC容器的实现
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- 深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)
- Restful安全认证及权限的解决方案
- Java并发容器大合集
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- web.xml中load-on-startup的作用
- Java并发编程的艺术(七)——Executors
- Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
- PowerDesigner使用教程|使用方法
- Java并发编程的艺术(一)——并发编程需要注意的问题
- 梯度下降法快速教程 | 第三章:学习率衰减因子(decay)的原理与Python实现
- Java并发编程的艺术(三)——volatile
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MYSQL 数据库结构优化
- 解密日志文件工具类
- InnoDB表优化
- SAP Spartacus如何创建自定义route页面
- SAP Spartacus的url parameter
- 来讲讲你对ThreadLocal的理解
- 用了这个jupyter插件,我已经半个月没打开过excel了
- vue接入腾讯地图(二)【标注&定位实战】
- 图像处理笔记(4)----OpenCV对象追踪
- MySQL 数据恢复
- 【从0到1学习边缘容器系列2】之 边缘应用管理
- 【从0到1学习边缘容器系列-3】应用容灾之边缘自治
- Hacking with iOS: SwiftUI Edition - 里程碑:项目 13 - 15
- HDU 1896 优先队列用法
- 蓝桥杯省内模拟赛C++