首页 > 代码库 > 定向转发和重定向实现 <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 >下拉表单数据传送