这一期来运行我们第一个servlet,首先应该了解servlet的生命周期。
1.初始化阶段 调用init()方法
2.响应客户请求阶段 调用service()方法,可以简单地理解为get和post方法
3.终止阶段 调用destroy()方法
下面新建一个类,如图所示:
package com.test.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; public class HelloServlet extends HttpServlet { @Override public void init() throws ServletException { // TODO Auto-generated method stub System.out.println("servlet init"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub process(req,resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub process(req,resp); } protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = resp.getWriter(); out.println("hello servlet"); } }
HttpServlet类
public class HttpServlet extends GenericServlet implements Serializable
这是一个抽象类,用来简化HTTP Servlet写作的过程。它是GenericServlet类的扩充,提供了一个处理HTTP协议的框架。
在这个类中的service方法支持例如GET、POST这样的标准的HTTP方法。这一支持过程是通过分配他们到适当的方法(例如doGet、doPost)来实现的。
方法
1、doDelete
protected void doDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException,
IOException;
被这个类的service方法调用,用来处理一个HTTP DELETE操作。这个操作允许客户端请求从服务器上删除URL。这一操作可能有负面影响,对此用户就负起责任。
这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。当你要处理DELETE请求时,你必须重载这一方法。
2、doGet
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,
IOException;
被这个类的service方法调用,用来处理一个HTTP GET操作。这个操作允许客户端简单地从一个HTTP服务器“获得”资源。对这个方法的重载将自动地支持HEAD方法。
GET操作应该是安全而且没有负面影响的。这个操作也应该可以安全地重复。
这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。
3、doHead
protected void doHead(HttpServletRequest request,HttpServletResponse response) throws ServletException,
IOException;
被这个类的service方法调用,用来处理一个HTTP HEAD操作。默认的情况是,这个操作会按照一个无条件的GET方法来执行,该操作不向客户端返回任何数据,而仅仅是返回包含内容长度的头信息。
与GET操作一样,这个操作应该是安全而且没有负面影响的。这个操作也应该可以安全地重复。
这个方法的默认执行结果是自动处理HTTP HEAD操作,这个方法不需要被一个子类执行。
4、doOptions
protected void doOptions(HttpServletRequest request,HttpServletResponse response) throws ServletException,
IOException;
被这个类的service方法调用,用来处理一个HTTP OPTION操作。这个操作自动地决定支持哪一种HTTP方法。例如,一个Servlet写了一个HttpServlet的子类并重载了doGet方法,doOption会返回下面的头:Allow: GET,HEAD,TRACE,OPTIONS
你一般不需要重载这个方法。
5、doPost
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,
IOException;
被这个类的service方法调用,用来处理一个HTTP POST操作。这个操作包含请求体的数据,Servlet应该按照他行事。
这个操作可能有负面影响。例如更新存储的数据或在线购物。这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。当你要处理POST操作时,你必须在HttpServlet的子类中重载这一方法。
6、doPut
protected void doPut(HttpServletRequest request,HttpServletResponse response) throws ServletException,
IOException;
被这个类的service方法调用,用来处理一个HTTP PUT操作。这个操作类似于通过FTP发送文件。
这个操作可能有负面影响。例如更新存储的数据或在线购物。这一方法的默认执行结果是返回一个HTTP BAD_REQUEST错误。当你要处理PUT操作时,你必须在HttpServlet的子类中重载这一方法。
7、doTrace
protected void doTrace(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException;
被这个类的service方法调用,用来处理一个HTTP TRACE操作。这个操作的默认执行结果是产生一个响应,这个响应包含一个反映trace请求中发送的所有头域的信息。当你开发Servlet时,在多数情况下你需要重载这个方法。
8、getLastModified
protected long getLastModified(HttpServletRequest request);
返回这个请求实体的最后修改时间。为了支持GET操作,你必须重载这一方法,以精确地反映最后修改的时间。这将有助于浏览器和代理服务器减少装载服务器和网络资源,从而更加有效地工作。返回的数值是自1970-1-1日(GMT)以来的毫秒数。默认的执行结果是返回一个负数,这标志着最后修改时间未知,它也不能被一个有条件的GET操作使用。
9、service
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;
public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException;
这是一个Servlet的HTTP-specific方案,它分配请求到这个类的支持这个请求的其他方法。
当你开发Servlet时,在多数情况下你不必重载这个方法。
这是我们启动服务器,在地址栏输入http://localhost:8080/from_0/HelloServlet必然会出现404错误,首先分析这个地址组成,其中http://njb-pc:8080/from_0是我们的主页,tomcat会自动执行webroot下的文件,而后面的HelloServlet又是什么呢,我们看到上面的代码知道它是一个类,其实它的真实身份是一个与类相关联的uri,想要让这个类有效,必须打开我们的web.xml,添加代码如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>helloservlet</servlet-name> <servlet-class>com.test.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloservlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> </web-app>
首先看<servlet>部分,<servlet-name>是你对某个servlet的命名,具体对哪个servlet进行命名,在<servlet-class>进行设置
接下来设置一个<servlet-mapping>,记住一个<servlet-mapping>要有与之相对应的<servlet>。
首先还是指定<servlet-name>这个name就是你上面写的<servlet-name>,<url-pattern></url-pattern>是你地址栏后面就写的内容,举个例子,如果<url-pattern>/MayBe</url-pattern>那么就有:http://njb-pc:8080/from_0/MayBe。
这是后运行以下服务器,在地址栏输入相应地址,运行结构如图所示:
这一期讲到这里了,希望大家对servlet有一个初步的了解了,下一期会和和表单的内容相结合。