制作一个Serlvet的完整过程分为四步:一是编写servlet,二是编译servlet并部署到指定位置,三是配置servlet,四是访问servlet。下面重点介绍Serlvet的创建和配置。
1.Servlet创建
(1)继承HttpServlet类
public class FirstServlet extends HttpServlet { }
(2)根据需要重写doGet、doPost或者service方法
(3)如果有Http请求信息,获取该信息
request.getParameter(arg0) //获取请求中指定参数的值
request.getParameterNames() //获取请求所有参数的名字
request.getParameterValues(arg0) //获取请求所有参数的值
(4)生成Http响应
PrintWriter out = response.getWriter();
out.print("<h1>Hello, world!</h1>");
若要设置显示中文,还需要加入如下语句:
response.setContentType("text/html;charset=UTF-8");
案例5-1 手动创建FirstServelt类。
FirstServlet.java:
package ch5;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
//加载Servlet
public FirstServlet() {
super();
}
//初始化Servlet
public void init() throws ServletException {
}
//初始化Servlet
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//如果有Http请求信息,获取该信息
request.getParameter("传入的参数");
//生成Http响应
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request,response);
}
}
2.Servlet配置
Servlet如果要正常被访问,还需要对它进行配置,Servlet的配置一般是添加到“web.xml”文件中(见案例5-2)。MyEclipse会对Servlet进行自动配置,我们只要在对话框中输入配置参数即可(见下图)。MyEclipse中Servlet类默认的映射路径是“/servlet/XXServlet”。这里我们不修改,直接点击“Finish”,它会自动生成配置到“web.xml”文件。
【案例5-2】配置Servlet
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>ch5.FirstServlet</servlet-class> </servlet> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>ch5.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/servlet/FirstServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/servlet/MyServlet</url-pattern> </servlet-mapping> </web-app> |

Servlet3.0规范允许开发人员采用注解的方式来配置 Servlet、Filter、Listener。它的javax.servlet.annotation 包下提供了注解。
@WebServlet:用于修饰一个 Servlet 类,用于部署 Servlet 类。这种注解写在“.java”文件的Servlet类上面。
使用注解方式配置Servlet
@WebServlet注解用于标注在一个继承了HttpServlet类之上,属于类级别的注解。
@WebServlet注解属性:

1. loadOnStartup属性:标记容器是否在启动应用时就加载Servlet,默认不配置或数值为负数时表示客户端第一次请求Servlet时再加载;0或正数表示启动应用就加载,正数情况下,数值越小,加载该Servlet的优先级越高;
2. name属性:可以指定也可以不指定,通过getServletName()可以获取到,若不指定,则为Servlet的完整类名
3. urlPatterns/value属性: String[]类型,可以配置多个映射,如:urlPatterns={"/user/test", “/user/example”}
4. urlPatterns的常用规则:
/*或者/:拦截所有
*.do:拦截指定后缀
/user/test:拦截路径
/user/*.do、/*.do、test*.do都是非法的,启动时候会报错

@WebServlet(description = "This is my first Servlet", urlPatterns = { "/servlet/MyServlet" }) public class MyServlet extends HttpServlet { //……此处省略其他代码 } |
Serlvet的创建、编译和配置完成之后,最后一步就是访问servlet。打开浏览器,在地址栏输入:http://localhost:8080/项目名称/servlet的URL映射地址。本案例中,我们输入:
http://localhost:8080/Z2_22/servlet/MyServlet


