request和response,请求转发和重定向(图文详解)

request对象

request对象时javax.servlet.http.HttpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接受通过Http协议传送到服务端的数据(包括信息头,系统信息,请求方式及请求参数等)。request对象的作用域为一次请求。

request对象常见的方法:
           String getParameter(String name):根据请求的字段名key(比如input标签的name属性),返回字段值value
           String[] getParameterValue(String name):根据请求的字段名key,返回多个字段值(比如input标签的value属性,一般是checkbox对象)
           void setCharacterEncoding(" utf-8"):设置post请求编码(tomcat7以前默认为iso-8859-1,tomcat以后为utf-8)
           getRequestDispatcher("b.jsp").forward(request,response):请求转发的方式跳转页面
           ServletContext getServletContext():获取项目的ServletContext对象

登录注册实例:

register.jsp 和show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    My JSP 'register.jsp' starting page
    
	
	
	    
	
	
	

  
  
  
   
用户名:
密码:
年龄:
爱好:
音乐 编程 游戏 篮球


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>






My JSP 'show.jsp' starting page











	<%
		//设置post编码
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("useName");
		String pwd = request.getParameter("usePwd");
		int age = Integer.parseInt(request.getParameter("useAge"));

		String[] hobbies = request.getParameterValues("useHobbies");
	%>

	注册成功信息如下:
姓名:<%=name%>
年龄:<%=age%>
密码:<%=pwd%>
爱好:
<% if (hobbies != null) { for (String hobby : hobbies) { out.print(hobby + " "); } } %>

结果显示如下:

register.jsp

request和response,请求转发和重定向(图文详解)_第1张图片

show.jsp

request和response,请求转发和重定向(图文详解)_第2张图片

网页跳转:http://localhost:8888/MyJspProject/show.jsp?useName=Emove&usePwd=123&useAge=23&useHobbies=%E9%9F%B3%E4%B9%90&useHobbies=%E7%BC%96%E7%A8%8B
        其格式为:链接/文件?参数名1=参数值1 & 。。。。
    get提交方式:method=”get“ 和地址栏、超链接()请求方式默认都属于get提交方式
    get和post请求方式的区别:
        1、get方式在地址栏上显示信息(但是地址栏能容纳的信息有限,4-5kb,如果请求数据存在大文件,会出现地址栏无法容纳全部的数据而出错),post不会
        2、文件上传操做必须是post
          一般推荐使用post    

response对象

response对象代码的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。

response对像的重要方法:

void addCookie(Cookie cookie):服务端向客户段增加cookie对象
           void sendRedirect(String location)throws IOException:页面跳转的一种方式(重定向)
           void setContentType(String type):设置服务端响应编码(设置服务端ContentType类型)

实例:登录
            login.jsp check.jsp success.jsp

login.jsp

用户名:
密码:

           check.jsp

<%
    	request.setCharacterEncoding("utf-8");
    	String name = request.getParameter("useName");
    	String pwd = request.getParameter("usePwd");
    	if(name.equals("Emove") && pwd.equals("123456")){
    		//只有登录成功,session中才会有userName和userPwd
    		session.setAttribute("userName", name);
    		session.setAttribute("userPwd", pwd);
    		System.out.print("sessionid:"+session.getId()+"
"); Cookie cookie = new Cookie("name",name); response.addCookie(cookie); //请求转发跳转到welcome request.getRequestDispatcher("Welcome.jsp").forward(request, response); }else{ //重定向 //登录失败 response.sendRedirect("login.jsp"); } %>

         success.jsp

登陆成功! 
欢迎: <% String name = request.getParameter("useName"); out.print(name); %>

请求转发和重定向原理

请求转发

当客户端提交表单信息,向服务端发送请求时,服务端通过check.jsp验证表单信息,验证成功后,跳转到success.jsp。其中只有一次请求,一次响应。

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

注:.forward(request,response);为默认格式。

其原理图如下:

request和response,请求转发和重定向(图文详解)_第3张图片

重定向

当客户端提交表单信息,向服务端发送请求时,服务端通过check.jsp验证表单信息,验证成功后,向客户端发送第一次响应,告诉客户端发送请求到success.jsp。服务端success.jsp再给出响应。其中有两次请求,两次响应。

response.sendRedirect("success.jsp");

其原理图如下:

request和response,请求转发和重定向(图文详解)_第4张图片

请求转发和重定向的区别

  请求转发 重定向
地址栏是否改变
数据是否在一次请求中有效 保留 不保留
请求的次数 一次 两次
跳转发生的位置 服务端 第二次时响应的位置

 

注:数据是否在一次请求中有效意思为:数据是否可在JSP页面间共享。因为请求准发在服务端发生跳转,即为一次请求,所以数据会被保留。而重定向需要两次请求,数据保留在第一次请求中,即采用重定向到跳转到的页面访问不到第一次请求时的数据。

你可能感兴趣的:(JSP学习)