Servlet jsp页面的转发和重定向

    科技2022-08-10  93

    转发:

    转发是服务器收到请求后为了完成响应跳转到一个新的地址,转发请求一次;转发地址栏不会发生变化;转发是服务器端行为;

    客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的 jsp 页面,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和 jsp 共享的是同一个request,在servlet里面放的所有东西,在指定的 jsp 页面中都能取出来,因此,指定的jsp 页面能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。

    request.getRequestDispatcher("login.jsp").forward(request, response);

    重定向:

    重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,重定向至少请求两次;重定向地址栏会发生变化;重定向是客户端行为

    //重定向 response.sendRedirect("success.jsp");

    客户发送一个请求到服务器,服务器匹配servlet,servlet处理完之后调用了sendRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问 指定 jsp 页面,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求指定 jsp 页面, 这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。(服务器向浏览器发送一个302状态码以及一个location消息头,浏览器收到请求后会向再次根据重定向地址发出请求)

    下面粘代码

    这里是登录页面 login.jsp页面 转发页面 登录不成功

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% String msg=(String)request.getAttribute("msg"); if(msg==null) msg=""; %> <form action="loginCheck.jsp" method="post"> 用户名: <input type="text" name="name"/> <br/> 密码: <input type="password" name="paw"/> <span style="color: pink"><%=msg %></span> <br/> <input type="submit" value="登录"/> </form> </body> </html>

    succse . jsp 页面 重定向的页面,登陆成功

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'success.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 成功! <% //获取参数 String name=request.getParameter("name"); String paw=request.getParameter("paw"); String msg=(String)request.getParameter("msg"); %> <%=name %> <%=paw %> <%=msg %> </body> </html>

    是转发和重定向的页面 loginCheck.jsp页面

    <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="cn.songningning.util.DBHelper"%> <%@page import="java.sql.Connection"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'loginCheck.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% //设置编码 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); //获取参数 String name = request.getParameter("name"); String paw = request.getParameter("paw"); //jdbc代码 Connection conn = DBHelper.getConn(); String sql = "select*from User_name where name=? and paw=?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, name); ps.setString(2, paw); ResultSet rs = ps.executeQuery(); if (rs.next()) { //登录成功 //重定向 response.sendRedirect("success.jsp"); } else { //登录失败 //转发 request.setAttribute("msg", "登陆失败"); request.getRequestDispatcher("login.jsp").forward(request, response); } DBHelper.close(conn, ps, rs); %> </body> </html>
    Processed: 0.014, SQL: 9