中文乱码问题
// post方式下 设置编码,防止中文乱码
// get 方式目前不需要设置编码
// 需要注意的是,设置编码这一句代码必须在所有的获取参数动作之前
request.setCharacterEncoding("UTF-8");
servlet的继承关系
继承关系
- javax.servlet.Servlet接口javax.servlet.GenericServlet抽象类
- javax.servlet.http.HttpServlet抽象子类
相关方法
javax.servlet.Servlet接口:
- void init(config) - 初始方法void service(request, response) - 服务方法void destory - 销毁方法
javax.servlet.GenericServlet抽象类
- void service(request,response) - 仍然是抽象的
javax.servlet.http.HttpServlet抽象子类
void service(request,response) - 不是抽象的
String method = req.getMethod 获取请求的方式
各种if判断,根据请求方式不同,决定去调用不同的do方法
在HttpServlet这个抽象类中,do方法都差不多
小结:
- 继承关系:HttpServlet -> GenericServlet -> ServletServlet中的核心方法:init(), service(), destory()服务方法:当有请求过来时,service方法会自动响应(其实是tomcat容器调用的)
在HttpServlet中我们会去分析请求的方式:到底是get、post、head、还是delete等等
然后再决定调用哪个do开头的方法
那么再HttpServlet中这些do方法默认都是405的实现风格-要我们子类去实现对应的方法,否则就会报405错误
因此,我们新建Servlet时,我们才会考虑请求方法,从而决定重写哪个do方法
Demo01Servlet.java
public class Demo01Servlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
Demo01Servlet com.atguigu.servlets.Demo01Servlet Demo01Servlet /Demo01
Servlet的生命周期
生命周期:从出生到死亡的过程就是生命周期。对应Servlet中的三个方法:init、service 、 destory
默认情况下:
- 第一次接受请求时,这个Servlet会进行实例化,初始化,然后服务从第二次请求开始,每一次都是服务当容器关闭时,其中的所有servlet都会被销毁通过案例发现,tomcat只会创建一个servlet实例,所有的请求都是这个实例去响应。Servlet初始化时机:可以通过设置来设置servlet启动的先后顺序,数字越小,启动越靠前,最小值为0Servlet在容器中是:单例的、线程不安全的
单例:所有请求都是个实例去响应线程不安全:一个线程需要根据这个实例中的某个成员变量值去做逻辑判断。但是在中间某个时机,另一个线程改变了成员变量的值,导致第一个发生了变化我们已经知道了Servlet线程是不安全的,所以尽量不要在servlet中定义成员变量,即使定义了也不修改,不根据成员变量的值进行判断。
//演示Servlet的生命周期
public class Demo02Servlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("正在初始化...");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("正在服务...");
}
@Override
public void destroy() {
System.out.println("正在销毁...");
}
}
Demo02Servlet com.atguigu.servlets.Demo02Servlet Demo02Servlet /demo02
HTTP协议
HTTP:Hyper Text Transfer Protocol超文本传输协议。HTTP最大的作用就是确定了请求和响应数据的格式。浏览器发送给服务器的数据:请求报文;服务器返回给浏览器的数据:响应报文。Http是无状态的Http请求响应包含两个部分:请求和响应
请求:请求包含三部分:1.请求行 2. 请求消息头 3. 请求主体请求行包含三个信息:1.请求的方式;2.请求的URL;3. 请求的协议(一般都是HTTP1.1)请求消息头包含了很多客户端需要告诉服务器的信息,比如:我的浏览器型号,版本,我能接受的内容的类型,发送的内容的类型,内容的长度等等请求体,三种情况
get方式,没有请求体,但是有一个queryStringpost方式,有请求体,form datajson格式,有请求体,request payload 响应:
响应也包含三部分:1. 响应行 2.响应头 3. 响应体相应行: 1.协议 2. 响应状态码 3. 响应状态响应头: 包含了服务器的信息;服务器发送给浏览器的信息(内容的媒体类型、编码、内容长度等)响应体:响应的实际内容(比如请求add.html页面时,响应的内容就是



