tomcat实现的Servlet/Jsp规范小结

前言:上篇中简单记录了tomcat,weblogic的区别,他们主要实现了不同的标准规范,因此他们的作用不同,weblogic实现J2EE的所有规范,包含EJB所以功能更加强大,tomcat只是实现了servlet/jsp规范。

一:Servlet简介

       上篇说到,在Java中规范即接口,tomcat实现servelt/jsp规范,也就是实现了相关接口,在我们web项目中也实现相对应接口,然后发布到tomcat中,这样就可以用访问他们了。

      Servlet是运行在服务端的Java小程序,是Sun公司提供的一套规范,用来处理客户端请求,响应给浏览器的动态资源。Servlet是JavaWeb三大组件之一。(Servlet,Filter,Listener).且最为重要。

Servlet有狭义和广义的定义

          狭义的servlet:指的就是servlet接口规范

          广义的servlet:指的是实现了Sevlet接口的所有的实现类

二:Servlet的作用 

       Servlet用来处理从客户端发送过来的请求,并对该请求做出响应。Servlet的任务有:

       1)获取请求数据

        2)处理请求

       3)完成响应

       无论我们用SpringMvc框架还是其他 框架,底层都是由Servlet来接收请求的。

      Servlet规范要求:Servlet程序需要编写实现类,并在web.xml中配置。实现类通常是继承javax.servlet.http.HttpServlet类,并重写doget,dopost方法。doget是处理get请求,dopost是处理post请求。

 三:编写Servlet

手动实现一个Servlet类

public class SelfServlet implements Servlet{
	
	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		System.out.println("servlet running.......");
		res.getWriter().print("servlet running.......");
		
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

}

 在Web.xml配置如下:

<servlet>
  	<servlet-name>demo</servlet-name>
  	<servlet-class>*.SelfServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>demo</servlet-name>
  	<url-pattern>/demo</url-pattern>
  </servlet-mapping>

从上面可以看出,Servlet接口中有一些方法需要我们重写,这些方法对应着Servlet的生命周期的执行过程。

生命周期对应如下三个方法:

  1. init(ServletConfig config)

          创建servlet时会调用的方法,用来初始化一些配置信息,仅在创建servlet时执行一次。

    2. service(ServletRequest request,ServletResponse response)

            每次请求Servlet都会执行的方法

     3.destroy()

            servlet在销毁之前会执行的方法,仅在销毁servlet时执行一次。

  1. 运行阶段-service

在这个阶段,tomcat服务器会为这个请求 创建 代表HTTP请求的ServletRequest对象 和 代表HTTP响应的 ServletResponse对象,然后将他们作为参数传递给service() 方法。

servcie() 方法从ServletRequest对象获取请求的信息并做出处理;通过ServletResponse 对象生成响应的结果。

    在servlet的整个生命周期内,对于servlet的每一次访问请求,tomcat都会调用servlet的service方法,也就意味着service() 方法会在servlet的生命周期内会被调用多次。

        2 销毁阶段-destroy

当服务器正常关闭或者Web应用被移出服务器时,servlet会随着Web应用的销毁而销毁。

在销毁serlvet之前,tomcat 会调用Servlet的destory方法,以便让Servlet对象释放他所占用的资源。

注意:如果对servlet中的代码进行了任何修改,一旦保存,会重新加载servlet,而这个过程就等于是将servlet先卸载,然后重新加载,因此也会执行destroy方法

四:Servlet生命周期

  1. Servlet何时创建

      当我们第一次去访问一个servlet的时候,服务器会去创建这个servlet对象。并且只会创建一次。

       而当服务器创建一个serlvet的时候,会去调用init方法。

     2 .Servlet何时销毁

      当服务器正常关闭或者Web应用被移出服务器时,servlet会随着Web应用的销毁而销毁。

     在销毁serlvet之前,tomcat 会调用Servlet的destory方法,以便让Servlet对象释放他所占用的资源。

     3. 每次访问必然执行的方法

       service(ServletRequest request,ServletResponse response)

      每次请求Servlet都会执行的方法

五:ServletRequest、ServletResponse,ServletConfig的介绍

ServletRequest和ServletResponse由tomcat创建,在调用service方法的时候传递。

1:ServletRequest:封装了请求发送的数据,可以从该对象中获取数据,因此get方法比较多

2:ServletResponse:用来响应数据,比如把数据响应给浏览器并且显示在页面上

3.ServletConfig

每一个servlet都有一个与之对应的servletConfig对象,它是servlet 的配置对象,封装了servlet的初始化配置信息。

tomcat在创建Servlet的时候会调用init方法将ServletConfig对象传递过来。不重要,但是起码知道它是干什么的(放置初始化信息的)。

在web.xml中可以配置servlet的初始化配置信息:

<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>cn.itcast.servlet.DemoServlet</servlet-class>
    <init-param>
   	 	<param-name>name</param-name>
   		<param-value>张三</param-value>
    </init-param>
  </servlet>

通过如下方式获取:

public void init(ServletConfig config) throws ServletException {
			System.out.println("servlet 被初始化了。。。");
			//作用一:获取serlvet名称
			String servletName = config.getServletName();
			System.out.println(servletName);
			//作用二:获取初始化信息
			String name = config.getInitParameter("name");
			System.out.println(name);
			//作用三:获取ServletContext对象
			ServletContext servletContext = config.getServletContext();
			System.out.println(servletContext);
			
}

 

六:HttpServlet的使用

要获取请求和响应数据更多信息,就需要实现servlet接口并且支持http协议,而Servlet其中的一个子类javax.servlet.http.HttpServlet就支持http协议。因此在开发中我们一般会编写一个类来继承HttpServlet来接收和响应来自客户端的请求。

编写的Servlet如下:

public class TestServelet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet方法执行了");

    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost方法执行了");

    }
}

xml配置如下:

   <servlet>
<!--自定义的Servlet名字-->
        <servlet-name>testServle</servlet-name>
        <servlet-class>com.ebao.test.servlet.TestServelet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--自定义的Servlet名字和上面的相对应-->
        <servlet-name>testServle</servlet-name>
        <!--请求地址-->
        <url-pattern>/test</url-pattern>

    </servlet-mapping>
  1. doGet和doPost方法与service方法联系

在描述doGet和doPost以及service方法之间的关系之前,先来看一下Servlet和GenericServlet以及httpServlet之间的关系:

 

我们在编写servlet的时候一般不会去实现Servlet接口,而是继承HttpServlet,并且也不会复写service方法,而是复写doGet或者doPost方法。

原因如下:

在HttpServlet类中有一个service方法,在该方法中对请求的方法进行了判断,如果是get方法就执行doGet()方法,如果是post方法就执行doPost方法:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姑苏冷

您的打赏是对原创文章最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值