今天学了
编写 Servlet
根据要完成的功能来编写 Servlet。功能确定之后,根据 Servlet 的框架来编写 Servlet。
这里主要关注编写 Servlet 的一般过程。
因为 Servlet 是 Java 类,所以它与一般的 Java 类的编写基本相同。具体步骤如下:
(1) 创建一个包。假设包名是 servlets,创建包的代码如下:
package servlets;
(2) 导入用到的包。需要导入的包有 javax.servlet.*和 javax.servlet.http.*,通常还需要导
入的包是 java.io.*。代码如下:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
(3) 定义类的基本框架并继承 HttpServlet。每个 Servlet 都必须实现接口 Servlet,而这
里要编写的 Servlet 主要是用于 HTTP 协议的,可以继承实现了 Servlet 接口的 HttpServlet。
代码如下:
public class HelloServlet extends HttpServlet
{
}
等。如果需要对 Servlet 进行初始化,则需要实现 init 方法。如果需要在卸载 Servlet 的时候
执行一些功能,则需实现 destory 方法。一般情况下,根据需要完成的功能只需要实现服务
类方法即可。这里只实现 doGet 方法。服务类方法有两个参数:第一个参数是
HttpServletRequest 的对象,该参数包含了用户的所有请求信息,要想获取用户的请求信息,
必须使用该对象提供的方法;第二个参数是 HttpServletResponse 的对象,可以通过这个对
象对用户进行响应,如果希望对用户进行响应或者设置响应相关的信息,需要使用该对象
的方法。
该实例完成的功能是向用户输出一行文字,所以不需要获取用户的请求信息,只需要
对用户进行响应即可。在对用户进行响应的时候,需要设定文档类型以及编码方式等,就
像在 JSP 中每个文件都要设置 page 标签的 contentType 属性一样。之后要向用户输出一些内
容,需要先获取输出流。响应页面的属性设置和输出流的获取都是与响应相关的,需要使
用第二个参数来完成。
代码如下:
public void doGet(HttpServletRequest request,HttpServletResponse)
throws IOException,ServletException
{
response.setContentType("text
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Hello World!</title></head>");
out.println("<body>");
out.println("<p>Hello World!</p>");
out.println("</body><
}
从代码可以看出,如果使用 Servlet 完成对用户的响应,所有的响应内容,包括格式信
息等都要通过输出语句进行输出。要是使用 JSP 完成这个功能,就非常简单了。正因为这
个原因,才推出了 JSP 技术,JSP 技术的主要优势就在于与用户进行交互比较方便。所以,
如果要完成的功能是与用户进行交互,则应该使用 JSP 完成。在本书的后续内容中,使用
Servlet 技术主要完成控制功能。
为了使这个 Servlet 能够响应 post 请求,需要实现 doPost 方法,这时只需要调用 doGet
方法即可。代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}
需要把这两个方法添加到前面定义的类 HelloServlet 中。
Servlet 开发所需要的包有 javax.servlet.*和 javax.servlet.http.*。这些包不是 Java 标准版
的类库,如果没有安装 Java EE 开发环境,则需要配置环境变量。这些包位于 tomcat 安装
目录下的 lib 下的 servlet-api.jar 压缩包中,需要把这个压缩包添加到环境变量中。
假设 servlet-api.jar 所在的位置为 C:\Program Files\Apache Software Foundation\Tomcat
6.0\lib,需要在环境变量 classpath中添加 C:\Program Files\Apache Software Foundation\Tomcat
6.0\lib\servlet-api.jar。
注意:不要删除 classpath 中原来的信息,如果不存在 classpath 环境变量,可以创建一
个 classpath。
环境变量设置好之后,使用 JDK 中的 javac 命令编译:
javac HelloServlet.java
3. 配置 Servlet
Servlet 编写完之后,作为 Web 应用的组成部分,需要在配置文件 web.xml 中进行配
置。Servlet 的配置包括两部分,第一部分是 Servlet 的声明,第二部分是 Servlet 访问方
式的设置。
首先是 Servlet 的声明,使用<servlet>元素:
<servlet>
<servlet-name>hello<
<servlet-class>servlets.HelloServlet<
<
<servlet-name>用于声明 Servlet 的名字,这里,hello 是 Servlet 的名字;<servlet-class>
用于声明 Servlet 所对应的类,这里,servlets.HelloServlet 是这个 Servlet 所对应的类名。
注意:包名不能缺少。
然后是 Servlet 映射,主要配置访问该 Servlet 的方式,使用<servlet-mapping>元素:
<servlet-mapping>
<servlet-name>hello<
<url-pattern>/hello</url-pattern>
<
<servlet-name>表示 Servlet的名字,需要和上面的 Servlet声明保持一致;<url-pattern>
表示访问时候的格式,例如要访问上面这个 Servlet 需要使用 hello 作为名字访问。
servlet-name 和 url-pattern 可以不相同。服务器接收到请求之后会根据这个 url-pattern 查
找相应的 Servlet。
4. 部署 Servlet
Servlet 编写完成之后,需要部署到服务器才能访问,编译好的文件需要放在 Web 应用
的 WEB-INF\classes 下面。
5. 访问 Servlet
对 Servlet 的访问与对 JSP 的访问基本相同,可以通过以下三种方式进行:
(1) 通过在浏览器中直接输入地址访问:
http://127.0.0.1:8080/test/hello
(2) 通过超链接的形式访问:
<a href ="http://127.0.0.1:8080/test/hello">第一个 Servlet</a>
(3) 通过表单提交的方式访问:
<form method=get action="http://127.0.0.1:8080/test/hello">