1、生命周期
1.1、初始化
Servlet初始化交由应用服务器管理,在管理中(<load-on-startup>0</load-on-startup>)负责Servlet来控制单例模式。
默认值为-1,代表懒汉模式。大于-1代表饿汉模式。
当值大于-1时,直接影响到初始化顺序,数字越小优先级越高
@Override
public void init(ServletConfig config) throws ServletException{
System.out.print("我是初始化方法");
}
1.2、运行
接收请求,返回响应
//HttpServletRequest 请求
//HttpServletResponse 响应
@Override
public void service(HttpServletRequest resquest,HttpServletResponse response) throws SercletException,IOException{
System.out.print("我是运行方法");
}
1.3、销毁
destroy():关闭服务器时调用,且只调用一次
@Override
public void destroy(){
System.out.print("我是销毁方法");
}
2、实现方式
2.1、基于配置
web.xml中
<servlet>
<!--名称-->
<servlet-name>Life</servlet-name>
<!--指向的类路径-->
<servlet-class>Servlet.LifeServlet</servlet-class>
<!--初始化参数-->
<init-param>
<!--参数名-->
<param-name>username</param-name>
<!--参数值-->
<param-value>Zhanghr</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
<!--单例实现模式-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<!--名称对应的映射-->
<servlet-name>Life</servlet-name>
<!--访问路径-->
<url-pattern>/life.do</url-pattern>
</servlet-mapping>
注:在url-pattern中一定要写“/”,否则路径失效。
2.2、基于注解
@WebServlet(
name="LifeServlet",
urlPatterns="/life.do",
loadOnStartup=0,
initParams={
@WebInitParam(name="username",value="zhanghr"),
@WebInitParam(name="password",value="123456")
}
)
public class LifeServlet extends HttpServlet{
}
3、HTTP协议
HTTP(超文本传输协议)是无连接无状态的,客户端发送一次请求,服务器返回一次响应,返回响应后服务器立即关闭连接通道。
服务器端不会存储任何客户端相关的信息。每次客户端请求都被服务器认为是全新的。
4、Request请求
4.1、请求行[固定项]
HTTP协议:http 1.1—http:// http2.0—https://
请求方法:get || post
请求地址:URL+URI
由固定项组成,可以通过request的get方法获取地址栏中的信息。
4.2、请求头
由浏览器采集非用户隐私信息传送到服务端
通过request的getHeader(键)获取对应值。
4.3、数据体
客户端表单中的数据。
4.4常用方法
//获取客户端
String userAgent = request.getHeader("User-Agent");
System.out.println("userAgent:"+userAgent);
//获取项目路径
String contextPath = request.getContextPath();
System.out.println("项目路径"+contextPath);//
//获取uri
String uri = request.getRequestURI();
System.out.println("uri:"+uri);
//获取url(ip://port/project/index)
StringBuffer url = request.getRequestURL();
System.out.println("url:"+url);
//请求方式(get/post)
String method = request.getMethod();
System.out.println("method:"+method);
//获取协议信息(1.1/2.0)
String protocol = request.getProtocol();
System.out.println( "protocol:"+protocol );
//获取方式(http/https)
String scheme =request.getScheme();
System.out.println("Scheme:"+scheme);
5、Response响应
5.1、状态行(响应行)
http协议:http1.1—http:// http2.0—https://
状态码:http://cat
1xx:信息响应类,表示接收到请求并继续处理(服务器端continue)
2xx:处理成功响应类,表示动作被成功接收理解和接收
3xx:重定向响应类,为了完成指定动作,必须接受进一步处理(服务器+客户端)
4xx:客户端错误,客户请求包含语法错误或是不能正确执行
5xx:服务端错误,服务器不能正常执行一个正确的请求
消息值:每个状态码都有对应的消息值
404 Not Found 405 Method Not Allowed
5.2、响应头
服务器传递信息到客户端,常用方法有两种
Response.addHeader("key1","value1"),确定不存在用添加
Response.addHeader("key2","value2"),存在覆盖,不存在添加
5.3、响应内容
设置响应类型:response.setContentType("text/html;charset=UTF-8");
reaponse响应类型分两种:
1、响应文本
response.getWriter();
2、响应流
response.getOutputStream();
//如果未设置了浏览器处理文件方式,能识别就打开,不能识别就下载。
response.addHeader("Content-Disposition","attachment;filename=\文件名\");