JSP中Servlet的Request与Response的用法与区别

JSP中Servlet的Request与Response的用法与区别

简介:Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

一,Request

Request代表请求对象,其中封装了对请求中具有请求行、请求头、实体内容的操作的方法,通过这个对象提供的方法,可以获得客户端请求的所有信息。

1. 作为容器

setAttribute(String name,Object o)将数据作为request对象的一个属性存放到request对象中
getAttribute(String name)        获取request对象的name属性的属性值
removeAttribute(String name)     移除request对象的name属性
getAttributeNames()     获取request对象的所有属性名 

2. 获得客户端信息        

 getRequestURL()返回客户端发出请求时的完整URL。
getRequestURI()返回请求行中的资源名部分。
getRemoteAddr()返回发出请求的客户机的IP地址。
getRemoteHost()返回发出请求的客户机的完整主机名。
getRemotePort()返回客户机所使用的网络端口号。
getLocalAddr()返回WEB服务器的IP地址。
getLocalName()返回WEB服务器的主机名。
  getQueryString()返回请求行中的参数部分。
getPathInfo()返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。

3. 获得客户端请求头  

getHeader(string name)
getHeaders(String name)
getHeaderNames()

4. 获得客户端请求参数(客户端提交的数据)

getParameter(String)方法(常用)
getParameterValues(String name)方法(常用)
getParameterNames()方法(不常用)
getParameterMap()方法(编写框架时常用) 

5.request接收表单提交中文参数乱码问题解决

(1)get方式提交表单:

对于以get方式传输的数据,request即使设置了以指定的编码接收数据也是无效的(至于为什么无效我也没有弄明白),默认的还是使用ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。

解决办法:

1) 在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。

String name = request.getParameter("name");//接收数据
     name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;//获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题

2) server.xml中配置

  URIEncoding=utf-8

(2)post方式提交表单:

之所以会产生乱码,就是因为服务器和客户端沟通的编码不一致造成的,因此解决的办法是:在客户端和服务器之间设置一个统一的编码,之后就按照此编码进行数据的传输和接收。

 request.setCharacterEncoding("UTF-8");

6.Request对象实现请求转发

request.getRequestDispatcher("/test.jsp").forward(request, response);
request.getRequestDispatcher("/test.jsp").include(request, response);
调用forward()方法后,原先存放在HttpResponse对象中的内容将会自动被清除
调用include()方法后,原先存放在HttpResponse对象中的内容将不会被清除,内容追加 

二,Response

Response代表响应,于是响应消息中的状态码、响应头、实体内容都可以由它进行操作

1. 向客户端(浏览器)发送数据的相关方法

getOutputStream()
getWriter()

2.向客户端(浏览器)发送响应头的相关方法

addDateHeader()
addHeader()
addIntHeader()
containsHeader()
      setDateHeader()
setHeader()
setIntHeader()

例如:

  response.setHeader("content-type", "text/html;charset=UTF-8"); 

3.向客户端(浏览器)发送响应状态码的相关方法--setStatus()

实例代码:

private void downloadFileByOutputStream(HttpServletResponse response)
      throws FileNotFoundException, IOException {
    //1.获取要下载的文件的绝对路径
    String realPath = this.getServletContext().getRealPath("/download/1.JPG");
    //2.获取要下载的文件名
    String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
    //3.设置content-disposition响应头控制浏览器以下载的形式打开文件
    response.setHeader("content-disposition", "attachment;filename="+fileName);
    //4.获取要下载的文件输入流
    InputStream in = new FileInputStream(realPath);
    int len = 0;
    //5.创建数据缓冲区
    byte[] buffer = new byte[1024];
    //6.通过response对象获取OutputStream流
    OutputStream out = response.getOutputStream();
    //7.将FileInputStream流写入到buffer缓冲区
    while ((len = in.read(buffer)) > 0) {
    //8.使用OutputStream将缓冲区的数据输出到客户端浏览器
      out.write(buffer,0,len);
    }
    in.close();
  }

