前言
在前面的文章中笔者就Servlet整体的框架有了一个认知,基本了解了其运作的原理。这篇文章
笔者将会对Servlet开发的方法和Servlet的配置做一个总结。
Servlet开发三种方式
在前面Servlet基础框架、源码学习中我们知道了Servlet框架图。链接如下:
http://blog.csdn.net/kiritor/article/details/8967528
这里我们简要的看看其框架图:
根据上述框架图和对源码的简单阅读,可以看出的是开发Servlet的方式基础继承、实现上述
三种不同的Servlet(Servlet、GenericServlet、HttpServlet)
实现Servlet接口
第一种方式,不常用,实现Servlet接口开进行Servlet开发。此方法业务逻辑的划分不太明确。
package com.kiritor.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
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;
import com.sun.corba.se.impl.ior.WireObjectKeyTemplate;
/**
* Servlet implementation class ServletImp
*/
public class ServletImp implements Servlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletImp() {
super();
}
@Override
public void destroy() {
}
@Override
public void init(ServletConfig config) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service方面里面来处理业务的逻辑*/
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
PrintWriter writer = res.getWriter();
writer.write("Imp Servlet!");
writer.flush();
writer.close();
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
}
继承GenericServlet
这种方式也是比较不常见的,对业务逻辑的处理也是集中在Servcice方法中的。
package com.kiritor.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.GenericServlet;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* Servlet implementation class ExGenericServlet
*/
public class ExGenericServlet extends GenericServlet implements Servlet {
private static final long serialVersionUID = 1L;
/**
* @see GenericServlet#GenericServlet()
*/
public ExGenericServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see Servlet#service(ServletRequest request, ServletResponse response)
*/
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.write("Imp Servlet!");
writer.flush();
writer.close();
}
}
继承HttpServlet
这种方式是最常用的方式,HttpServlet是基于Http协议的。根据Http协议的特点,
HttpServlet提供了不同的业务逻辑的处理的方法,而不是将所有的业务逻辑堆积到
service方法里去处理。业务更加的清晰,最常用的方法就是doPost、doGet方法了。
package com.kiritor.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;
/**
* Servlet implementation class ExHttpServlet
*/
public class ExHttpServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ExHttpServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* 继承HttpServlet一般在doPost、doGet方法
* 里面处理业务逻辑
* 之后由service回调。*/
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.write("Imp Servlet!");
writer.flush();
writer.close();
}
}
以上就是servlet实际开发中用到的方法了,不过一般情况下采用第三种方式较多,因为我们
的web应用基本都是通过Http协议进行通信的。
Servlet的配置
了解了Servlet是如何开发的,接下来我们来看看Servlet是如何配置的吧。我们知道Tomcat
是通过web.xml文件得到Servlet的配置信息,从而生成ServletConfig对象传递给init方法的。
这里笔者只是对Servlet的配置做一个简单的描述,至于后续的监听器配置、过滤器配置。到时
在做总结。
好了,直接看看配置文件吧:
<servlet>
<description></description>
<display-name>HelloServlet</display-name>
<!--名字任意,不过建议和类名一样-->
<servlet-name>HelloServlet</servlet-name>
<!--类名+包路径-->
<servlet-class>com.kiritor.servlet.HelloServlet</servlet-class>
<!--初始化是的参数,必须在这里进行配置-->
<init-param>
<description></description>
<param-name>info</param-name>
<param-value>this is a init message</param-value>
</init-param>
<!--映射配置-->
</servlet>
<servlet-mapping>
<!--和上述的Servlet名一样-->
<servlet-name>HelloServlet</servlet-name>
<!--浏览器的访问路径-->
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
本次的总结也就到这里了。其详细配置后续在做总结。