Servle规范

本文详细介绍了Servlet规范,包括其在动态资源开发中的作用、Servlet接口实现类的创建和注册、Servlet对象生命周期、HttpServletResponse和HttpServletRequest接口的功能,以及多个Servlet间的调用规则。文章还探讨了数据共享方案,如ServletContext、Cookie、HttpSession和HttpServletRequest接口,以及Servlet监听器和Filter过滤器的作用和实现。通过对Servlet规范的深入理解,有助于提升Web应用的开发和管理效率。
摘要由CSDN通过智能技术生成

Servlet规范

作用:
1、在servlet规范中,指定【动态资源文件】开发步骤
2、在Servlet规范中,指定http服务器调用动态资源文件规则
3、在Servlet规范中,指定http服务器管理动态资源文件实例对象规则

一、Servlet接口实现类

1、Servlet接口来自于Servlet规范下的一个接口,这个接口存在http服务器,提供jar包。
2、Tomcat服务器下lib文件中有一个Servlet-api.jar存放servlet接口(javax.servlet.Servlet接口)。
3、Servlet规范中,http服务器能调用的动态资源文件必须是Servlet接口的实现类。

二、Servlet接口实现类开发步骤:

1、创建一个java类,继承HttpServlet父类,使之成为一个Servlet接口实现类。
/** Servlet接口中有5个抽象方法:init、getServletConfig、getServletInfo、destroy (这四个方法对于实现类没用)
														 service()  这个方法有用


/** HelloServlet ————> HttpServlet(abstract) ————> GenericServlet(abstract) ————> Servlet(interface) */

/** 这里继承HttpServlet抽象类,是为了降低直接实现Servlet接口的难度 */

2、重写HttpServlet父类的两个方法。doGet,doPost(浏览器两种不同的请求方式对应不同的方法)
    /** 怎样判断调用doGet还是doPost?
     *  只需调用service()方法,父类HttpServlet中的service()方法会判断浏览器的请求方法
     *  HttpServlet : service() {
     *                      if (请求方法 == GET){
     *                          this.doGet;
     *                      }else if (请求方法 == Post) {
     *                          this.doPost;
     *                      }
     *                          };
     * */

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
    System.out.println("实现类根据浏览器发送Get请求方法处理");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
    System.out.println("实现类根据浏览器发送Post请求方法处理");
}
3、将Servlet接口实现类信息 注册 到Tomcat服务器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

         <!-- servlet接口实现类路径交给Tomcat -->
        <servlet>
            <servlet-name> helloServlet </servlet-name>
            <servlet-class>com.example.wzweb.HelloServlet</servlet-class>
        </servlet>

        <!-- 为servlet接口实现类提供简短别名 -->
        <servlet-mapping>
            <servlet-name>helloServlet</servlet-name>
            <url-pattern>/hs</url-pattern>
        </servlet-mapping>


</web-app>

三、Servlet对象生命周期

1、所有Servlet接口实现类的对象,只能由Http服务器(tomcat)负责创建。
2、Servlet对象创建时机:
1)大多数正常情况下,只有当第一个用户向Tomcat讨要某个Servlet时候,此时Tomcat才会负责创建这个Servlet的对象
2)在人工干预情况下,要求Tomcat在启动时,自动创建某个Servlet类的对象
<servlet>

      <servlet-name></servlet-name>

   		<servlet-class></servlet-class>
	  	<load-on-startup>8888</load-on-startup> //只要写入一个大于0的整数
	  	
</servlet>
3、一个Servlet接口实现类,在Tomcat运行期间,只能被创建一个实例对象
4、在Tomcat关闭时,由Tomcat负责销毁所有的Servlet对象

四、HttpServletResponse接口(将数据写入服务器响应包)

1、介绍:
1)HttpServletResponse接口来自Servlet规范中,在Tomcat中存在servlet-api.jar
2)HttpServletResponse接口实现类由Http服务器负责提供
3)HttpServletResponse接口负责将doGet/doPost方法执行结果【写入到 响应包 交给浏览器】
4)开发人员习惯于将HttpServletResponse接口修饰的对象称为 【响应对象】
2、主要功能:
1)将执行结果以二进制的形式写入 响应体
public class HelloServlet extends HttpServlet {
   

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
				
       /** 当执行结果为数字时,浏览器接受到的数据会被转换为ASCII码 */
        /** 解决:实际开发中,都是通过out.print()将真实数据写入响应体 */
      
        String str = "Servlet is running ....";
        System.out.println(str);

        /** 通过响应对象,向Tomcat索要输出流 */
        PrintWriter out = resp.getWriter();

        /** 通过输出流,将执行结果以二进制的形式写入响应体中 */
        out.print(str);
    }
    
}
2)设置响应头中【content-type】属性值
从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字、图片、视频、命令】
public class HelloServlet02 extends HttpServlet {
   
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   

        /** 将执行结果中的html标签当做命令展示出来
         *  浏览器在就收到响应包之后,会根据【响应头中的content-type】属性的值
         *  来采用对应的编译器对响应体中的二进制数据进行编译
         *  默认情况下content-type的值为text【文本】
         *  要想执行html标签,需要在的到输出流之间更改响应头中的content-type的值
         * */
        String str = "Java<br>Html<br>mysql<br>Spring<br>";

        String str1 = "杜兰特<br>哈登<br>欧文<hr>";

        /** 设置响应头中的content-type值
         *  "text/html" 表示:告知浏览器使用文本编译器和html命令编译器编译响应体内容
         *  响应体包含中文,需要加上charset=utf-8
         **/
        response.setContentType("text/html;charset=utf-8");

        /** 通过响应对象,向Tomcat索要输出流 */
        PrintWriter out = response.getWriter();

        out.print(str);
        out.print(str1);


    }

}


3)设置响应头中的【location】属性,将一个请求的地址赋值给location&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值