servlet 学习笔记2

1.JAVASE 与 JAVAEE 区别
JAVASE: Java开发基本规范
JAVAEE: Java企业级开发规范,指定了JVM管理系统与13类系统之间交流规则,因此JAVAEE规范有13种。
JDBC规范就是JAVAEE规范中的一种,用于设置JVM与所有的关系型数据库管理系统进行交流规则。

2.Servlet规范
a.Servlet规范是JAVAEE规范中一种
b.Servlet规范中设置JVM与Http服务器之间的交流规则
c.交流规则:
①定义何种Java类可以被Http服务器来调用的(何种Java类可以作为动态资源文件)
②Http服务器应该如何管理动态资源文件

3.何种Java类可以被Tomcat调用,可以作为网站的动态共享资源文件
Servlet规范中,认为只有Servlet接口实现类有资格作为动态共享资源文件,Servlet接口实现类必须由开发人员负责创建。

4.如何开发一个Servlet接口实现类
a.创建一个实现类,需要继承于HttpServlet
b.HttpServlet存在于Tomcat中lib/servlet-api.jar javax.servlet.http.HttpServlet
c.根据来访的浏览器采用的请求方式,重写对应doGet或者doPost
d.在/WEB-INF/lib中web.xml,注册Servlet接口实现类,通知Tomcat当前网站存在了一个动态资源文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.Tomcat调用Servelt接口实现类流程
a.浏览器向服务端发送了一次请求:http://localhost:555/myWeb/first
b.Tomcat接收到这个请求。首先将请求资源文件作为动态资源文件,到web.xml进行文件定位,如果有就调用。如果没有找到对应的动态资源文件,此时Tomcat认为本次请求的是一个静态资源文件,从web下进行定位,如果有则返回,如果还没有此时返回404状态码。
如果是动态资源文件:
a.Tomcat到web.xml根据<url-pattern>进行定位<servlet-name>
b.<servlet-name>定位<servlet-class>找到本次请求调用Servelt
c.Tomcat根据浏览器采用的请求方式,调用Servlet中doGet或则doPost
d.在doGet/doPost方法调用完毕后,Tomcat负责将响应包推送给浏览器

6.Servlet请求路径写法规则:4种
a.具体请求路径:如果浏览器请求的资源文件地址与当前Servlet中<url-pattern>的内容完全一致,Tomcat才会带调用当前Servlet。
例子:OneServlet <url-pattern>/one.do</url-pattern>
http://localhost:8080/myWeb/one.do OneServelt会被调用
http://localhost:8080/myWeb/abc/one.do OneServelt不会被调用
注意: 具体请求路径,必须以"/"为开头。

