HTTP
请求格式:请求头 | 请求行 | 空行 | 请求实体
响应格式:响应头 | 响应行 | 空行 | 响应实体
流程:建立链接 | 发送请求 | 响应 | 关闭链接
方式:GET POST 等
GET请求数据拼接在请求头的请求地址后,不安全,不限制大小(但地址栏有长度限制),适合少量数据
POST请求数据在请求实体中,安全,适合大量数据
Tomcat
目录结构
- \bin 存放启动和关闭Tomcat的可执行文件
- \conf 存放Tomcat的配置文件
- \lib 存放库文件
- \logs 存放日志文件
- \temp 存放临时文件
- \webapps 存放web应用
- \work 存放JSP转换后的Servlet文件
Servlet
- 创建普通的java类并继承HttpServlet
- 重写service方法,在service方法中写逻辑代码
- 在webRoot/WEB-INF/web.xml中配置Servlet
Servlet的方法:Service, doGet, doPost
service()
- 优先选择
- 可处理GET和POST
- super.service()再次根据请求方式调用doGet和doPost,没找到则报405
doGet()
- 处理GET
doPost()
- 处理POST
Request对象
获取请求数据
Response对象
响应数据到浏览器
请求转发
req.getRequestDispatcher(String path).forward(req,resp);
把表单数据转发给另一个Servlet,浏览器地址不改变
可重复提交的数据,可以使用请求转发
重定向
resp.sendRedirect(String uri);
避免表单数据重复提交
将无法处理的请求交给其它Servlet
浏览器地址改变
Cookie
解决发送的不同请求的数据共享问题
存储在浏览器
- 创建Cookie
Cookie c = new Cookie(String name,String value);
- 可设置有效时间
默认临时存储,可设置定时存储
c.setMaxAge(int seconds);
- 可设置有效路径
默认所有请求都附带,除非设置有效路径
c.setPath(String uri);
- 响应Cookie给客户端
resp.addCookie(c);
- 获取Cookie
Cookie[] cks = req.getCookies();
if(cks!=null){
for(Cookie c:cks){
String name = c.getName();
String value = c.getValue();
}
}
Session
解决一个用户的不同请求数据共享问题
服务器创建,存储在服务器端
依赖Cookie技术,将Session对象的JSSEIONID通过Cookie存储在浏览器
- 创建/获取Session对象(如果SessionID失效,创建新的)
HttpSession hs = req.getSession();
- 设置Session存储时间
默认存储时间30分钟
在指定时间内Session对象没有使用则销毁,如果使用了则重新计时
hs.setMaxInactiveInterval(int seconds);
- Session强制失效
hs.invalidate();
- 存储数据
键是String,值是Object,什么都可以存
hs.setAttribute(String name,Object value);
- 获取数据
hs.getAttribute(String name);
ServletContext
不同用户数据共享
- 获取ServletContext
ServletContext sc = this.getServletContext();
- 数据存储
sc.setAttribute(String name,Object value);
- 数据获取
sc.getAttribute(String name);
- 获取web.xml数据
sc.getInitParameter(String name);
配置方式:
<context-param>
<param-name>name</param-name>
<param-value>value</param-value>
</context-param>
- 获取项目根目录下资源绝对路径
String path = sc.getRealPath(String path);
- 获取项目根目录下资源的流对象
InputStream is = sc.getResourceAsStream(String path);
只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取