我们现在来创建一个简单的Servlet:FirstServlet类,功能只是输出“Hello!大家好!”。代码如例3.1。
/*
* FirstServlet.java
*
* 功能:通过Servlet输出页面
*/
package com.jy.sample.servlet;
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;
/**
* HelloWorld Servlet.
* @author JY
*/
public class FirstServlet extends HttpServlet {
/** serialVersionUID. */
private static final long serialVersionUID = 2372510451801586160L;
/**
* 处理Get请求.
* @param req Request
* @param resp Response
* @throws ServletException Servlet异常
* @throws IOException IO异常
*/
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
// 设定内容类型为HTML网页UTF-8编码
resp.setContentType("text/html;charset=UTF-8");
// 输出页面
PrintWriter out = resp.getWriter();
out.println("<html><head>");
out.println("<title>First Servlet Hello</title>");
out.println("</head><body>");
out.println("Hello!大家好!");
out.println("</body></html>");
out.close();
}
}
|
例3.1
下面我们来看看这段代码,一开始我们必须导入javax.servlet.*和javax.servlet.http.*。其中,javax.servlet.* 存放与HTTP协议无关的一般性Servlet类;javax.servlet.http.* 增加了与HTTP协议有关的功能。
所有Servlet都必须实现javax.servlet.Servlet接口,但是通常我们都会从javax.servlet.GenericServlet或javax.servlet.http.HttpServlet择一来实现。如果写的Servlet代码和HTTP协议无关,那么必须继承GenericServlet类;若有关,就必须继承HttpServlet类。我们的例子中继承的是HttpServlet类。
javax.servlet.* 里面的ServletRequest和ServletResponse接口提供存取一般的请求和响应;而javax.servlet.http.* 里面的HttpServletRequest和HttpServletResponse接口,则提供HTTP请求及响应的存取服务。通过代码了解到,我们代码中用到的是HttpServletRequest和HttpServletResponse。
我们的代码中,利用HttpServletResponse接口的setContentType()方法来设定内容类型,我们要显示为HTML网页类型,因此,内容类型设为“text/html”,这是HTML网页的标准MIME类型值。之后,用getWriter()方法返回PrintWriter类型的out对象,它与PrintStream类似,但是它能够对Java的Unicode字符进行编码转换。最后,利用out对象把“Hello!大家好!”的字符串显示在网页上。
代码写好后,我们来设定web.xml文件,web.xml文件在我们Web项目的WEB-INF文件夹内。如图3.4。
图3.4
我们来详细看一看web.xml中这段关于Servlet的配置。配置一个Servlet需要配置两个标签,第一个<servlet>,一个是<servlet-mapping>。
对于<servlet>,在其中可以配置Servlet的名字,所要调用的Java类,还有Servlet初始化时传入的参数。在这里,我们的Servlet名字是“FirstServlet”,调用的java类是“com.jy.sample.servlet.FirstServlet”,就是我们写的Servlet的package加上类名。我们写了一个最简单的Servlet,我们不需要传递初始化参数给Servlet,所以没有配置初始化参数,关于配置初始化参数,我们会在后边的例子里讲解。
对于<servlet-mapping>,我们首先指定了Servlet的名字,然后设置url连接,在这里,我们设置的是“/FirstServlet”。这里的Servlet名字必须和上面的<servlet>标签中的<servlet-name>的值一致。
当我们的页面中设定的连接和<url-pattern>中设定的值一致时,则会通过<servlet-name>找到对应Servlet类来运行。这里,当页面的连接(a标签或form设定的action)是“/FirstServlet”时,则会通过Servlet的名字“FirstServlet”来找到对应的Servlet类“com.jy.sample.servlet.FirstServlet”来运行。
最后,我们看看FirstServlet的执行结果,如图3.5所示。
图3.5