学习目标:
1 掌握 Servlet的运行流程
2 掌握Servlet的在web.xml中的配置
3 掌握Servlet的生命周期
4 掌握Servlet中doGet doPost和service方法
1. Servlet的运行流程分析
1. 创建web项目,创建com.bjsxt.Servlet包
2. 创建一个类myServlet继承HTTPservlet实现其service方法
3. 编写web.xml(服务器查找的目录)servlet servlet-mapping
4. 将myeclipse项目下的WebRoot里的所有内容复制到tomcat服务器下的webapps下的新建文件夹中(一个servlet一个新文件夹)
5. 运行tomcat
Localhost:8080 浏览器通过地址加端口号可以定位到指定服务器
Project/s 找到服务器后会找到其webapps文件夹,再去寻找project文件夹下的web.xml根据url-pattern为s查找对应的servlet
2. Myeclipse中启动和关闭服务器
(1) 请写出Servlet的url-pattern的配置方式
配置方式概念
配置方式具体实例
(2) 多个servlet配置同一个url-pattern会报什么错误?
不同的servlet不能配置相同的url-pattern,如果配置了在tomcat(服务器)启动时就会报错
服务器在启动时就会将部署的项目中的web.xml加载进内存
(3) 为什么Servlet只会创建一个,根据视频中的讲解说出你的理解
为了节省内存.如果我们对每一个用户请求都生成一个对应servlet的对象,第一、由于web服务器的访问量比较大,意味着内存开销会很大,第二、要GC大量内存,延长GC时间。
(4) 请说出视频中的两个注意
注意:服务器调用servlet处理请求一个servlet服务器只会创建一个servlet对象(该对象线程共享)所有线程都可以使用该对象,每个线程都调用一次service方法而不是创建新对象
每个线程所传入的res和resp的参数不同,返回的值也就不同
3. Servlet的生命周期
(1) 请求说出Servlet的生命周期
从第一次请求时创建servlet实例,到服务器关闭后servlet对象销毁
(2) init方法,service方法,destory方法的调用时机
在第一次请求时触发init方法,处理请求时调用service方法,servlet对象销毁时触发destory方法
4. doGet和doPost和Service方法的区别
(1) 请简述doGet、doPost和service方法的区别
doGet():处理表单提交方式是get的数据
doPost():处理表单提交方式是post的数据
Service():无论什么提交方式,都会调用service方法
注意(非常重要):实际上Tomcat服务器其实只认识service方法,如果我们自己编写的servlet中没有重写service方法,会自动调用父类(HttpServlet)的service方法,而service方法会根据请求调用doxx()方法进行处理
Super.service():调用父类的service方法
(2) 什么情况下会出现405异常
你的提交方式,servlet中没有处理的方法
例如:你用post提交,servlet中并没有写重写dopost()方法,也没有重写service()方
法,那他就会报405异常
学习目标:
1 掌握Servlet重要对象request的使用
2 掌握Servlet重要对象response的使用
3 掌握如何解决乱码问题
5. doGet和doPost和service方法调用的本质
(1) 请将视频中的注意总结写出来。
注意(非常重要):实际上Tomcat服务器其实只认识service方法,如果我们自己编写的servlet中没有重写service方法,会自动调用父类(HttpServlet)的service方法,而service方法会根据请求调用doxx()方法进行处理
6. Servlet常见异常总结
Servlet的常见错误
404错误:资源未找到
原因一:在请求地址中的servlet的别名书写错误
原因二:虚拟项目名称拼写错误
500错误:内部服务器错误
错误一:
Java.lang.ClassNotFoundException:
Com.bjsxt.servlet.ServletMothod
解决:
在web.xml中校检servlet类的全限定路径是否拼写错误
错误二:
因为service方法体的代码执行错误导致
解决:
根据错误提示对service方法体中的代码进行错误更改
405错误:请求方式不支持
原因:
请求方式和servlet中的方法不匹配所造成的/
解决:
尽量使用service进行请求处理,并且不要在service方法中调用父类的service(super.service())
7. HTTPServletRequest的介绍和特点
(1) request对象的作用是什么。
存储请求数据
注意:每次请求都会创建新的request对象存储请求数据
(2) request对象的特点是什么?
Request对象由服务器创建
每次请求都会创建一个request对象
生命周期为一次请求,请求结束即销毁此次请求的request对象
(3) request对象是由谁创建的?
收到请求数据时服务器创建
8. request获取请求行数据和根据键名获取请求头数据
(1) 请说出request对象获取请求行的方法及其作用
请求行
* localhost:8080/project/s?usernam=234&pwd=123
* getMethod(); 返回请求方式
* getRequestUrl(); 返回请求url
* getRequestUri(); 返回请求uri
* getQueryString(); 返回get请求中的URL中的用户数据,注意.post请求中没有此方法
* getSchema(); 返回协议
*
9. request获取请求头键名枚举和根据键名获取实体数据和获取同名不同值数据
(1) 简要说明getHeaderNames的作用?
获得请求头中储存了所有键名的枚举集合
(2) 获取请求实体数据的方法是?区别是?
getParameter(String name) 根据键名获取数据
* 注意:
* 键名起始就是前端页面中表单标签的name属性的值或者前端页面其他方式提交数据的键的名字
* 如果请求中没有对应的请求数据,则返回null
* getParameterValues(String name) 根据键名获取同名不同的值,返回数组
* 注意:如果没有对应的键名,则返回null
* getParameterNames() 返回实体数据中键名的枚举
10. request获取请求实体键名枚举和获取请求相关网络数据
(1) 请列举获取网络信息的方法是哪些及其作用
请求网络相关数据
* getRemoteAddr() 获取客户端的IP地址
* getRemotePort() 获取客户端端口号
* getLocalAddr() 获取服务器端的ip地址
* getLocalPort() 获取服务器的端口号
(2) 请说名getParameterNames的作用是什么,以及需要注意什么?
获取实体数据中存储了所有的键名的枚举集合
注意一键有多值的情况
获取实体数据中的键名的枚举的集合
Enumeration para= req.getParameterNames();
while (para.hasMoreElements()) {
// 获取键名
String keypara = (String) para.nextElement();
// 根据键名获取值,判断如果是pwd,就获得他的多个值,遍历
if (keypara.equals("pwd")) {
String[] pwds= req.getParameterValues(keypara);
for (String string : pwds) {
System.out.println(keypara+":"+string);
}
11. response设置响应行和设置响应头
(1) 说明addHeader和setHeader的方法的作用和区别
addHeader(String name,String value)添加响应头信息,同名数据不会覆盖
* setHeader(String name,String value)设置响应头信息,会覆盖原有信息(所有,并变为一个响应信息),如果没有此响应头则添加该信息
(2) 说明sendError的作用
自定义发送异常,保护数据
12. response设置响应实体
设置响应实体(处理结果)
* resp.getWriter().write("实体内容")
* 注意:
* 实体内容可以分开进行响应
* 注意:
* 一旦使用resp对象做出了请求响应,则意味着此次请求处理完毕,服务器在响应后会将此次请求相关的req对象和resp对象销毁
13. 乱码问题解决
(1) 请说明get和post请求乱码的解决方案
请求乱码问题,服务器获取的请求数据乱码
* post请求方式乱码
* req.setrCharacterEncoding("utf-8")
* get请求方式乱码解决:
* 方式一:每个数据都要进行单独的转换
* String uname=req.getParameter("uname")
* String uname2=new String(uname.getBytes("iso-8859-1","utf-8"));
* 方式二:
* req.setCharacterEncoding("utf-8");
* 在tomcat的server.xml文件中的Connector标签中增加属性:useBodyEncodingForURI="true"
(2) 请求说明如何解决响应数据乱码
* 响应乱码问题,服务器响应到浏览器的数据乱码
* 设置响应头的形式来做
* resp.setContentType("text/html;charset=utf-8");
学习目标:
1 掌握 Servlet的运行流程
2 掌握Servlet的在web.xml中的配置
3 掌握Servlet的生命周期
4 掌握Servlet中doGet doPost和service方法
1. Servlet的运行流程分析
1. 创建web项目,创建com.bjsxt.Servlet包
2. 创建一个类myServlet继承HTTPservlet实现其service方法
3. 编写web.xml(服务器查找的目录)servlet servlet-mapping
4. 将myeclipse项目下的WebRoot里的所有内容复制到tomcat服务器下的webapps下的新建文件夹中(一个servlet一个新文件夹)
5. 运行tomcat
Localhost:8080 浏览器通过地址加端口号可以定位到指定服务器
Project/s 找到服务器后会找到其webapps文件夹,再去寻找project文件夹下的web.xml根据url-pattern为s查找对应的servlet
2. Myeclipse中启动和关闭服务器
(1) 请写出Servlet的url-pattern的配置方式
配置方式概念
配置方式具体实例
(2) 多个servlet配置同一个url-pattern会报什么错误?
不同的servlet不能配置相同的url-pattern,如果配置了在tomcat(服务器)启动时就会报错
服务器在启动时就会将部署的项目中的web.xml加载进内存
(3) 为什么Servlet只会创建一个,根据视频中的讲解说出你的理解
为了节省内存.如果我们对每一个用户请求都生成一个对应servlet的对象,第一、由于web服务器的访问量比较大,意味着内存开销会很大,第二、要GC大量内存,延长GC时间。
(4) 请说出视频中的两个注意
注意:服务器调用servlet处理请求一个servlet服务器只会创建一个servlet对象(该对象线程共享)所有线程都可以使用该对象,每个线程都调用一次service方法而不是创建新对象
每个线程所传入的res和resp的参数不同,返回的值也就不同
3. Servlet的生命周期
(1) 请求说出Servlet的生命周期
从第一次请求时创建servlet实例,到服务器关闭后servlet对象销毁
(2) init方法,service方法,destory方法的调用时机
在第一次请求时触发init方法,处理请求时调用service方法,servlet对象销毁时触发destory方法
4. doGet和doPost和Service方法的区别
(1) 请简述doGet、doPost和service方法的区别
doGet():处理表单提交方式是get的数据
doPost():处理表单提交方式是post的数据
Service():无论什么提交方式,都会调用service方法
注意(非常重要):实际上Tomcat服务器其实只认识service方法,如果我们自己编写的servlet中没有重写service方法,会自动调用父类(HttpServlet)的service方法,而service方法会根据请求调用doxx()方法进行处理
Super.service():调用父类的service方法
(2) 什么情况下会出现405异常
你的提交方式,servlet中没有处理的方法
例如:你用post提交,servlet中并没有写重写dopost()方法,也没有重写service()方
法,那他就会报405异常
学习目标:
1 掌握Servlet重要对象request的使用
2 掌握Servlet重要对象response的使用
3 掌握如何解决乱码问题
5. doGet和doPost和service方法调用的本质
(1) 请将视频中的注意总结写出来。
注意(非常重要):实际上Tomcat服务器其实只认识service方法,如果我们自己编写的servlet中没有重写service方法,会自动调用父类(HttpServlet)的service方法,而service方法会根据请求调用doxx()方法进行处理
6. Servlet常见异常总结
Servlet的常见错误
404错误:资源未找到
原因一:在请求地址中的servlet的别名书写错误
原因二:虚拟项目名称拼写错误
500错误:内部服务器错误
错误一:
Java.lang.ClassNotFoundException:
Com.bjsxt.servlet.ServletMothod
解决:
在web.xml中校检servlet类的全限定路径是否拼写错误
错误二:
因为service方法体的代码执行错误导致
解决:
根据错误提示对service方法体中的代码进行错误更改
405错误:请求方式不支持
原因:
请求方式和servlet中的方法不匹配所造成的/
解决:
尽量使用service进行请求处理,并且不要在service方法中调用父类的service(super.service())
7. HTTPServletRequest的介绍和特点
(1) request对象的作用是什么。
存储请求数据
注意:每次请求都会创建新的request对象存储请求数据
(2) request对象的特点是什么?
Request对象由服务器创建
每次请求都会创建一个request对象
生命周期为一次请求,请求结束即销毁此次请求的request对象
(3) request对象是由谁创建的?
收到请求数据时服务器创建
8. request获取请求行数据和根据键名获取请求头数据
(1) 请说出request对象获取请求行的方法及其作用
请求行
* localhost:8080/project/s?usernam=234&pwd=123
* getMethod(); 返回请求方式
* getRequestUrl(); 返回请求url
* getRequestUri(); 返回请求uri
* getQueryString(); 返回get请求中的URL中的用户数据,注意.post请求中没有此方法
* getSchema(); 返回协议
*
9. request获取请求头键名枚举和根据键名获取实体数据和获取同名不同值数据
(1) 简要说明getHeaderNames的作用?
获得请求头中储存了所有键名的枚举集合
(2) 获取请求实体数据的方法是?区别是?
getParameter(String name) 根据键名获取数据
* 注意:
* 键名起始就是前端页面中表单标签的name属性的值或者前端页面其他方式提交数据的键的名字
* 如果请求中没有对应的请求数据,则返回null
* getParameterValues(String name) 根据键名获取同名不同的值,返回数组
* 注意:如果没有对应的键名,则返回null
* getParameterNames() 返回实体数据中键名的枚举
10. request获取请求实体键名枚举和获取请求相关网络数据
(1) 请列举获取网络信息的方法是哪些及其作用
请求网络相关数据
* getRemoteAddr() 获取客户端的IP地址
* getRemotePort() 获取客户端端口号
* getLocalAddr() 获取服务器端的ip地址
* getLocalPort() 获取服务器的端口号
(2) 请说名getParameterNames的作用是什么,以及需要注意什么?
获取实体数据中存储了所有的键名的枚举集合
注意一键有多值的情况
获取实体数据中的键名的枚举的集合
Enumeration para= req.getParameterNames();
while (para.hasMoreElements()) {
// 获取键名
String keypara = (String) para.nextElement();
// 根据键名获取值,判断如果是pwd,就获得他的多个值,遍历
if (keypara.equals("pwd")) {
String[] pwds= req.getParameterValues(keypara);
for (String string : pwds) {
System.out.println(keypara+":"+string);
}
11. response设置响应行和设置响应头
(1) 说明addHeader和setHeader的方法的作用和区别
addHeader(String name,String value)添加响应头信息,同名数据不会覆盖
* setHeader(String name,String value)设置响应头信息,会覆盖原有信息(所有,并变为一个响应信息),如果没有此响应头则添加该信息
(2) 说明sendError的作用
自定义发送异常,保护数据
12. response设置响应实体
设置响应实体(处理结果)
* resp.getWriter().write("实体内容")
* 注意:
* 实体内容可以分开进行响应
* 注意:
* 一旦使用resp对象做出了请求响应,则意味着此次请求处理完毕,服务器在响应后会将此次请求相关的req对象和resp对象销毁
13. 乱码问题解决
(1) 请说明get和post请求乱码的解决方案
请求乱码问题,服务器获取的请求数据乱码
* post请求方式乱码
* req.setrCharacterEncoding("utf-8")
* get请求方式乱码解决:
* 方式一:每个数据都要进行单独的转换
* String uname=req.getParameter("uname")
* String uname2=new String(uname.getBytes("iso-8859-1","utf-8"));
* 方式二:
* req.setCharacterEncoding("utf-8");
* 在tomcat的server.xml文件中的Connector标签中增加属性:useBodyEncodingForURI="true"
(2) 请求说明如何解决响应数据乱码
* 响应乱码问题,服务器响应到浏览器的数据乱码
* 设置响应头的形式来做
* resp.setContentType("text/html;charset=utf-8");