它们的区别:

其实从字面上我们就可以知道他们俩的区别在于一个是请求(request),而另一个是响应(response),servlet作为服务端,请求便是来自浏览器的请求,响应便是服务器对浏览器的响应。在你想获取浏览器请求的数据时,我们就要用request,而在我们要向浏览器响应数据或页面时,我们就要用到response。

request 是请求的载体,它附带着,请求的参数,ip,cookie,表单,字符编码,或者上传文件。
你可以通过request去获得你所需要的信息。

response是响应的载体,你可以设置,表头,报文,响应文件类型,字符编码,response,自带一个输出流,当你需要将一个页面或者一个文件传到客户端时,你可以通过这个流来进行操作

希望通过本文能帮助到大家,如有疑问请留言或者到本站社区交流讨论,感谢阅读,谢谢大家对本站的支持!

(0)

相关推荐

  • JSP状态管理的简单介绍

    JSP状态管理的简单介绍 一 http协议的无状态性 无状态性是指:当浏览器发送请求给服务器时,服务器响应客户端请求. 但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器. 简单地说,就是服务器不会去记得你,所以就是无状态协议. 二 保存用户状态的两大机制 Session Cookie 三 Cookie概述 Cookie:中文名称为"小甜饼",是Web服务器保存在客户端的一系列文本信息. 典型应用一:判断注册用户是否已经登录网站. 典型应用二:"

  • JSP 中Session的详解及原理分析

    JSP 中Session的理解: 一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务. 二.Session和Cookie的主要区别 Cookie是把用户的数据写给用户的浏览器. Session技术

  • JSP之表单提交get和post的区别详解及实例

    JSP之表单提交get和post的详解及实例 一 get和post的区别 二 实战(post方式提交) 1.login.jsp <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %> <% String path = request.getContextPath(); String basePath = req

  • 详解SpringBoot 添加对JSP的支持(附常见坑点)

    序言: SpringBoot默认不支持JSP,如果想在项目中使用,需要进行相关初始化工作.为了方便大家更好的开发,本案例可直接作为JSP开发的脚手架工程 SpringBoot+War+JSP . 常见问题: 1.修改JSP需重启才能生效: 在生产环境中,SpringBoot重新编译JSP可能会导致较大的性能损失,并且很难追查到问题根源,所以在最新的版本中,官方已经默认关闭此功能,详见JspServlet类的初始化参数.那么,如何解决这个问题呢?推荐两个解决办法:1.使用devtools 2. 添

  • spring boot实战之使用JSP的示例

    前后端分离的架构有其优势,但具体情况具体分析,并不是任何时候使用前后端分离架构都是合适的.我最近就体会到其中的坑,因为部门属性的问题,前端项目占比较低,所以公司前端基本上都是新手,结果就是后端接口完成了一个多月,前端还在加班加点的赶.前后端人员的能力和人数与工作量是匹配的,前后端都能hold住时建议使用前后端分离架构,如果前端能力有限或人员较少,那就最好不要采用,这样才能保证项目进度可控. Spring Boot并不建议使用JSP,但是可能有习惯和人员知识面的限制,还是希望使用jsp,则可以根据

  • SpringBoot项目如何访问jsp页面的示例代码

    最近在接支付项目,从官方下了个及时到款的demo,想在springBoot项目中运行起来,发现访问jsp的时候直接会访问到jsp页面的源文件. 如何在springBoot项目中访问到jsp页面? 1.添加pom依赖 首先在原来的pom文件基础上加上这两个配置 <!-- tomcat 的支持.--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring

  • JSP 中response.setContentType()的作用及参数

    JSP 中response.setContentType()的作用及参数 response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据. 例如web浏览器就是通过MIME类型来判断文件是GIF图片.通过MIME类型来处理json字符串. Tomcat的安装目录\conf\web.xml 中就定义了大量MIME类型 ,可以参考. response.setContentType("text/h

  • JSP中Servlet的Request与Response的用法与区别

    JSP中Servlet的Request与Response的用法与区别 简介:Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一,Request Request代表请求对象,其中封装了对请求中具有请求行.请求头.实体内容的操作的方法

  • JSP 中request与response的用法详解

    JSP 中request与response的用法详解 概要: 在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍.因为其实request和response的使用大部分都是对http协议的操作. request对象的介绍 我们先从request对象进行介绍: 我们知道http协议定义了请求服务器的格式: 请求行 请求头 空格 请求体(get请求没有请求体) 好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度: 应

  • JSP 中Servlet的自己实现

    JSP 中Servlet的自己实现 一 步骤 1.继承HttpServlet 2.重写doGet()或者doPost()方法 3.在web.xml中注册Servlet 二 HttpServlet类继承图 三 实例 1.创建MyFirstServletDemo web project. 2.编辑index.jsp <%@ page language="java" import="java.util.*" contentType="text/html;

  • 关于ThreadLocal对request和response的用法说明

    记得在一篇博文中看到描述threadLocal的一句话: ThreadLocal除了适用于多线程保证每条线程都有自己的变量副本外,还适用于在线程上下文中共享某些变量值. 这两种说法是有区别的.前者强调的是,使用ThreadLocal对副本做保护,避免同步.加锁,降低效率:后者强调的是,某个变量线程上下文中,A处用到.B处用到.C处用到,先在入口处set一个值,后使用ThreadLocal的get方法直接在需要用到的地方拿这个值. 项目中,最近理由cookie存值,使用到了threadLocal这

  • JavaScript中innerHTML,innerText,outerHTML的用法及区别

    不废话了,请看下文示例介绍. 用法: <div id="test"> <span style="color:red">test1</span> test2 </div> 在JS中可以使用: test.innerHTML: 也就是从对象的起始位置到终止位置的全部内容,包括Html标签. 上例中的test.innerHTML的值也就是"<span style="color:red">

  • JSP内置对象:Request和Response的简单介绍及使用

    JSP内置对象之request对象客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例.序号 方 法 说 明 1 object getAttribute(String name) 返回指定属性的属性值 2 Enumeration getAttributeNames() 返回所有可用属性名的枚举 3 String getCharacterEncoding() 返回字符编码方式 4 int getContentLen

  • JSP中的编译指令和动作指令的两点区别

    JSP中的编译指令和动作指令的区别 1.编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的脚本动作 2.编译指令是在将JSP编译成Servlet时起作用,而动作指令可替换成JSP脚本,是JSP脚本标准化写法

  • 小论asp中request与response的用法

    request的用法: request有三种获取表单值的方法,分别用于不同的表单递交方法的获取.表单简单地可以认为是指页面所要传递的参数的一个集合,而其递交的方法有两个post和get.在这两种方法里面,分别对应着不同的接收方法,其具体的实现如下: 1.对于post方法递交的表单的获取值方法,运用request的form属性的get方法获取所要字段标识.例如,获取提交表单中的txtUserName的值放到字符串usrName中的代码如下,string userName=Request.Form.

  • jsp中include指令静态导入和动态导入的区别详解

    1.什么是静态导入? 静态导入指的是,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来.include的静态导入指令使用语法: 复制代码 代码如下: <%@include file="relativeURLSpec"%> 静态导入使用范例include1.jsp: 复制代码 代码如下: <%@ page contentType="text/html; charset=utf-8" langu

  • JSP中操作数据库的常用SQL标签用法总结

    <sql:setDataSource> 标签设定数据源 语法结构: 复制代码 代码如下: <sql:setDataSource url="jdbcUrl" driver="driverClassName" user="userName" password="password" [var = "varName"][scope="{page | request | session |

随机推荐