Servlet
Servlet:
一、定义: 运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。
二、作用:通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
三、执行过程:
重点:这个斜杠/等价于:http://localhost:8080/工程名/ 到这个位置的Url。
四、生命周期:
实例化-->初始化-->服务->销毁:对应的方法
[email protected]、实例化:第一访问
public ServletDemo1() {
System.out.println("实列化");
}
[email protected]、初始化:客户端第一次访问时调用,该方法。只会执行一次。
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("-----------------初始化方法---------------");
config = arg0;
}
[email protected]、客户端每一次访问都会执行一起该方法。
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("------------服务:-------------"+"这个Servlet的名字:"+config.getServletName()+"获得配置信息"+config.getInitParameter("encoding"));
}
[email protected]、在服务器中卸载工程。或者正常的关闭服务器。刚方法就运行。
@Override
public void destroy() {
System.out.println("-----------销毁方法-----------");
}
注意:创建时间以及初始化方法。可以改变。需要在xml中配置:
改变:配置后随着服务器的启动而实例化和初始化。
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>com.ServletDemo.ServletDemo1</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
<!-- 这个Servlet随着服务器的启动而实例化,初始化。2表示创建的优先级,自然数就行 -->
</servlet> 五、三种实例化方式
1、实现javax.servlet.Servlet接口(第一个案例就是。)
2、继承javax.servet.GenericServlet类(适配器模式)
适配器设计模式:(当我们想要使用,某个接口中的特定的方法,而该接口中有很多的方法,我们就设计一个间类来实现这个接口,而我们只需要继承这个类就行。这样我们就不需要去实现所有的方法。就能调用我们真正想要实现的方法。通常这个中间类叫做转换器,转接头。)
抽象类GenericServlet实现了Servlet, ServletConfig,这两个接口。
重要方法:
getInitParameter("");
getServletContext()
getServletConfig()
只有一个抽象方法service()。
并没有重写service()方法,而是接着抽象。
和抽象方法: public abstract void service(ServletRequest req,ServletResponse res)
3、继承javax.servlet.http.HttpServlet类(模板方法设计模式) 重点:这是我们开发中常用的。
httpServlet是一个抽象类继承了GenericServlet,一个没有抽象方法的抽象类。
重要方法:
doGet();
doPost();
两个Service()方法:
public void service(ServletRequest req, ServletResponse res)
public void service(HttpServlet request,HttpResponse response)
服务器访问,到Servlet的响应过程:
服务器扫描Xml找到HttpServlet的实现类,创建实例:
javax .servlet.Servlet servlet = new HttpServlet();
实例化,初始化等待被客户端访问。
客户端访问:
1、 调用ServIce()方法:这个service是从父类继承下来的方法{
由多肽的知识就知道,这儿调用的只能是
从父类继承下来的service。
}
2、执行自己的Service方法。
3、根据请求的方式,调用相应的方法:我们常用的DoGet(),DoPost()。
注意:这儿通过Service我们已经得到最重要的两个对 象: HttpRequest,HttpResponse。
六、映射问题
1.一个Servlet可以在Xml中配置多个,ServletMapping。
2.两种固定格式:
通配符*,例如*.do
(/)正斜杠:
3、优先级问题:
绝对匹配--> /开头匹配 --> 扩展名方式匹配
七、线程安全问题
避免使用全局变量。