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接口实现类

第二步:重写HttpServlet父类两个方法。doGet或则doPost
get
浏览器------》oneServlet.doGet()
post
浏览器------》oneServlet.doPost()

第三步:将Servlet接口实现类信息【注册】到Tomcat服务器
【网站】—>【web】—》【WEB-INF】—>web.xml

 <servlet>
		<servlet-name>OneServlet</servlet-name> <!--声明一个变量存储servlet接口实现类类路径-->
		<servlet-class>com.bjpowernode.controller.OneServlet</servlet-class><!--声明servlet接口实现类类路径-->
	</servlet>
``

```java
	

```java
    Tomcat  String mm = "com.bjpowernode.controller.OneServlet"

		    <!--为了降低用户访问Servlet接口实现类难度,需要设置简短请求别名-->
`
java
<servlet-mapping> 
          <servlet-name>mm</servlet-name>
		<url-pattern>/one</url-pattern> <!--设置简短请求别名,别名在书写时必须以"/"为开头-->
	</servlet-mapping>
	    如果现在浏览器向Tomcat索要OneServlet时地址

		    http://localhost:8080/war的名字/one

四.Servlet对象生命周期: 5个阶段

加载
初始化: init() ,该方法会在 Servlet被加载并实例化的以后 执行
服务 :service() ->doGet() doPost
销毁 :destroy(), Servlet被系统回收时执行
卸载

init():
a.默认第一次访问 Servlet时会被执行 (只执行这一次)
b.可以修改为 Tomcat启动时自动执行
i.Servlet2.5: web.xml


1

其中的“1”代表第一个。
ii.Servlet3.0
@WebServlet( value="/WelcomeServlet" ,loadOnStartup=1 )

service() ->doGet() doPost :调用几次,则执行几次

destroy():关闭tomcat服务时,执行一次。

五.HttpServletResponse接口

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

2.主要功能(写入到响应体中,设置响应体loction属性)
将执行结果以二进制形式写入到【响应体】
设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】
设置响应头中【location】属性,将一个请求地址赋值给location.从而控制浏览器向指定服务器发送请求
String result =“http://www.baidu.com?userName=mike”;
//通过响应对象,将地址赋值给响应头中location属性
response.sendRedirect(result);//[响应头 location=“http://www.baidu.com”]

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String result="Java<br/>Mysql<br/>HTML<br/>"; //既有文字信息又有HTML标签命令
    String result2="红烧排骨<br/>梅菜肘子<br/>糖醋里脊";

    //设置响应头content-type
    response.setContentType("text/html;charset=utf-8");
    //向Tomcat索要输出流
    PrintWriter out = response.getWriter();
    //通过输出流将结果写入到响应体
    out.print(result);
    out.print(result2);
}

六.HttpServletRequest接口(描述了get与post请求的区别)

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

2.作用:

1)可以读取Http请求协议包中【请求行】信息

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

   //3.通过请求对象,读取【请求行】中uri信息
   /*
   * URI:资源文件精准定位地址,在请求行并没有URI这个属性。
   *      实际上URL中截取一个字符串,这个字符串格式"/网站名/资源文件名"
   *      URI用于让Http服务器对被访问的资源文件进行定位
   */
   String uri =  request.getRequestURI();// substring

   System.out.println("URL "+url);
   System.out.println("method "+method);
   System.out.println("URI "+uri);

在这里插入图片描述
2)可以读取保存在Http请求协议包中【请求头】或则【请求体】中请求参数信息

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.通过请求对象获得【请求头】中【所有请求参数名】
        Enumeration paramNames =request.getParameterNames(); //将所有请求参数名称保存到一个枚举对象进行返回
        while(paramNames.hasMoreElements()){
              String paramName = (String)paramNames.nextElement();
              //2.通过请求对象读取指定的请求参数的值
              String value = request.getParameter(paramName);
              System.out.println("请求参数名 "+paramName+" 请求参数值 "+value);
        }
    }`在这里插入代码片`

在这里插入图片描述
3)可以代替浏览器向Http服务器申请资源文件调用
问题:

 以GET方式发送中文参数内容“正经人”时,得到正常结果
   以POST方式发送中文参数内容"男人",得到【乱码】“è?????????????·???

原因:

 浏览器以GET方式发送请求,请求参数保存在【请求头】,在Http请求协议包到达Http服务器之后,第一件事就是进行解码
     请求头二进制内容由Tomcat负责解码,Tomcat9.0默认使用【utf-8】字符集,可以解释一切国家文字

    浏览器以POST方式发送请求,请求参数保存在【请求体】,在Http请求协议包到达Http服务器之后,第一件事就是进行解码
     请求体二进制内容由当前请求对象(request)负责解码。request默认使用[ISO-8859-1]字符集,一个东欧语系字符集
     此时如果请求体参数内容是中文,将无法解码只能得到乱码

解决方案:

  在Post请求方式下,在读取请求体内容之前,应该通知请求对象使用utf-8字符集对请求体内容进行一次重新解码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通知请求对象,使用utf-8字符集对请求体二进制内容进行一次重写解码
        request.setCharacterEncoding("utf-8");
        //通过请求对象,读取【请求体】参数信息
        String value = request.getParameter("userName");
        System.out.println("从请求体得到参数值 "+value);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //通过请求对象,读取【请求头】参数信息
         String userName = request.getParameter("userName");
         System.out.println("从请求头得到参数值 "+userName);
    }

七.请求对象和响应对象生命周期

1.在Http服务器接收到浏览器发送的【Http请求协议包】之后,自动为当前的【Http请求协议包】生成一个【请求对象】和一个【响应对象】

2.在Http服务器调用doGet/doPost方法时,负责将【请求对象】和【响应对象】作为实参传递到方法,确保doGet/doPost正确执行

3.在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的【请求对象】和【响应对象】销毁
【请求对象】和【响应对象】生命周期贯穿一次请求的处理过程中
【请求对象】和【响应对象】相当于用户在服务端的代言人

八.欢迎资源文件(设置启动默认首页)

1.前提:
用户可以记住网站名,但是不会记住网站资源文件名

2.默认欢迎资源文件:

 用户发送了一个针对某个网站的【默认请求】时,
    此时由Http服务器自动从当前网站返回的资源文件

    正常请求: http://localhost:8080/myWeb/index.html

    默认请求: http://localhost:8080/myWeb/

3.Tomcat对于默认欢迎资源文件定位规则

 1)规则位置:Tomcat安装位置/conf/web.xml
   2)规则命令:<welcome-file-list>
                              <welcome-file>index.html</welcome-file>
                              <welcome-file>index.htm</welcome-file>
                              <welcome-file>index.jsp</welcome-file>
                            </welcome-file-list>

4.设置当前网站的默认欢迎资源文件规则

 1)规则位置:  网站/web/WEB-INF/web.xml

   2)规则命令:  <welcome-file-list>
                        <welcome-file>login.html</welcome-file>
                  </welcome-file-list>
    3)网站设置自定义默认文件定位规则,此时Tomcat自带定位规则将失效

九.Http状态码

1.介绍:
1)由三位数字组成的一个符号。
2)Http服务器在推送响应包之前,根据本次请求处理情况
将Http状态码写入到响应包中【状态行】上

3)如果Http服务器针对本次请求,返回了对应的资源文件。
通过Http状态码通知浏览器应该如何处理这个结果
如果Http服务器针对本次请求,无法返回对应的资源文件
通过Http状态码向浏览器解释不能提供服务的原因

2.分类:

 1)组成  100---599;分为5个大类
	    21XX :
	             最有特征 100; 通知浏览器本次返回的资源文件
		     并不是一个独立的资源文件,需要浏览器在接收
		     响应包之后,继续向Http服务器所要依赖的其他资源文件

         3) 2XX:
	             最有特征200,通知浏览器本次返回的资源文件是一个
		     完整独立资源文件,浏览器在接收到之后不需要所要
		     其他关联文件

          43xx:
	             最有特征302,通知浏览器本次返回的不是一个资源文件内容
		     而是一个资源文件地址,需要浏览器根据这个地址自动发起
		     请求来索要这个资源文件

		     response.sendRedirect("资源文件地址")写入到响应头中
		     location
		     而这个行为导致Tomcat将302状态码写入到状态行

            54XX:
	             404: 通知浏览器,由于在服务端没有定位到被访问的资源文件
		          因此无法提供帮助

                405:通知浏览器,在服务端已经定位到被访问的资源文件(Servlet)
		          但是这个Servlet对于浏览器采用的请求方式不能处理
             65xx:
	             500:通知浏览器,在服务端已经定位到被访问的资源文件(Servlet)
		         这个Servlet可以接收浏览器采用请求方式,但是Servlet在处理
			 请求期间,由于Java异常导致处理失败
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值