本文内容
什么是Servlet与Servlet是如何执行的
了解Servlet实现关系
手动和自动开发Servlet
servlet生命周期(面试)
servlet的配置(访问路径/启动时加载)
ServletConfig对象API的使用
ServletContext对象API的使用
Response响应对象的使用
Request请求对象的使用
简单说:
Servlet
response
request
目标:
1.Servlet(创建,配置,访问,手动和自动创建和配置Servlet)
2.掌握Servlet的生命周期方法以及调用时机;
掌握Servlet的访问路径以及优先级关系
3.掌握ServletContext对象
获取web工程名(getContextPath())
获取web项目下的文件资源;
InputStremm getResourseAsStream(“”)
String getRealPath(“”);
Class类
getResourseAsStream(“”)
存值、取值、移除值操作。
掌握HttpServletResponse对象重定向、响应乱码问题的解决方法
掌握HttpServletRequest对象如何接受表单请求参数;
掌握Request域对象存值、取值、移 除值的操作;
掌握post请求、get请求乱码原因以及解决办法
导入项目有叹号(解决)
5.1 Servlet的概述
.理解什么是Servlet?
.如何创建一个Servlet?(了解)
1、Servlet:是运行在 Web 服务器中的一个Java类。通过 HTTP协议接受客户端的请求,同时也会给客户端一个响应。
2.创建一个Servlet的思路:
a)创建一个类实现Servlet接口,实现接口里面的方法
b)配置我们定义的Servlet
5.2 Servlet的入门
创建一个类实现Servlet接口,重写接口里面的方法
在web.xml中配置我们的Servlet
注意:
1.Servlet接口找不到
2.输出中文是...
3.web.xml中 servlet-name要对应上
4.<url-pattern>/hello</url-pattern>要以/开头
5.3 Servlet的执行流程
理解Servlet的执行流程,从而读懂配置文件中的内容。
打开浏览器访问,说明
http://localhost:8080/web_test1/hello
6.1 Servlet的实现关系
SUN设计之初,是有野心,以后的互联网不仅仅只使用http协议,可以通过GenericServlet实现。HttpServlet是一个与协议相关的Servlet是专门用来处理HTTP协议的请求。通常编写一个Servlet一般都会让这个Servlet继承HttpServlet重写service方法。
在service方法内部根据请求方式不同执行不同的doXXX的方法(get请求执行doGet方法,如果是post请求就会执行doPost方法)。
所以往往继承了HttpServlet之后不需要重写service方法,只需要重写doGet和doPost方法即可。往往请求要处理的内容的代码都是一致的,所以需要让doGet和doPost相互调
用可以简化编程。
6.2 Eclipse中使用Servlet模板
新建Servlet
完成Servlet的配置
查看web.xml文件,会自动生成如下内容:
1.1 Servlet的生命周期
.Servlet的生命周期方法有哪些?
.Servlet的生命周期方法分别什么时候被调用?
Servlet生命周期总结:
1.第一次访问servlet,servlet会被创建,并将servlet对象常驻内存,调用init方法进行初始化操作,init方法只执行一次。
2.开启一个线程,调用service方法,用于处理来自浏览器端的请求,以后都是开启一个线程来处理浏览器端请求。(执行多次)
3.当tomcat服务器正常关闭时,会调用destroy方法将servlet销毁。
代码参见:web01\src\com\itheima\servlet\demo1\ServletDemo1.java
浏览器访问:http://localhost:8080/web01/ServletDemo1
1.2 Servlet启动时加载的配置
.什么情况下需要设置启动服务器时加载Servlet?
.如何设置Servlet的启动时加载?
1、当初始化一个Servlet的时间比较长的时候,第一个访问的用户需要等上一段时间,这样一来用户体验会非常差。所以我们可以在启动服务器的时候初始化Servlet,服务器启动完了,Servlet也就初始化完成了。
2、在web.xml中配置:
1.3 Servlet的访问路径的配置
.访问路径分为哪几种?
.对于同一个Servlet,访问路径的优先级是怎样的?
1、访问路径分为:全路径匹配、目录匹配、扩展名匹配,实际上目录匹配也属于全路径匹配。
全路径匹配:以/开头,例如:/ServletLife、/abc/ ServletLife; /a/b/c.do
目录匹配:以/开头,结尾;例如:/、/aaa/(代表任意字符);
扩展名匹配:以开头,.xxx结尾,例如:.do、.abc;(x是任意字符)
像aaa.do是不合法的
注意:不能同时使用/开头,.xxx结尾的路径;例如: /.do 像:/aaa.do属于全路径匹配
2.全路径匹配>目录匹配>扩展名匹配,越精确优先级越高;
例如:
访问路径:/website/aaa/demo1.do
完全:/aaa/demo1.do
目录:/aaa/
扩展名:.do
总结:
完全路径: /aaa/bbb, /hello
目录匹配: /, /ccc/*
扩展名匹配: *.do, .abc,.action
hello ,错误
2.1 ServletConfig对象
.ServletConfig对象的作用是什么?
ServletConfig对象是用来获取Servlet的一些配置信息的,例如获取Servlet的名称,Servlet的初始化参数…
注意:Servlet的配置信息都是在web.xml的Servlet标签里面配置的。
总结:
ServletConfig对象(了解):保存了Servlet在web.XML中的配置信息
this.getServletConfig(); //获取
Iterator
2.2 ServletContext对象之获取web项目信息
.什么是ServletContext?
.ServletContext对象有什么作用?
1、ServletContext对象又称为Servlet的上下文对象,保存了整个web项目的信息,通过这个上下文对象可以保存或者获取web项目的信息。
一个web项目只有一个ServletContext对象,服务器会为每个项目创建一个ServletContext对象。
2、可以获取文件的MIME类型、全局参数、web项目工程名。
.获取文件的MIME类型(文件下载时要用):
conf/web.xml
.获取web项目请求工程名:
.获取全局初始化参数:
要点:
ServletContext:一个web应用只有一个,它保存的是本web应用的配置信息
1.获取mimeType,(文件下载时要用)
2.获取web工程名
3.获取全局初始化参数
3.1 ServletContext对象之读取web项目下文件
之前使用IO流就可以读取文件(java项目中)。现在是一个web项目,web项目需要发布到tomcat下才能访问的。获取web项目下的文件如果使用传统的IO就会出现问题(原因:路径中使用的是相对路径,相对的是JRE环境)。
读取文件的代码实现
public interface ServletContext
path的值:
D:\apache-tomcat-7.0.53\webapps\web01\WEB-INF\classes\db.properties
补充:
web工程中,普通java类如何读取文件..
web项目读取文件的方式三:
Class类:
InputStream getResourceAsStream(String name)
3.2 ServletContext对象之作为域对象存取数据
.什么是域对象.
.ServletContext如何进行存值、取值和移除值?
1、如果把一个数据存到某个对象身上,在多个地方又能通过这个对象取出来,那么这个对象存的值就有了一定的作用范围,这个对象也就称为域对象。ServletContext作为一个域对象,它的作用范围是整个web项目,因为服务器会为每个web项目创建一个ServletContext对象,只要这个web项目在服务器上没被移除或者服务器没有关闭,那么ServletContext域对象就存在,它身上的数据也就在。
2、存值、取值和移除值的方法:
域对象:
1.作用域,作用范围
i.web服务器启动,ServletContext就会创建.
ii.web服务器停止或项目从服务器卸载,ServletContext就会销毁
2.setAttribute(String,Object)
getAttribute(Stirng)
Servlet总结:
1.手动自动配置Servlet
2.Servlet生命周期
3.配置servlet启动时加载
4.Servlet访问路径的配置
5.获取ServletConfig
6.获取ServletContext
1.getMimeType()
2.全局参数
3.getRealPath(“/”)
4.getResourceAsStream(“/”)
5.作为域对象使用(setAttribute,getAttribute)
4.1 Response对象的概述
.什么是Response?
当用户通过浏览器去访问服务器之后,服务器会对浏览器做出一个回答(响应),这个响应里面包含了很多信息,这些信息会封装成到Response对象身上,这个对象也成为响应对象。
4.2 Response对象的API讲解
掌握几个常用的方法:
1、setHeader()方法是设置一个key对应一个value的响应头信息,设置的头信息会替换原来的头信息;addHeader()方法是设置一个key对应多个value的响应头信息,添加的头信息会追加到原来的头信息后面
2、HttpServletResponse对象常用的方法
4.3 Response对象的API的代码演示
.让页面重定向有几种方式?
重定向的2中方式:
解决页面输出中文乱码和定时刷新页面:
1.重定向
2.定时刷新
3.向浏览器输出中文
4.4 页面定时跳转的案例扩展
.如何实现倒计时的功能?
主要是使用javascript里面的循环定时器来倒计时。
代码参见:web01\WebContent\response\demo1.html
访问:http://localhost:8080/web01/response/demo1.html
5.1 Response对象响应的中文乱码处理
字符流是有缓冲区的, response设计默认的缓冲区编码是ISO-8859-1,这个字符集不支持中文的。所以一定会出现乱码问题,一旦出现乱码问题,我们只需要设置response字符流缓冲区的编码和设置浏览器默认打开时候采用的字符集一致即可
总结:
reponse响应中文乱码(记住下面的总结即可):
//1.向页面输出中文字符串
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print("你好!");
//2.向页面输出二进制,文件
response.getOutputStream().write(byte[]);
- 注意:先设置编码,后向页面输出
response.getWriter().print("你好!");
response.setContentType("text/html;charset=UTF-8");//放前面
5.2 Request对象的概述及API的介绍
.掌握获取请求参数的方法
.掌握Request作为域对象存值、取值和移除值的方法
1、获取请求参数的方法:
Map<String,String[]>
2、Request域存值、取值、移除值的方法:
5.3 Request对象的API的代码演示
访问:
结果:
6.1 Request对象接收表单请求参数
表单页面:
接收请求参数
结果:
6.2 Request对象接收表单请求参数时中文乱码处理
.post请求提交参数乱码,如何解决?
.get请求提交参数乱码, 如何解决
1、post请求提交的参数是在请求体中传递的,数据会存放在request字符缓冲区里面,而缓冲区默认编码是iso-8859-1编码,所以我们只需要设置缓冲区编码为utf-8即可。
2、get请求提交的参数是在地址栏中传递的额,浏览器会对数据进行一次编码,数据发送到服务器之后,服务器默认使用iso-8859-1进行解码,这样乱码就产生了。要知道我们程序是不应该改浏览器和服务器的字符集,所以,我们只能倒着编码和解码一次就可获得原来的字符。如下图所示:
代码演示:
request请求参数乱码的解决:
//解决post乱码
request.setCharacterEncoding("utf-8");
request.getParameter("name");
//解决get方式乱码
String name = request.getParameter("name");
name = new String(name.getBytes("iso-8859-1"),"utf-8");
总结:
Servlet
1.手动和自动创建Servlet,并配置,可以通过浏览器访问到
2.Servlet生命周期方法有哪些.何时执行.
3.配置Servlet启动时加载
4.掌握Servlet 的URL的3种配置方式
5.获取ServletConfig(了解)
6.获取ServletContext
a.getMimeType()文件下载时使用
b.String getRealPath(“/”)
c.InputStream getResourceAsStream(“/”)
2)作为域对象使用(1.有3个方法setAttribute(String,Object),getAttribute(String),removeAttribute(String) 2.范围多大)
Response
setStatus()
setHeader(“key”,”value”)
getWriter()
getOutputStream() ; //下载时用
sendRedirect(“path”);
setContentType(“text/html;charset=utf-8”);
Request
String getMethod();
getRemoteAddr();
getHeader(“User-Agent”);
String getParameter(String);
String[] getParameterValues(String)
Map<String,String[]> getParameterMap()
目标:
1.掌握Servlet的生命周期方法以及调用时机;
掌握Servlet的访问路径以及优先级关系
2掌握ServletContext对象
获取web工程名
获取web项目下的文件资源;
存值、取值、移除值操作。
3.掌握HttpServletResponse对象,重定向、
响应乱码问题的解决方法
4.掌握HttpServletRequest对象如何接受表单请求参数;
掌握Request域对象存值、取值、移 除值的操作;
掌握post请求、get请求乱码原因以及解决办法
post
request.setCharactorEncoding(“utf-8”);
get:
new String(getParameter(“name”).getBytes(“iso-8859-1”),”utf-8”)
中文乱码.
1.请求乱码
①get
a.String name = request.getParameter(“username”);
b.name = new String(name.getBytes(“iso-8859-1”),”utf-8”);
②post
a.request.setCharacterEncoding(“utf-8”);
2.响应中文乱码
(1)response.setContentType(“text/html;charset=utf-8”);