一篇文章讲清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{

    @Override
	public void destroy() { //销毁
		
	}

	@Override
	public ServletConfig getServletConfig() {  //servlet上下文,一个容器
		return null;
	}

	@Override
	public String getServletInfo() {  //获得是基本信息,字符串格式
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {//初始化
		
	}

	@Override
	public 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中映射地址

<!-- 配置映射地址与servlet类 -->
  <servlet>
  	<servlet-name>MyServelt</servlet-name>  <!-- 叫啥都行 -->
  	<servlet-class>com.servlet.MyServelt</servlet-class>  <!-- 类全名,做反射用的 -->
       <load-on-startup>1</load-on-startup>  <!--这个是跟tomcat启动的时候就加载,否则通常都是第一次访问的时候执行 -->
        
  </servlet>
  <servlet-mapping>
  	<servlet-name>MyServelt</servlet-name>
  	<url-pattern>/myServlet</url-pattern>  <!-- 访问地址,和注解上的一样   @WebServlet("/myServlet")-->
  </servlet-mapping>

②广义上的servlet

        我们根据这张图进行分析。

作为一把手肯定就是servlet接口了,所有的都是以这个为基础向下延伸简化的。

1.二把手 GenericServlet,其他方法都做了,只留一个service方法,如果想要用到初始化或其他方法,就只能换为原先接口servlet。

深入源码看一下,它是一个抽象类,实现了servlet接口。

 GenericServlet中只是实现了重要的service方法,比servlet简化了许多。

@WebServlet(value="/myServlet",loadOnStartup=1) 
public class MyServletClass extends GenericServlet{

	@Override
	public 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{

     <!--    这两个方法是自己加上的,我们常用的也就这两个方法
     @Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}
     --!>


}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值