码迷,mamicode.com
首页 > 编程语言 > 详细

Java Web -- Servlet(4) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(1)

时间:2016-04-12 17:24:21      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

一、实现Servlet接口

通过实现Servlet接口来了解Servlet的生命周期

(1)以规范的形式创建一个web应用(即在webapps目录下创建一个web应用)

创建web应用

 技术分享

(2)classes目录下创建一个.java(该java文件为实现Servlet接口)

创建文件夹MyFirstServlet.java

代码如下:

package com.focus;

 

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

 

public class MyFirstServlet implements Servlet

{

//Servlet引擎会在Servlet实例化之后,置入服务之前精确地调用init方法。(初始化servlet,把servlet装载到内存中)

//该函数只会被调用一次

public void init(ServletConfig config) throws ServletException{

}

//Servlet引擎调用这个方法以允许Servlet响应请求。这个方法在Servlet未成功初始化之前无法调用。(业务逻辑代码都将写在这个函数中)

//在被卸载后,还没初始化时,service不被调用,其余可重复调用

public void service(ServletRequest request, ServletResponse response)

             throws ServletException, IOException{

             System.out.println("Hello World!");

             response.getWriter().println("Hello World!"+new java.util.Date());

      }

//卸载servlet

    public void destroy(){

    

     }

//得到servlet的配置信息

    public ServletConfig getServletConfig(){

     return null;

     }

//纯文本的servlet信息

   public String getServletInfo(){

        return null;

      }

 

}

编译后出现错误,导入的程序包找不到。

 技术分享

PS:使用dos编译时,该Java有包是 需要输入的命令行格式为

Javac -d . name.java

(3)配置CLASSPATH  即指定到tomcatlib目录下的servlet-api.jar(其中有servlet-api.jar就是上面所引入的javax.servlet.*; javax.servlet.http.*;)。

在配置CLASSPATH时得指定到特定.jar

不能设置*.jar ,只能一个个写,所以一般大的工程会配置一个启动脚本,专门计算出所有的jar包,然后导入启动环境中...

 技术分享

重启cmd.exe,再重新编译。即可

(4)配置与部署Servlet

<servlet>

   <servlet-name>MyFirstServlet</servlet-name>

   <display-name>MyFirstServlet</display-name>

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

  </servlet>

  <servlet-mapping>

   <servlet-name>MyFirstServlet</servlet-name>

   <url-pattern>/My</url-pattern>

  </servlet-mapping>

 

(5)最后效果:

 技术分享


技术分享

 技术分享

 

 

补充:当Tomcat启动的时候首先会启动一个server.xml,servlet映射找不到对应的,tomcat启动直接就报错。

 

二、配置与部署Servlet

由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上。

<servlet>

//<servlet-name>注册名、自定义一个servlet的名字

   <servlet-name>MyFirstServlet</servlet-name>

   <display-name>MyFirstServlet</display-name>

//</servlet-class>指定该servlet类放在哪个包中 形式 包//.../类(包名+类名)

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

  </servlet>

//<servlet-mapping>servlet的映射(对一个已经注册)

  <servlet-mapping>

//<servlet-name>自定义一个servlet的名字,但这个名字就代表当浏览器输入/My这个web资源的时候,该名字就映射到与之对应的名字,找到该servlet所在的class

   <servlet-name>MyFirstServlet</servlet-name>

//<url-pattern>浏览器所输入的Web资源名

   <url-pattern>/My</url-pattern>

  </servlet-mapping>

 

一个注册好了的servlet可以被多次映射

如:<servlet>

   <servlet-name>1</servlet-name>

   <display-name>1</display-name>

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

  </servlet>

  <servlet-mapping>

   <servlet-name>1</servlet-name>

   <url-pattern>/My</url-pattern>

  </servlet-mapping>

     <servlet-mapping>

   <servlet-name>1</servlet-name>

   <url-pattern>/Servlet/My</url-pattern>

  </servlet-mapping>

<servlet-name>1</servlet-name>

   <url-pattern>/Servlet/My.html</url-pattern>

  </servlet-mapping>

 

即输入的Web资源不管是/My /Servlet/My/Servlet/My.html都可以访问到com.focus.MyFirstServlet这个类

当映射一个servlet时候,可以是多层,后缀名为html不一定就是html文件。

 

进行Servlet映射时,可使用通配符

有两种格式:

第一种格式 *.扩展名 如:*.html  *.abc

第二种格式 以“/“开头 同时以”/*“结尾 如:/abc/* /*

 

例:1. <url-pattern>/*</url-pattern>

2. <url-pattern>/abc</url-pattern>

3. <url-pattern>/abc/*</url-pattern>

4. <url-pattern>*.gogo</url-pattern>

当浏览器的URLservlet名 输入/abc 匹配 2

当浏览器的URLservlet名 输入/hellobaby 匹配 1

当浏览器的URLservlet名 输入/abc/hellobaby 匹配 3

当浏览器的URLservlet名 输入/hello.gogo 匹配 1

 

匹配标准:

1)匹配度高的选择映射那个

2*.扩展名 的优先级最低

 

load-on-startup元素标记

<servlet>

   <servlet-name>1</servlet-name>

   <display-name>1</display-name>

   <servlet-class>com.focus.MyFirstServlet</servlet-class>

<load-on-startup>1</load-on-startup>

  </servlet>

 

1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)

2)它的值必须是一个整数,表示servlet应该被载入的顺序

2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet

3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

5)当值相同时,容器就会自己选择顺序来加载。

所以,<load-on-startup>x</load-on-startup>,中x的取值12345代表的是优先级,而非启动延迟时间。

 

 

 

 

补充:怎样更好的管理tomcat中的web应用,即进入tomcat Manager

 技术分享

Reload:即重载的意思,重新装载该web应用。

Stop:停止该web应用

好处:单独对某个web应用做相应的处理,不用对整个服务器进行操作

Java Web -- Servlet(4) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(1)

标签:

原文地址:http://blog.csdn.net/foces_18/article/details/51133460

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!