提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、Servlet
1、 B/S架构
2、web服务器
3、安装注意事项
4、war包
5、热部署、开发版、开发版
热部署就是idea不会这边改变代码那边给i你放到tomcate上解压部署,而是等你确定好了再去打包成war包部署到tomcate上
6、http
7、请求报文
响应
8、状态码
9、servlet
tomcate处理HTTP解析好之后servlet类接受,作出回应,tomcate再对回应处理解析成http协议传给客户端
9.1 Httpservlet
创建servlet的两种方式,一种是最基础的实现GenaricServlet 简化servlet的实现方式
另外一种就是servlet继承Httpservlet,Httpservlet根据请求方式的不同调用不同的方法,处理请求
9.2 get和post请求
get是把数据放在请求头也就是request中能获得
post是把数据封装成jason,通过@requestBody获取
post请求更安全,因为这里不出现请求参数
9.3 HttpServletRequest HttpServletResponse
传来的数据在HttpServletRequest中 主要方法有getParameter()
9.3.1HttpServletResponse 介绍
1)resp在请求发起后进入容器创建的,然后再进入方法
2)客户端的每一个请求都有唯一的一个response(所以哪个请求要的响应可以一一对应上
++++++++++
3)HttpServletRequest接口是继承自ServletRequest接口的。增加了和HTTP相关的一些方法,所以只有HttpServletRequest可以调用getsession方法。
1、响应的数据在HttpServletResponse类中,Web服务器收到客户端的http请求,会针对每一次请求分别创建一个用于**代表请求**的 request 对象和**代表响应**的 response 对象。
2、request 和 response 对象代表请求和响应:
获取客户端数据,需要通过 request 对象;
**向客户端输出数据,需要通过 response 对象**
3、**Servlet 容器会针对每次请求创建一个 response 对象**,并把它作为参数传递给 Servlet 的 service 方法。Servlet 处理请求后,会将响应信息封装到 response 对象中,并由容器解析后返回给客户端。
9.3.2HttpServletResponse输出流
由于在 HTTP 响应消息中,大量的数据都是通过响应消息体传递的。因此 ServletResponse 遵循以 I/O 流传递大量数据的设计理念,在发送响应消息体时,定义了两个与输出流相关的方法。
返回值类型 方法 描述
ServletOutputStream getOutputStream() 获取输出流对象
PrintWriter getWriter 获取输出流对象
输出流对象调用write()输出
注意:getOutputStream() 和 getWriter() 方法互相排斥,不可同时使用,否则会发生 IllegalStateException 异常。
9.3.1怎样把数据响应给客户端
9.3.2解决中文乱码问题
加在过滤器中
response.setCharacterEncoding(“utf-8”);
response.setHeader(“Content-Type”, “text/html;charset=utf-8”);
注意,这个要写在getwrite之前
9.3.3 request实现转发跳转
使用forward跳转时,是在服务器内部跳转,地址栏不发生变化,属于同一次请求
forward表示一次请求,是在服务器内部跳转,可以共享同一次request作用域中的数据。
request作用域:拥有存储数据的空间,作用范围是一次请求有效(一次请求可以经过多次转发)
可以将数据存入request后,在一次请求过程中的任何位置进行获取
可以传递任何数据(基本数据类型,对象,数组,集合等)
存数据:request.setAttribute(key,value);
以键值对形式存储在request作用域中,key为String类型,value为Object类型
取数据:request.getAttribute(key);
通过String类型的key访问Object类型的value
9.3.4重定向
9.4 servelt生命周期
9.4.1 servlte线程问题
10、状态管理器
10.1 cookie 和 session
10.1.1 cookie
cookie:
浏览器发出请求,servlet这边创建一个cookie保存信息
返回response过程中将cookie带着给浏览器 ,再次请求的时候浏览器就带着这个cookie数据在请求头中,服务器根据这个判断是不是之前请求过
10.1.2 session
同一个浏览器多次请求属于一次会话(session)
原理
作用
获取session
session在request中
浏览器首次发送请求服务器端就会创建一个session
且获得此次会话的唯一sessionId
服务器怎么把sessionId传给浏览器cookie保存的呢
session借助cookie发送给客户端
session保存数据
session生命周期
11、servletContext
11.1 怎么获取servletContext对象
session.getServletContext()
11.2servletContext作用
11.2.1 获取项目真实路径
System.out.println(session.getServletContext().getRealPath(“/”));
11.2.2获取项目名称
11.2.3全局容器
作用域总结
12、过滤器
客户端与目标资源之间过滤
12.1 为什么用过滤器
12.2 过滤器作用
请求经过过滤器,拦截也经过过滤器在这里插入图片描述
12.3 如何编写过滤器
12.3.1编写过程
package com.example.demofx.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName="MyFilter", urlPatterns="/hello")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器生效了");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("拦截结束");
}
@Override
public void destroy() {
}
}
@RequestMapping("/hello")
public String login(HttpServletRequest request){
System.out.println("请求经过过滤器后转发到我这了");
return "登陆成功";
}
12.3.2过滤器的配置
12.4过滤器的拦截路径
12.4.1拦截优先顺序
注解配置情况下按照字母顺序
12.5过滤器的应用
12.5.1统一
乱码处理
12.5.2 权限验证
1)注意事项
要先转型才能获得session, HttpServletRequest和dofilter的参数servletRequest可不一样,只有HttpServletRequest才能获得session
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;