定向转发的特点:
(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 8 9 1039 4011 注册页面 12 13 14 15 16 17 20 21 22 23 <% String authority = (String) request.getAttribute("authority"); %>24
效果图:
关于: 然后需要一个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 8 9 1042 4311 注册页面 12 13 14 15 16 17 20 21 22 23 <% 24 String username = request.getParameter("username");25 String authority = request.getParameter("authority");26 %>27
对于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 }
显示的效果: