首页 > 代码库 > JavaWeb03_Servlet
JavaWeb03_Servlet
JavaWeb03_Servlet
Servlet规范的组成:
1.web应用程序
2.Servlet与HttpServlet
3.过滤器(servlet2.3版本后引入过滤器,所有http请求都可以经过过滤器)
4.安全
5.国际化
两个接口:
ServletConfig接口:定义如何操作Servlet配置
Servlet接口:定义操作Servlet生命周期或配置
Generic Servlet:实现了上面两个接口,就是一个Servlet。可以和容器进行通讯,但是天生不支持http,因而不能直接交互
HttpServlet:继承了Generic Servlet,仍然是一个Servlet。专业处理http协议
小结:
Servlet API 是一套专门用于开发Servlet的Java类和接口,Web容器和Servlet通过API进行通信,一个Servlet程序就是运行在web服务器上的Java类,但是这个特殊的Java类必须实现ServletConfig和Servlet接口,Servlet接口定义了Servlet程序和web容器的通信协议
Javax.servlet.Generic Servlet类:实现了Servlet的基本功能和特征,是一个普通的Servlet
javax.servlet.HttpServlet类:是Generic Servlet的子类,提供了一些特定的方法,想要实现一个Servlet只需要继承Generic Servlet或者HttpServlet即可
Servlet生命周期
1.通过读取配置文件,找到Servlet-class,取出路径通过反射机制,产生一个servlet实例,默认情况下,容器启动时不会加载servlet,第一次访问的时候才会创建servlet实例,对于init()初始化方法,只有第一次执行,以后都不会再执行,直接进入Service()方法
2.加载servlet实例后,调用init()初始化方法进行初始化
3.所有请求,容器都默认调用Service()方法进行处理,每次请求都会执行一次Service()方法
4.生命周期销毁阶段,代表servlet被容器丢弃,调用destroy()方法来完成一些后续处理工作
Servlet和Http的关系
首先:
web上的内容是http进行传输的,servlet只是一段普通的java代码,对http一无所知,为了解决这个问题,设计一个类专门用于和http之间进行通信,这个类就是javax.servlet.HttpServlet
其次:
用户请求过来,容器会自动将请求交给service()方法:如果重写了service()方法就用该重写后的service()方法处理请求,如果只重写了doGet或doPost方法则他俩来处理,doGet和doPost是service()的代理(注意,如果重写了service、doGet和doPost三个方法,则仍然由service来处理)
ServletConfig对象
ServletConfig对象是容器里面的servlet根据业务进行创建的,每个servlet都有一个自己的ServletConfig对象
当前这个对象容器产生,将配置的信息封装到这个对象里,当容器调用init()方法时,将这个对象作为参数传递给init()方法
<init-param>标签:配置初始化信息
示例:
public void init(ServletConfig config) throws ServletException {
System.out.println(config.getServletName());
ServletContext context = config.getServletContext();
String charset = context.getInitParameter("charset");
System.out.println(charset);
String mysqlUrl = config.getInitParameter("mysqlchar");
System.out.println(mysqlUrl);
Enumeration<String> en = config.getInitParameterNames();
while(en.hasMoreElements()){
String res = config.getInitParameter(en.nextElement());
System.out.println(res);
}
}
<load-on-startup>标签:控制servlet产生的时间
正数:容器启动时加载servlet实例;
负数:容器启动时不加载Servlet,第一次访问时才加载;
对于正数来说,值越小,优先级越高
xml中访问路径的匹配
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
/testservlet路径自己取,一般为了防止重名,会采用类名作为路径名称
<url-pattern>/testservlet</url-pattern> 精确匹配
<url-pattern>*.do</url-pattern> 扩展名匹配(前面没有"/")
<url-pattern>/*</url-pattern> 路径匹配:匹配所有的请求
<url-pattern>/</url-pattern> 默认servlet 也是匹配所有请求
规则:谁更精确就匹配谁:精确匹配>路径匹配>扩展名匹配>默认servlet
</servlet-mapping> -->
JavaWeb03_Servlet