一篇文章讲清Servlet原理
1.servlet是什么?
servlet我们可以从英文看出来,全名server applet,服务端的一个小程序。我们一般将servelt分为两方面,一种是狭义上的servlet,另一种就是广义上的servelt。
狭义上的servlet:其实就是java中定义好的一个接口。
广义上的servelet:是实现servlet的类。
2.自己创建一个servelt
我们可以通过自己写一个servlet来证明。
①狭义上的servelt
实现Servlet接口,里面有一个周期,初始化只会一开始执行一次,销毁是在最后执行一次(tomcat关闭或者内存正好回收),重要的是service方法。
@WebServlet("/myServlet")
public class MyServlet implements Servlet{@Overridepublic void destroy() { //销毁}@Overridepublic ServletConfig getServletConfig() { //servlet上下文,一个容器return null;}@Overridepublic String getServletInfo() { //获得是基本信息,字符串格式return null;}@Overridepublic void init(ServletConfig arg0) throws ServletException {//初始化}@Overridepublic void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {}}
简单说一下@WebServelt:
我们通常的写法是@WebServlet("/myServlet") ,这是一个简化写法。其中完整写法是 @WebServlet(urlPatterns= {"/myServlet","/my"},name="sdf") ,而简化写法相当于@WebServlet(value = "/myServlet"),这个必须是只有一个属性,例如只有value,并且value中只有一个值的时候就可以省略 。但是比如我们定义一个loadOnStartup(loadOnStartup的意思就是tomcat加载的时候就已经初始化了,不需要等到第一次访问的时候才进行初始化)。@WebServlet(value="/myServlet",loadOnStartup=1) ,value就不可以省略,因为他有两个属性值。
xml中映射地址
MyServelt com.servlet.MyServelt 1 MyServelt /myServlet
②广义上的servlet
我们根据这张图进行分析。

作为一把手肯定就是servlet接口了,所有的都是以这个为基础向下延伸简化的。
1.二把手 GenericServlet,其他方法都做了,只留一个service方法,如果想要用到初始化或其他方法,就只能换为原先接口servlet。
深入源码看一下,它是一个抽象类,实现了servlet接口。

GenericServlet中只是实现了重要的service方法,比servlet简化了许多。
@WebServlet(value="/myServlet",loadOnStartup=1)
public class MyServletClass extends GenericServlet{@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// TODO Auto-generated method stub}}
2.三把手HttpServlet,这才是我们比较常用的,他的意思是将请求方式分类,匹配http请求,将service拆分成多个按照请求方式的方法(将主要方法service分成一个个的小方法)。常用的doGet,doPost方法。HttpServlet类不用实现任何方法,更加简单,方便。
@WebServlet(value="/myServlet",loadOnStartup=1)
public class MyServletHttp extends HttpServlet{}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