b.前置条件请求路径
如果浏览器请求的资源文件地址是以当前Servelt中<url-pattern>的内容为开头的,Tomcat才会带调用当前Servlet。
例子 OneServlet <url-pattern>/abc/*</url-pattern>
*”: 是一个通配符,描述是一个任意长度字符串
如果当前资源文件地址是以"/abc/“为开头,就表示调用的资源OneServlet
http://localhost:8080/myWeb/abc/two.do OneServelt会被调用
http://localhost:8080/myWeb/abc/one.html OneServelt会被调用
注意: 具体请求路径,必须以”/“为开头,必须以”*"为结尾。

c.后置条件请求路径
如果浏览器请求的【资源文件地址】以当前Servelt中<url-pattern>的内容为结尾,Tomcat才会带调用当前Servlet。
例子 OneServlet <url-pattern>*.do</url-pattern>
http://localhost:8080/myWeb/abc/one.do OneServelt会被调用
http://localhost:8080/myWeb/five.do OneServelt会被调用
http://localhost:8080/myWeb/five.do?uname=mike OneServelt会被调用
思考第三个为什么会被盗用?
要和笔记1中知识串起来:
请求行(
url:http://localhost:8080/myWeb/five.do
methos:get

请求头:uname:mike
注意:不能以"/“为开头,必须以”*"为开头

d.通配符请求路径
当前Servlet可以接收对当前网站所有的请求
例子 OneServlet <url-pattern>/*</url-pattern>
http://localhost:8080/myWeb/mm.jpg OneServlet
http://localhost:8080/myWeb/one.do OneServlet

e.请求路径优先级:具体请求路径 > 前置条件 > 通配符 > 后置条件

7.Servlet实例对象生命周期
a.默认情况:项目中,所有Servlet的实例对象都是由Tomcat负责创建;开发人员没有权利创建Servlet的实例对象。
b.人工干预:要求Tomcat在启动时,创建Servlet的实例对象,例如:

<servlet>
	<servlet-name>TwoServlet</servlet-name>
	<servlet-class>com.bjpowernode.controller.TwoServlet</servlet-class>
	<load-on-startup>890</load-on-startup>
</servlet>

c.在Tomcat运行期间,一个Servlet实现类只能被创建一个实例对象
d.在Tomcat关闭时,由Tomcat负责销毁所有的Servlet实例对象

8.Servlet开发时需要使用五种工具对象
概述:
①HttpServeltResponse接口:负责将运行结果写入到响应包
②HttpServletRequest接口:负责读取请求协议包信息
③ServletContext接口:可以为当前网站中所有的Servlet提供共享数据
④Cookie:在一次会话过程中,存储浏览器在服务端产生的私人数据
⑤HttpSession接口:在一次会话过程中,存储浏览器在服务端产生的私人数据

9.HttpServletResponse接口
介绍:是一个来自于Servlet规范中接口,由Tomcat负责提供这个接口实现类。负责在Servlet运行完毕后,将相关的数据写入到响应头和响应体。开发人员习惯于将HttpServletResponse接口修饰对象,称为响应对象。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200328134306528.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10在这里插入图片描述在这里插入图片描述
但是如果在doGET里面int num = 50,按照上述方式输出,则会得到2,这是为什么呢?
在这里插入图片描述
在这里插入图片描述
那么如果字符串里是中文,浏览器里会输出许多问号,这又是为什么呢?
在这里插入图片描述
应该这么做:
在这里插入图片描述
用UTF-8的不行不要慌,是因为系统默认显示语言是中文,因此软件默认用GBK编码。想要UTF-8也正常显示,可以在浏览器更改编码方式为unicode,即可正常显示。
如果字符串里有html标签:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
response.setCharacterEncoding() 与 response.setContentType()
相同点: 都可以设置响应头中字符集
不同点:response.setContentType()还可以设置内容类型

10.HttpServletRequest接口
a.介绍
来自于Servlet规范中一个接口,接口实现类由Tomcat负责提供的,由HttpServletRequest接口修饰对象,可以帮助开发人员读取请求协议包信息,相当于Scanner。一般习惯于将HttpServletRequest接口修饰对象称为请求对象。

b.作用
①读取请求行信息
String url = request.getRequstURL().toString();
String method = request.getMethod();
在这里插入图片描述
在这里插入图片描述
②读取请求头或者请求体中所有的请求参数名
request.getParameterNames();
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③读取请求头或则请求体中参数内容
http://localhost:555/myWeb/two.do?uname=mike
String value = request.getParameter(“请求参数名”)

http://localhost:555/myWeb/two.do?uname=mike&uname=allen&uname=smith
String array []=request.getParameterValues(“请求参数名”)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
备注:当复选框作为参数时,常常有一个参数对应多个值的情况

11.请求对象与响应对象生命周期
都是由Tomcat负责创建的。
每当Tomcat收到一个请求协议包时,就会为这个请求协议包创建一对请求对象和响应对象。
一次请求对应 一对请求对象和响应对象。
在Tomcat调用被请求的Servlet中服务方法(doGet/doPost)时,负责将本次请求对象和响应对象作为参数传入到服务方法。
在服务方法工作完毕后,Tomcat 销毁本次请求相关的request和response。
Tomcat 负责将响应包推送到浏览器上。

12.中文请求参数乱码问题
原因:跟浏览器采用的请求方式有关
如果浏览器以GET方式发送请求,请求参数在请求头存放。在请求协议包到达服务端之后,请求头内容是由Tomcat负责解析,Tomcat9.0在解析数据时,默认采用的字符集utf-8,所以如果浏览器使用GET方式发送中文参数,此时在服务端不会出现中文乱码问题。

如果浏览器以POST方式发送请求,请求参数在请求体存放。在请求协议包到达服务端之后,请求体内容是由对应请求对象request负责解码的。request对象默认使用ISO-8859-1字符集。所以如果浏览器以POST方式发送中文参数,此时在服务端必须会出现中文乱码问题。

解决方案:在request对象解析数据之前,重新设置request对象字符集utf-8(跟表采用的字符集有关,表用什么字符集这里就用什么)即可。
request.setCharacterEncoding(“utf-8”);
String value =request.getParameter(“参数”);

13.ServletContext接口
a.介绍
是Servlet规范中一个接口,接口实现类由Tomcat负责提供。它负责为当前工程中所有Servlet提供共享数据。开发人员习惯于将ServletContext接口修饰对象称为全局作用域对象。

b.生命周期
①全局作用域对象是在Tomcat启动时,由Tomcat为当前网站来创建的。
②一个网站中只能有一个全局作用域对象。
③从网站启动开始一直到网站关闭时,由Tomcat负责销毁当前网站的全局作用域对象。

c.使用
如何得到当前工程中全局作用域对象:
ServletContext application = request.getServletContext(); //向Tomcat索要当前工程的全局作用域对象

d.共享数据来源方式一
在网站启动之前。开发人员可以将网站中绝大多数Servlet需要使用的数据添加到web.xml:

<context-param>
	<param-name>共享数据名称</param-name>
	<param-value>共享数据内容</param-value>
</context-param>

在网站启动时:Tomcat首先为当前网站创建一个全局作用域对象,然后Tomcat将web.xml配置共享数据添加到全局作用域对象。
在网站运行时,当前某一个Servlet需要使用共享数据时,可以从全局作用域对象索要数据。
共享数据内容= application.getInitParameter(“共享数据名称”)
注意:此时共享数据只能读取使用,但是不能修改。

e.共享数据来源方式二
在Tomcat运行期间,可以将某一个Servlet提供的数据保存到全局作用域对象中,供当前网站中其他的Servlet来使用。
例如:
AServlet:提供共享数据
application.setAttribute(“共享数据名”,共享数据数据); object(任意类型)
BServlet:
共享数据数据 = application.getAttribute(“共享数据”)
注意:由Servlet存入共享数据可以被修改。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值