Servlet规范(一)

Servlet规范

一、Servlet规范介绍:

1.servlet规范来自于JAVAEE规范中的一种

2.作用:
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接口实现类
例子:
class Student{
//不是动态资源文件,Tomcat无权调用
}

class Teacher implements Servlet{
//合法动态资源文件,Tomcat有权利调用

Servlet obj = new Teacher();
obj.doGet()
}

三、Servlet接口实现类开发步骤

第一步:创建一个Java类继承与HttpServlet父类,使之成为一个Servlet接口实现类

public class OneServlet extends HttpServlet {

}

第二步:重写HttpServlet父类两个方法。doGet或则doPost

public class OneServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("OneServlet类针对浏览器发送GET请求方式处理");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("OneServlet类针对浏览器发送POST请求方式处理");
    }
}

      get
浏览器------》oneServlet.doGet()
	 post
浏览器------》oneServlet.doPost()
/**
* 子类----》父类----》A接口 此时 子类也是A接口实现类
* <p>
* 袁绍 PK 曹操 曹操宦官之后
* <p>
* 曹操----爹【正常人】---->宦官【接口】
* <p>
* 抽象类作用:降低接口实现类对接口实现过程难度 将接口中不需要使用抽象方法教给抽象类进行完成 这样接口实现类只需要对接口需要方法进行重写 servlet接口: init getServletConfig getServletInfo
* destory-----------四个方法对于Servlet接口实现类没用
* <p>
* service()----有用
* <p>
* Tomcat根据Servlet规范调用Servlet接口实现类规则: 1.Tomcat有权创建Servlet接口实现类实例对象 Servlet oneServlet = new OneServlet();
* 2.Tomcat根据实例对象调用service方法处理当前请求 oneServlet.service(),此时service方法中 this=====oneServlet extends extends implements
* oneServlet---------->(abstract)HttpServlet----->(abstract)GenericServlet- ---------> servlet接口 init destory
* getServletInfo getServletConfig
* <p>
* 通过父类决定在何种情况下调用子类中方法-------【设计模式】---模板设计模式
* <p>
* HttpServlet: service(){
* <p>
* if(请求方式 == GET){ this.doGet }else if(请求方式 == POST){ this.doPost }
* <p>
* } doGet doPost
* <p>
* OneServlet: doGet doPost
* <p>
* Servlet oneServlet = new OneServlet(); oneServlet.service()
* <p>
* 复习: 重写规则 * 抽象类作用 * 子类实现接口规则 * this指向 * 继承规则

第三步:将Servlet接口实现类信息【注册】到Tomcat服务器

 【网站】--->【web】---》【WEB-INF】--->web.xml

<!--将Servlet接口实现类类路径地址交给Tomcat-->
<servlet>
	<servlet-name>mm</servlet-name>
	<!--声明一个变量存储servlet接口实现类类路径-->
	<servlet-class>com.demo01.controller.OneServlet</servlet-class>
    <!--声明servlet接口实现类类路径-->
</servlet>

		    Tomcat  String mm = "com.demo01.controller.OneServlet"

		    <!--为了降低用户访问Servlet接口实现类难度,需要设置简短请求别名-->
		    <servlet-mapping> 
                <servlet-name>mm</servlet-name>
				<url-pattern>/one</url-pattern> 
        	<!--设置简短请求别名,别名在书写时必须以"/"为开头-->
		    </servlet-mapping>

		    如果现在浏览器向Tomcat索要OneServlet时地址

		    http://localhost:8080/myWeb/one

三、Servlet对象生命周期:

1.网站中所有的Servlet接口实现类的实例对象,只能由Http服务器负责额创建。
开发人员不能手动创建Servlet接口实现类的实例对象

2.在默认的情况下,Http服务器接收到对于当前Servlet接口实现类第一次请求时
自动创建这个Servlet接口实现类的实例对象

在手动配置情况下,要求Http服务器在启动时自动创建某个Servlet接口实现类
的实例对象
	<servlet>
		<servlet-name>mm</servlet-name> 
		<!--声明一个变量存储servlet接口实现类类路径-->
		<servlet-class>com.bjpowernode.controller.OneServlet</servlet-class>
		<load-on-startup>30<load-on-startup><!--填写一个大于0的整数即可-->
	</servlet>

3.在Http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象

4.在Http服务器关闭时刻,自动将网站中所有的Servlet对象进行销毁

演示

OneServlet

package com.demo01.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OneServlet extends HttpServlet {
    public OneServlet() {
        System.out.println("OneServlet已经被创建!");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        System.out.println("OneServlet类针对浏览器发送GET请求方式处理");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("OneServlet类针对浏览器发送POST请求方式处理");
    }

}

TwoServlet

package com.demo01.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TwoServlet extends HttpServlet {
    public TwoServlet() {
        System.out.println("TwoServlet已经被创建!");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        System.out.println("TwoServlet的Post方法");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        System.out.println("TwoServlet的Get方法");
    }
}

web.xml

<?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>
        <servlet-name>OneServlet</servlet-name>
        <servlet-class>com.demo01.controller.OneServlet</servlet-class>
    </servlet>
    <!--为servlet接口提供一个简单的别名-->
    <servlet-mapping>
        <servlet-name>OneServlet</servlet-name>
        <url-pattern>/one</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>TwoServlet</servlet-name>
        <servlet-class>com.demo01.controller.TwoServlet</servlet-class>
        <load-on-startup>2</load-on-startup><!--填写一个大于0的整数-->
        <!--可以让这个servlet对象在一开始就进行创建-->
        <!--如果为0或者不写的话,就是在被用户访问的时候在创建在一开始就进行创建-->
    </servlet>


    <servlet-mapping>
        <servlet-name>TwoServlet</servlet-name>
        <url-pattern>/two</url-pattern>
    </servlet-mapping>
</web-app>

步骤

​ 1.运行程序,会发现在服务器启动的时候,TwoServlet对象已经被创建,OneServer没有创建

在这里插入图片描述

​ 2.当在导航栏里访问oneServer的get方法时,OneServer才被服务器创建出来

在这里插入图片描述

​ 3.关闭服务器后,两个对象被销毁。

四、HttpServletResponse接口(响应对象)

1.介绍:

  • HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar

  • HttpServletResponse接口实现类由Http服务器负责提供

  • HttpServletResponse接口负责将doGet/doPost方法执行结果写入到【响应体】交给浏览器

  • 开发人员习惯于将HttpServletResponse接口修饰的对象称为**【响应对象】**

2.主要功能:

  1. 将执行结果以二进制形式写入到【响应体】

  2. 设置响应头中[content-type]属性值,从而控制浏览器使用
    对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】

  3. 设置响应头中【location】属性,将一个请求地址赋值给location.
    从而控制浏览器向指定服务器发送请求

3.HttpServletResponse接口中的方法

//输出方式
PrintWriter out = response.getWriter();
out.println("红烧猪蹄");

//设置响应头content-type,解析方式与编码方式
response.setContentType("text/html;charset=utf-8");

// 通过响应对象,将地址赋值给响应头中location属性
response.sendRedirect(url);

五、HttpServletRequest接口(请求对象)

1.介绍:

  • HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
  • HttpServletRequest接口实现类由Http服务器负责提供
  • HttpServletRequest接口负责在doGet/doPost方法运行时读取Http请求协议包中信息
  • 开发人员习惯于将HttpServletRequest接口修饰的对象称为**【请求对象】**

2.作用:

​ 1)可以读取Http请求协议包中【请求行】信息
​ 2)可以读取保存在Http请求协议包中【请求头】或则【请求体】中请求参数信息
​ 3)可以代替浏览器向Http服务器申请资源文件调用

3.HttpServletRequest接口中的方法

// 通过请求对象,读取【请求行】中 url 信息
String url = request.getRequestURL().toString();
// 通过请求对象,读取【请求行】中 method 信息
String method = request.getMethod();
// 通过请求对象,读取【请求行】中 uri信息
String uri = request.getRequestURI();

//取出请求头中所有 【参数名称】 与 【值】 request.getParameter(paramName)
 Enumeration paramNames = request.getParameterNames();
//将所有请求参数名称保存到一个枚举对象中进行返回
while (paramNames.hasMoreElements()) {
    String paramName = (String) paramNames.nextElement();
    //2.通过请求对象读取指定的请求参数的值
    String value = request.getParameter(paramName);
    System.out.println("请求参数名 " + paramName + "  =  " + value);
}

 //通知请求对象,使用utf-8的字符集
request.setCharacterEncoding("utf-8");

//读取对应属性的值,属性名传入
request.getParameter(paramName)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LvhaoIT

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值