request&response

一、request

Request对象: 请求对象,

父接口: ServletRequest

Servlet继承HttpServlet, 得到请求对象: 子类对象: HttpServletRequest对象

HttpServletRequest 是ServletRequest 子接口

request的方法

  1. 请求头

  2. 请求参数 重点

  3. 域对象功能 重点

  4. 请求转发 重点

  5. 其他方法, 获取客户端信息, url相关的信息...

域对象功能 request域

在同一次请求内有效

获取请求头的方法

request与请求头相关的方法有:

  • String getHeader(String name):获取指定名称的请求头;

  • Enumeration getHeaderNames():获取所有请求头名称;

  • int getIntHeader(String name):获取值为int类型的请求头。

其他方法

  • int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;

  • String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;

  • String getMethod():返回请求方法,例如:GET

  • Locale getLocale():返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;

  • String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;

  • void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效! 重点

  • String getContextPath():返回上下文路径,例如:/hello

  • String getQueryString():返回请求URL中的参数,例如:name=zhangSan

  • String getRequestURI():返回请求URI路径,例如:/hello/oneServlet

  • StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;

  • String getServletPath():返回Servlet路径,例如:/oneServlet

  • String getRemoteAddr():返回当前客户端的IP地址;

  • String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;

  • String getScheme():返回请求协议,例如:http;

  • String getServerName():返回主机名,例如:localhost

  • int getServerPort():返回服务器端口号,例如:8080

请求转发

动态资源(Servlet) 跳转到其他资源(Servlet, html, jsp...)

  • 请求转发

  •  

    代码:

    request对象的方法:

    1. RequestDispatcher getRequestDispatcher(String path) 得到转发器对象

    2. 调用RequestDispatcher的forward(request,response)

    RequestDispatcher.forward(request,response);

    1与2合并:

    request.getRequestDispatcher(String path).forward(request,response);

    特点:

    1. 一次请求

    2. 客户端的url不会变

    3. 服务器端的转发, 只能转发到服务器内部资源

    request域 请求转发中使用

  • 重定向

     

二、response

获取请求参数

  • String getParamter(String name) 获取一个请求参数名对应一个值

第一种情况: 前端传递请求参数名, 并且传递值

结果: 传递值

第二种情况: 前端传递请求参数名,没有传递值 username=&email=111

结果: ""

第三种情况: 前端没有传递请求参数名

结果: null

String[] getParameterValues(String name) 一个请求参数名对应多个值

Map<String,String[]> getParameterMap() 获取所有的请求参数, 得到一个map集合

一般结合第三方jar, 把map转换为java对象

浏览器缓存问题: 修改页面, 访问的时候,页面没有改, 浏览器缓存问题

chrome: ctrl + F5 底层刷新

idea 修改html/jsp, 不想重启服务器, 让服务器热更新

页面的路径使用绝对路径

<!--路径:
    1. 相对路径  从当前url的开始   不推荐
 http://localhost:8080/user/AServlet
   转发到  demo.html
  <link href="./bootsrap/css/bootstrap.css"/>
  找: http://localhost:8080/user/bootsrap/css/bootstrap.css   404
2.绝对路径  项目的根目录开始   从/发布的项目名开始   推荐
  /bootstrap/css/bootstrap.css
  现在url: http://localhost:8080/user/AServlet
   http://localhost:8080/bootstrap/css/bootstrap.css
-->

Response对象 响应对象

  1. 设置响应头

  2. 发送状态码

  3. 设置响应正文: 得到响应输出流,输出 重要

  4. 重定向 重要

设置响应头

  • void setIntHeader(String name, int value) 设置响应头, 响应头的值int类型

  • void addIntHeader(String name, int value)

  • void addHeader(String name,String value) 设置响应头, 响应头的值String

  • void setHeader(String name,String value)

  • void setContentType(String )设置content-type的响应头

重要的响应头:

content-type: "text/html;charset=UTF-8":

告诉浏览器, 服务器响应的内容类型 ,浏览器根据内容类型进行解析

charset: 对文本文件有效

text/html: 响应html文本

图片: 二进制文件

  • image/gif:gif图片格式

  • image/jped:jpg图片格式

  • image/png:png图片格式

css:

text/css

js:

text/javascript

json:

application/json

setHearder()

cookie: cookie技术

发送状态码 了解

  • response.setStatus(200):设置状态码;

  • response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。

200: 成功

304: 转发

404: 资源不存在

405: 不支持请求方式

400: 失败请求

500: 服务器内部错误, 后台出现异常

响应正文

通过响应输出流

字符响应输出流: response.getWriter() 文本 json数据

字节响应输出流: response.getOutputStream() 万能流, 文本,文件

注意:

这个两个流不能共存, 同时使用, 抛异常java.lang.IllegalStateException

重定向

response.sendRedirect(重定向的路径)

特点:

  1. 两次请求, request域无效

  2. 客户端地址栏发生变化

  3. 跳转发生在客户端

  4. 跳转资源:可以是服务器内部资源(无法跳转到WEB-INF目录的资源), 也可以是服务器外部资源

重定向与转发资源路径问题:

//访问的项目名: /web
 //重定向到demo1.html
 // 重定向的url写绝对路径:   直接写/ 忽略项目名
 // 如果设置访问的项目名: 必须加 /项目名/资源路径
 // /项目名 通过request.getContextPath()
 // 重定向的url: 统一的写: req.getContextPath()+"/资源路径"
resp.sendRedirect(req.getContextPath()+"/demo1.html");
​
 //转发
 // 转发的url, 有项目名,没有项目名, 都不需要加/项目名
 // 统一写法:  /资源路径
// req.getRequestDispatcher("/demo1.html").forward(req,resp);

乱码处理

码表: 文字/字母/字符 对应 数字(码表)

中: 16343 ak编码 ---> 使用bk编码 : 尜 乱码

中 10231 bk编码

尜 16343

对ASCII码表的扩展 0~127 定了 英文字母:

UTF-8 GBK GB2312 Big5 ISO-8859-1(西欧语言)

项目的编码统一: UTF-8

JavaWeb使用Request,Response 默认编码: ISO-8859-1 (不包含中文)

请求编码

  • get请求, 通过url

    处理方式:

  1. Tomcat 从8开始, 默认处理Get请求编码, 默认使用的编码: UTF-8

  2. Tomcat7或者之前的, 没有处理Get请求编码

    1. 在server.xml 指定get请求编码: UTF-8

    <Connector URIEncoding= "UTF-8"  connectionTimeout= "20000"  port= "8888"  protocol= "HTTP/1.1"  redirectPort= "8443" />
    1. 对所有的web服务器都有效, 通过代码处理

    //1.打散
    byte[] bytes = name.getBytes("UTF-8");
    //2.组装成字符串
    name = new String(bytes,"UTF-8");
  • post请求, 通过请求体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值