自学Servlet网课避坑!!!

Servlet入门到精通 动力节点(动力节点 14h)

博主在经历了一段时间的学习Servlet后,果断停止了这个网课(见标题)。您可以看看这个笔记大纲,是真的不行,乱的一匹,就是不知道为什么播放量这么高。

一,Servlet规范介绍:

  • 作用
    1. Servlet规范来自于JavaEE规范中的一种
    2. 在Servlet规范中,指定Http服务器调用动态资源文件规则
    3. 在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则

二,Servlet接口实现类

  1. Servlet接口来自于Servlet规范下一个接口,这个接口存在Http服务器

  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或者dpPost

    • 浏览器 ------> oneServlet.doGet();
    • 浏览器-------》oneServlet.doPost();
  • 将Servlet接口实现类信息[注册]到Tomcat服务器

  • 【网络】 ----》[web] —》【web-inf】----> web.xml

    <!--Servlet接口实现类类路径地址交给Tomcat--->
    <servlet>
        <servlet-name>mm</servlet-name> <!--声明一个变量存储servlet接口实现类类路径-->
        <servlet-class>com.bjpowernode.controller.OneServlet</servlet-class><!--声明servlet接口</servlet>
     	
        Tomcat String mm = "com.bjpowernode.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接口:
			init
			getServletConfig
			getServletInfo
			destory------------四个方法对于Servlet接口实现类没有
			
			service()-----有用
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
通过父类决定在何种情况下调用子类中方法------[设计模式]----模板设计模式
HttpServlet: service() {
	if (请求方式 == GET) {
		this.doGet
	} else if (请求方式 == POST) {
		this.doPost
	}
}
OneServlet: doGet doPost
Servlet oneServlet = new OneServlet();
oneServlet.service()
复习:
	重写规则
	抽象类作用
	子类实现接口规则
	this指向
	继承规则
*/

四. 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对象进行销毁

五,HttpServletResponse接口

  • 介绍

​ 1.介绍: HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar

​ 2. HttpServletResponse接口实现类由Http服务器负责

​ 3. HttpServletResponse 接口负责将doGet/doPost方法执行结果写入到[响应体]交给浏览器

​ 4.开发人员习惯于将HttpServletResponse接口修饰的对象称为[响应对象]

  • 主要功能
    1. 将执行结果以二进制形式写入到[响应体]
    2. 设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为[文字,图片,视频,命令]。
    3. 设置响应头中[location]属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求。

六,HttpServletRequest接口

​ 1.介绍:

​ 1) HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar

​ 2) HttpServletRequest 接口实现类由Http服务器负责提供

​ 3) HttpServletRequest接口负责在doGet/doPost方法运行时读取Http请求协议包中信息

​ 4) 开发人员习惯将HttpServletRequest接口修饰的对象称为[请求对象]

​ 2.作用

​ 1)可以读取Http请求协议包中[请求行]信息

​ 2) 可以读取保存在Http服务请求协议包中,[请求头] 或则[请求体]中请求参数信息

​ 3) 可以代替浏览器向Http服务器申请资源文件调用

/**
问题: 
	以get方法发送中文参数内容得到正确结果
	以post方法发送中文参数内容“老崔是个男人"得到[乱码]"e????????...???"
原因:
	浏览器以get方式发送请求,请求参数保存在[请求头],在Http请求协议包到达Http服务器之后,第一件事就是进行解码,请求头以二进制内容由Tomcat负责解码,Tomcat9.0默认使用[utf-8]字符集,可以解释一切国家文字
	浏览器以post方式发送请求,请求参数保存在[请求体],在Http请求协议包到达Htpp服务器之后,第一件事是进行解码,请求体二进制内容由当前请求对象(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);
	}
***/

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

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

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

  1. 在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的【请求对象】和【响应对象】销毁

    • 【请求对象】和【响应对象】生命周期贯穿一次请求的处理过程

    • 【请求对象】和【响应对象】相当于用户在服务端的代言人

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值