1.创建一个类,继承GenericServlrt
import java.io.*;
import javax.servlet.*;
public class FirstServlet extends GenericServlet{
public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{
res.getWriter().write("this is firstServlet");
}
}
2.编译为class文件,编译之前设置临时环境变量(当前环境变量中没有servlet所需包,所以会编译报错)
设置方式:set classpath=%classpath%;D:\software\apache-tomcat-7.0.62\lib\servlet-api.jar
3.将class文件放入任意web应用的classes目录
4.在web.xml文件中添加servlet映射(可以从conf/web.xml中102行和366行复制)
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/FirstServlet</url-pattern>
</servlet-mapping>
实现细节:
1.细节一
servlet的配置分为两个标签,注册servlet标签<servlet>和映射servlet标签<servlet- mapping>.sevlet中可以 存放servlet-name和servlet-class标签,servlet-mapping中可以存放servlet-name和url-pattern标签。 为什么servlet在配置的时候需要写成两组标签?
答:在多个虚拟路径映射到同一个真实路径身上的时候,只需要重写servlet-mapping标签即可
2.细节二
url-pattern中映射的通配方式:
1.以"/"开头,以"/*"结尾的通配方式
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
2.以"*.后缀"的通配方式 常用*.do这种形式
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
对于如下的一些映射关系:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do (永远匹配级最低)
当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应: Servlet引擎将调用Servlet1。当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应:Servlet引擎将调用Servlet3。
当请求URL为“/a/a.do”时,“/a/*”和“*.do”都匹配,哪个servlet响应:Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应:Servlet引擎将调用Servlet2。
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应:Servlet引擎将调用Servlet2。
url-pattern中的通配路径与请求url匹配程度越高,越优先采用。
*.do匹配级别永远最低