servlet&HTTP&Reques&Response快速入门
Posted --believe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet&HTTP&Reques&Response快速入门相关的知识,希望对你有一定的参考价值。
servlet相关配置
-
URLPattern:servlet访问路径
一个servlet可以定义多个访问路径
@WebServlet("/d4","/dd4","/ddd4")
路径规则:
- /xxx:路径匹配
- /xxx/xx:多层路径,目录结构
- *.do:拓展名匹配
HTTP
-
概念
Hyper Text Transfer Protocol超文本传输协议。何谓协议?即定义了两个设备之间传输信息的格式。
-
特点
- 默认端口号是80
- 基于请求/响应模型的:一次请求对应一次响应
- 无状态的,每次请求之间相互独立,不能交互数据
3.版本
- 1.0:每一次请求相应都会建立新的连接
- 1.1:复用连接
-
请求消息数据格式
-
请求行
GET /login.html HTTP/1.1
HTTP协议中有7种请求方法,常用的有2种
GET
- 请求参数在请求行中,在url后?连接
- 请求的url长度有限制
- 不太完全
POST
- 请求参数在请求体中
- 请求的url长度没有限制
- 相对安全
-
请求头
-
User-agent
浏览器告诉服务器,我的浏览器的版本信息
-
Referer
高速浏览器我从哪里来
可以防止盗链、进行统计工作
-
-
请求空行
空行,用于分隔post请求头和请求体。
-
请求体(正文)
post请求方式请求数据存放的地方
-
举例:
POST /login.html HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: http://localhost/login.html Connection: keep-alive Upgrade-Insecure-Requests: 1 username=zhangsan
-
-
响应消息数据格式(略)
Request
Resquest功能
主要用户获取请求消息数据
-
获取请求行数据 GET /day14/demo1?name=zhangsan HTTP/1.1
- getMethod 获取请求方法GET
- getContextPath获取虚拟路径/day14
- getServletPath获取servlet路径/demo1
- getQueryString获取Get请求参数name=zhangsan
- getRequestURI获取请求URI/day14/demo1
- getProtocol获取协议及版本HTTP/1.1
- getRemoteAddr获取客户机IP地址
-
获取请求头数据
- getHeader(String name)
- getHeaderNames():获取所有的请求头名称
-
获取请求体数据
getReader获取流对象后获取
其他功能
-
获取请求参数通用方法
- String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
- String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
- Enumeration getParameterNames():获取所有请求的参数名称
- Map<String,String[]> getParameterMap():获取所有参数的map集合
中文乱码问题
request.setCharacterEncoding("utf-8");
请求转发
request.getRequestDispatcher.forward(ServletRequest request,ServletResponse response)
-
特点
- 转发只是一次请求
- 只能转发到当前服务器内部资源中
- 浏览器地址栏不发生变化
-
共享数据
-
域对象:在一定的作用范围内共享数据
-
request域:在一次请求中的数据共享范围
setAttribute() 存储数据 getAttribute()获取数据 removeAttribute移除数据
-
ServletContext
(在Response下详细学习)
ServletContext getServletContext()
案例-登录
链接:案例-登录
Response
HTTP协议响应
-
请求消息:客户端发送给服务器的数据
- 请求行
- 请求头
- 请求空行
- 请求体
-
响应消息:服务端发送给客户端的消息
-
响应行
-
组成
协议/版本 响应状态码 状态码描述
-
响应状态码
1xx:服务端接受客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
2xx:成功,200
3xx:重定向。302重定向。304访问缓存
4xx:客户端错误
404请求路径没有对应的资源
405请求方式没有对应的doxxx方法
5xx:服务端错误500服务端内部异常
-
-
响应头
-
Content-Type:服务端告诉客户端本次响应体的数据格式以及编码格式
-
Content-disposition:服务端高数客户端以什么格式打开相应数据
–inline默认
–attachment;filename=xxx 以附件方式打开
response.setHeader("content-disposition","attachment;filname=111");
-
-
响应空行
-
响应体:传输的数据
-
响应内容实例
HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 101 Date: Wed, 06 Jun 2018 07:08:42 GMT <html> <head> <title>$Title$</title> </head> <body> hello , response </body> </html>
-
Response对象
-
设置响应消息
-
设置响应行
格式:HTTP/1.1 200 OK
设置状态码:setStatus
-
设置响应头
setHeader(String name, String value)
-
设置响应体
1.获取输出流getWriter或者getOutputStream
2.使用输出流
-
-
重定向
//response.setStatus(302);//1. 设置状态码为302 // response.setHeader("location","/day/servletDemo3"); //2.设置响应头location //上面的写法的简介 response.sendRedirect("/day/servletDemo3");
重定向和转发区别
- 重定向特点
- 地址栏发生变化
- 重定向可以访问其他站点
- 重定向是两次请求,不能用request域类共享数据
- 转发特点
- 转发地址路径不变
- 是一次请求
- 转发只能访问当前服务器的资源
访问路径
-
相对路径
比如./index.html
./当前目录
…/后退一级目录
-
绝对路径
比如 http://localhost/day14/demo
或者 /day14/demo
-
路径使用
-
客户端使用
需要添加虚拟目录,虚拟目录动态获取
request.getContextPath()
-
服务器使用
不需要添加虚拟目录,一般转发时用
-
服务器输出字符数据到浏览器
-
步骤
获取字符输出流 -> 输出数据
-
乱码问题
设置响应头
response.setContentType("text/html;charset=utf-8");
-
案例-验证码
链接:验证码案例
ServletContext对象
概念
代表整个web应用,可以和程序的容器(服务器)通信
获取
-
request获取
request.getServletContext();
-
HttpServlet获取
this.getServletContext();
功能
-
获取MIME类型
MIME类型:在互联网通信过程中定义的一种文件数据类型
格式:大类型/小类型
text/html image/jpeg
获取方式
getMimeType(String file)
-
域对象:共享数据
- setAttribute
- getAttribute
- removeAttribute
ServletContext对象的范围:所有用户请求的数据,个人理解是所有的servlet之间共享数据
-
获取文件的真实(服务器)路径
String b = context.getRealPath("/b.txt");//web目录下资源访问 System.out.println(b); String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问 System.out.println(c); String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问 System.out.println(a);
案例-文件下载
-
文件下载需求
- 页面显示超链接
- 点击超链接后弹出下载提示框
- 完成图片文件下载
-
链接 文件下载-案例
以上是关于servlet&HTTP&Reques&Response快速入门的主要内容,如果未能解决你的问题,请参考以下文章
servlet&HTTP&Reques&Response快速入门
servlet&HTTP&Reques&Response快速入门