您的位置:首页 > 其它

Servlet建立 生命周期 继承结构 Servlet的配置 ServletConfig ServletContext

2013-10-15 00:41 543 查看
<为Servlet配置模版>

1. plugins/com.genuitec.eclipse.wizards.xxx.jar ---- 都是zip格式的

2. 打开Jar包中的Templates文件夹既可以看到Servlet.java源代码,直接修改就可以了

1、Servlet建立

----创建一个JAVA文件,继承自HttpServlet

----覆盖doGet doPast方法

----将JAVAEEjar包设置classpath

---在web.xml中配置java文件位置,并启动服务

2、Servlet生命周期

(1)tomcat启动后,当用户第一次访问Servlet的时候,首先创建一个Servlet对象,创建ServletConfig对象,然后执行Init()方法实例化Servlet

(2)执行service(); 当接收一个HTTP请求,如果Servlet已比实例过的话会直接执行service()方法,Tomcat会将对象HttpServletRequest,HttpServletResponse传进来。

(3)执行dectory()方法; 此方法在服务关闭的时候或应用被移除的时候才会调用

3、Servlet继承结构

|--------Servlet接口 定义了init() service() dectory()方法

|-------abstract GenericServlet implements Servlet

实现了Init()方法 空实现了dectory()方法

init();

init(ServletConfig config); Tomcat启动时会执行此有参的init()将ServletConfig对象传进来,并将ServletConfig设为全局的对象,供别的对象调用

dectory(); 对此对象进行了空实现,子类不一定非要重写,如果没有什么任务,也可以选择不重写

abstract service();此方法为抽象方法,因为不知道子类如何实现,所以定义为抽象的。让子类去执行

|-------HttpServlet

重写了service方法,并对来访的HTTP进行了判断,如果是GET请求而来,那么提供了doGet供子类重写方法,如果是POST方式,那么提供了doPOST供子类重写

4、Servlet的配置

示例:

<servlet>
<servlet-name>XXX</servlet-name>
<servlet-class>com.itheima.XXX</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XXX</servlet-name>
<url-pattern>/servlet/XXX</url-pattern>
</servlet-mapping>

(1)多个Servlet-mapping可以指向一个Servlet,不管哪个路径都可以访问到Servlet

<servlet>
<servlet-name>XXX</servlet-name>
<servlet-class>com.itheima.XXX</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XXX</servlet-name>
<url-pattern>/servlet/XXX</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XXX</servlet-name>
<url-pattern>/servlet/YYY</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XXX</servlet-name>
<url-pattern>/servlet/ZZZ</url-pattern>
</servlet-mapping>

(2)url-pattern中可以使用*匹配符,但是必须是/开头/*结束或*.后缀的方式。匹配规则:哪个最像匹配哪个,*.后缀优先级最低

<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.itheima.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!-- 这里的×前面不能加任何东西 -->
<url-pattern>*.du</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

(3)load-on-startup 加上此标签后,服务器启动后会首先创建Servlet对象 中间的字代码加载的优先级 如果优先级设置一样。那么要看在web.xml中配置的先后顺序创建,此标签在<Servlet>下面

<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.itheima.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

(4)缺省Servlet -- 所有其他Servlet都不处理的请求由他处理 ,其实对静态资源的访问就是由缺省Servlet来进行的

<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>

(5)Servlet的线程安全问题

因为涉及到多个用户同时访问Servlet的情况,而多个用户并发访问的时候如果操作同一数据的话,会造成多线程访问数据安全问题,所以建议在Servlet尽量写局部变量,不要写全局变量。如果需要全局变量,只能为线程加snycrchrozied同步块,但是此方法会使用程序运行在客户端访问是感觉执行很慢,甚至出现超时现象

5.ServletConfig

(1)取得this.getServletConfig().getServletContext()

(2)取得当前Servlet名字 this.getServletConfig().getServletName();

(3)取得当前Servlet的所有参数

Enumeration enumeration = this.getServletConfig()
.getInitParameterNames();

while (enumeration.hasMoreElements()) {
System.out.println(enumeration.nextElement());
}

(3)取得当前Servlet的具体参数

this.getServletConfig().getInitParameter("username");

6.ServletContext -- 带表当前web应用

生命周期:在服务器启动,web应用加载后,服务器立即创建代表当前web应用的ServletContext对象,这个对象和当前web应用是一一对应的。

(1)做为 对象在在整个web应用范围内共享数据

作用范围: 整个web应用范围。

生命周期:随着web应用的加载而创建,随着web应用的销毁而销毁。

setAttribute(String name ,Object value);

getAttribute(String name);

removeAttribute(String name);

(2)获取web应用的初始化信息

web.xml

<context-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
</context-param>

通过ServletContext对象的 .getInitParameter("encode");getInitParameterNames();可以获取出来

(3)实现请求转发 (请求重定向)

(4)获取资源

由于直接写路径是相对于程序的启动目录,在web环境下写的路径就相对于了tomcat/bin目录了,所以是找不到web应用中的资源。

我们可以使用ServletContext.getRealPath()获取路径,传入相对于当前web应用的路径,此方法会在传入的路径前,拼接当前web应用的硬盘路径,从而得到资源的硬盘路径。

在没有ServletContext的环境下,可以使用类加载器机制获取资源,getResource方法,传入一个相对于类加载目录(WEB-INF/classes)的路径,从而在传入的路径前拼接类加载目录的硬盘路径,从而获取到资源的硬盘路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