Servlet
概述
1. 概念:运行在服务器端的小程序
2. public interface Servlet :是一个接口
3. 自定义一个类, 实现servlet,重写这个这些方法
快速入门
1. 创建javaee项目
2. 定义一个类来实现servlet接口,重写方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello World");
}
3. 配置servlet
`<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>com.liangxin.web.servletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
</web-app>`
分析:servlet的执行流程
1. 在服务器中输入url地址:浏览器解析url通过端口号找到Tomcat服务器中的项目
2. 找到web.xml文件中的servlet配置文件, 先找到servletmapping 中的url-pattern 中的servlet-name,
3. 得到对应servlet的全限定类名, 通过反射技术, 服务器自动创建servlet实现类的对象, 执行service方法
Servlet的生命周期
1. init() servlet只会创建一次
2. service(), 访问一次,就会执行一次
3. destroy(), 当服务器关闭的时候就会执行,只会执行一次
详解servlet的生命周期
1. init() servlet只会创建一次-- 在内存中只存在一个对象,单例模式 (尽量不要在servlet中定义成员变量)
1.默认情况下,第一次访问的时候就会创建 ,默认是负数
2.指定servlet的创建时机在服务器启动的时候创建
3.<load-on-startup>5</load-on-startup>
<!--为负数的的时候 在第一次访问的时候被创建, 默认是负数, 为正数的时候,在服务器启动的时候创建-->
2. service(), 访问一次,就会执行一次 提供服务的
每次访问的时候,service都会执行
3. destroy(), 当服务器关闭的时候就会执行,只会执行一次
1. 只有在服务器正常关闭的时候才会执行,
2. destroy()方法在Servlet被销毁之前执行,一般用于释放资源
3. 服务器关闭的时候,servlet被销毁
servelt注解配置
1. 支持注解配置,不需要xml文件配置
2. 使用servlet3.0以上, 不创建web.xml文件
3. @WebServlet注解的使用;、
4. javaee6开始支持3.0
5. @WebServlet("资源路径")
6.
`@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";
String[] value() default {};
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";`
Idea和Tomcat相关配置
1. idea会单独建立一份配置文件C:\Users\Lbaci\.IntelliJIdea2017.3\system\tomcat
2. idea中工作空间和web项目的位置是不一样的
3. tomcat真正访问的是tomcat 部署额web项目, tomcat部署的web项目对应的着工作空间的web项目下的所有的资源
4.WEB-INF文件下的资源是不能直接访问的
5.debug的方式变了点击小虫子图标启动
Servlet体系结构
1. Servelt接口 --实现了 --- (抽象类) GenericServlet--extends-- (抽象类)HttpServlet
2. GenericServlet抽象了service方法,其他的方法进行了空实现
3. HttpServlet(对Http协议进行封装)(不用再判断是get还是post) 提供了方法DoGet()和DoPost()
Serlet-urlpartten
1.使用注解定义url-partten 是一个数组,我们可以定义多个urlpartten
2.servlet路径的定义规则
1. /xxx @WebServlet("/demo")
2. /xxx/xxx多层路径@WebServlet("/demo/demo3")
3. /* @WebServlet("/*") 优先级很低
4. @WebServlet("*.do")前面不能加/
Http
1. 超文本传输协议:Http http1.1(复用连接)
2. 传输协议: 数据传输的协议:定义了客户端和服务器端数据传输的格式;
3. 基于请求响应模型
# 请求数据格式 #
1. 请求行 请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1
get 和post的区别
1. get 参数在url中拼接(请求行),post 参数在请求体中
2. get url的长度有限制,post url没有限制
2. 请求头 host: localhost 键值对的形式(浏览器告诉服务器一些信息)
1. 常见的请求头
1. host 主机名
2. User-Agent 浏览器的版本信息(浏览器告诉服务器浏览器的版本信息)
3. Accept: 可以解析什么格式
4. Language:支持的语言
5. Referer:告诉服务器(当前请求) 我从哪里来,作用:防盗链 统计工作
6. Connection: keep-alive 连接可以复用
3. 请求空行
就是用户分割post请求的请求头和请求体的
4. 请求体(正文)(get没有请求体)(post传递参数)
1. 封装post请求的参数的