servlet编写和配置

     在实际的开发中,我们经常需定义一种自己的请求,比如对所有“/test.do”的请求都要被拦截进行统一处理,那么可以自己编写一个servlet来拦截这种请求。

     编写servlet的时候,需要继承类 javax.servlet.http.HttpServlet(需要下载servlet.jar包)。我们可能经常使用的方法如下:

     init(ServletConfig config) : servlet的初始化方法

     service : servlet处理请求的总入口,然后根据不同的请求方式分别调用不同的方法,Get时调用doGet;Post方式时调用doPost。

     doGet  : 处理提交方式为Get的请求

     doPost : 处理提交方式为Post的请求

     destroy: 销毁servlet时调用的方式,servlet是单例的模式,所以只有关闭应用服务器(如:Tomcat)时才会关闭。

 

 对于处理不同的请求,我们可以在doPost方法中调用doGet方法,在doGet方法中对请求进行统一处理。我们面试中经常会被问到doGet和doPost的区别,通过本文你可以看出两者的区别。Get方式传递的参数最大好像是225个字符,但是Post方式采用body来传递的,没有长度限制的。

 

一、servlet代码示例

 

/**
 *
 */
package com.test.javax.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author rey
 *
 */
public class TestServlet extends HttpServlet {

 /**
  * 构造函数
  */
 public TestServlet() {
  super();
  System.out.println("TestServlet的构造函数...");
 }

 /*
  * (non-Javadoc)
  *
  * @see
  * javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest
  * , javax.servlet.http.HttpServletResponse)
  */
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  System.out.println("doGet 开始...");
  //super.doGet(req, resp);  //不能调用父类中的方法
  resp.getWriter().write("Hello doGet!");
  resp.flushBuffer();
  System.out.println("doGet 结束...");
 }

 /*
  * (non-Javadoc)
  *
  * @see
  * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
  * , javax.servlet.http.HttpServletResponse)
  */
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  System.out.println("doPost 开始...");
  //super.doPost(req, resp);  //不能调用父类中的方法
  resp.getWriter().write("Hello doPost!");
  resp.flushBuffer();
  System.out.println("doPost 结束...");
 }

 /*
  * (non-Javadoc)
  *
  * @see javax.servlet.http.HttpServlet#service(javax.servlet.ServletRequest,
  * javax.servlet.ServletResponse)
  */
 @Override
 public void service(ServletRequest _request, ServletResponse _response)
   throws ServletException, IOException {
  System.out.println("service 开始...");
  super.service(_request, _response);
  _response.getWriter().write("Hello service!");
  System.out.println("service 结束...");
 }

 /*
  * (non-Javadoc)
  *
  * @see javax.servlet.GenericServlet#destroy()
  */
 @Override
 public void destroy() {
  System.out.println("开始销毁servlet[destroy]...");
  super.destroy();
 }

 /*
  * (non-Javadoc)
  *
  * @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
  */
 @Override
 public void init(ServletConfig config) throws ServletException {
  super.init(config);
  System.out.println("开始初始化 TestServlet...");
 }

}

二、servlet配置

<!-- start servlet begin -->
 <servlet>
  <servlet-name>TestServlet</servlet-name>
  <servlet-class>com.test.javax.servlet.TestServlet</servlet-class>
 </servlet>
 <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/test.do</url-pattern>
    </servlet-mapping>

<!-- start servlet end -->

 

三、测试html代码

<html>
<head>
 <title>测试servlet</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
 <form name="frm_data" id="frm_data" method="POST" action="./test.do">
  <input type="hidden" name="UserName" value="wuguowei">
  <input type="hidden" name="UserPassword" value="123455">
  <input type="hidden" name="Chinese" value="1中国2">

  <input type="submit" value="提交">
 </form>
</body>
</html>

 

四、测试结果

  1)Post方式结果:

       service 开始...
       doPost 开始...
       doPost 结束...
       service 结束...

  2)Get方式结果:

       service 开始...
       doGet 开始...
       doGet 结束...
       service 结束...

 

你可能感兴趣的:(应用服务器,servlet,service,测试,input,action)