一、request
Request对象: 请求对象,
父接口: ServletRequest
Servlet继承HttpServlet, 得到请求对象: 子类对象: HttpServletRequest对象
HttpServletRequest 是ServletRequest 子接口
request的方法
请求头
请求参数 重点
域对象功能 重点
请求转发 重点
其他方法, 获取客户端信息, 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对象的方法:
-
RequestDispatcher getRequestDispatcher(String path) 得到转发器对象
-
调用RequestDispatcher的forward(request,response)
RequestDispatcher.forward(request,response);
1与2合并:
request.getRequestDispatcher(String path).forward(request,response);
特点:
-
一次请求
-
客户端的url不会变
-
服务器端的转发, 只能转发到服务器内部资源
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对象 响应对象
设置响应头
发送状态码
设置响应正文: 得到响应输出流,输出 重要
重定向 重要
设置响应头
-
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(重定向的路径)
特点:
两次请求, request域无效
客户端地址栏发生变化
跳转发生在客户端
跳转资源:可以是服务器内部资源(无法跳转到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
处理方式:
-
Tomcat 从8开始, 默认处理Get请求编码, 默认使用的编码: UTF-8
-
Tomcat7或者之前的, 没有处理Get请求编码
-
在server.xml 指定get请求编码: UTF-8
<Connector URIEncoding= "UTF-8" connectionTimeout= "20000" port= "8888" protocol= "HTTP/1.1" redirectPort= "8443" />
-
对所有的web服务器都有效, 通过代码处理
//1.打散 byte[] bytes = name.getBytes("UTF-8"); //2.组装成字符串 name = new String(bytes,"UTF-8");
-
-
post请求, 通过请求体