java web从零单排第四期《servlet》(2)

这一期来运行我们第一个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有一个初步的了解了,下一期会和和表单的内容相结合。

 

 

你可能感兴趣的:(java,Web,servlet)