一、Servlet简介
1、什么是Servlet
servlet是运行在服务端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求、响应给浏览器的动态资源
Servlet是Javaweb三大组件之一(Servlet、Filter、Listener),且最重要
2、Servlet的作用
用来处理从客户端发送过来的请求,并对该请求作出响应
Servlet的任务有:
<1>获取请求数据
<2>处理请求
<3>完成响应
3、Servlet的入门
<1>准备工作
Servlet规范要求:Servlet程序需要编写实现类,并在web.xml进行配置
实现类:通常继承javax.servlet.http.HttpServlet类,并复写doGet和doPost方法
doGet()方法用于处理get请求
doPost()方法用于处理post请求
配置信息:在web.xml进行配置
<2>编写步骤
①创建类,继承HttpServlet,复写doGet()和doPost()方法
②在web.xml中编写配置文件
③浏览器访问
在浏览器中地址栏输入:http://localhost:8080/day13/hello
浏览器显示空白页
控制打印信息
<3>Servlet执行的流程
4、Request接受请求参数
<1>Request接收请求参数的概述
<2>Request接收请求参数入门
编写步骤
①编写表单,提供表单字段:username、password、hobby。以post方式提交
②编写Servlet实现类,使用对应方法获得请求参数,并处理POST中文乱码
③编写Servlet,配置文件
④测试,访问“http://localhost:8080/day13/02.request.html”,并提交表单,控制台显示
⑤servlet访问过程
5、案例:登录功能的实现
<1>案例分析
二、Servlet的生命周期
<1>Servlet规范规定,所有的servlet必须实现javax.servlet.Servlet接口
①第一次调用时,将执行初始化方法:init(ServletConfig)
②每一次调用,都将执行service(ServletRequest,ServletResponse)方法
③服务器关闭,或项目移除:destroy()方法
<2>JavaEE规范中提供Servlet接口实现类
①GenericServlet:通用servlet实现,没有实现service
②HttpServlet:与Http协议有关的实现,实现service方法,完成与http协议有关的操作
request.getMethod() 获得请求方式(get、post)
如果是get,将调用doGet()
如果是post,将调用doPost()
<3>生命周期就是一个对象从创建到销毁的过程
Servlet生命周期:servlet从创建到销毁的过程
①何时创建:用户第一次访问Servlet创建Servlet的实例(单实例)
②何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行。
任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法,在service方法内部根据请求方式的不同调用doXXX的方法。(get请求调用doGet,post请求调用doPost())当Servlet中服务器移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行
三、Servlet的相关配置
1、基本配置
其中url-pattern的配置方式:
1)完全匹配:访问的资源与配置的资源完全相同时才能访问到
2)目录匹配:格式:/虚拟的目录../* *代表任意
3)扩展名匹配:格式:*.扩展名
注意:第二种与第三种不要混用 /aaa/bbb/*.abcd(错误的)
2、服务器启动时实例化Servlet配置
servlet何时创建:默认第一次访问时创建
为什么是默认?
当在servlet的配置时,加上一个
3、缺省Servlet
可以将url-pattern配置一个/,代表该servlet是缺省的servlet
什么是缺省的servlet?
当你访问资源地址所有的servlet都不匹配时,缺省的servlet负责处理
其实,web应用中所有的资源的响应都是servlet负责,包括静态资源
4、欢迎页面
四、ServletContext对象
1、什么是ServletContext对象
ServletContext代表一个web应用的环境(上下文)对象,ServletContext对象内部封装的是该web 应用的信息,ServletContext对象一个web应用只有一个
2、ServletContext对象的生命周期
创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状态))
销毁:web应用被加载(服务器关闭,移除该web应用)
3、怎样获得ServletContext对象
<1>ServletContext servletContext=config.getServletContext();
<2>ServletContext servletContext=this.getServletContext();
4、ServletContext的作用
<1>获得web应用全局的初始化参数
web.xml中配置初始化参数
通过context对象获得参数
<2>获得web应用中任何资源的绝对路径
方法:String path=context.getRealPath(相当于该web应用的相对地址)
<3>Servletontext是一个域对象
Servlet域对象的作用范围:整个web应用(所有的web应用资源都可以随意向servletcontext域中存 取数据,数据可以共享)
域对象通用的方法:
setAttribute(String name,Object obj); 存放数据
getAttribute(String name); 获得数据
removeAttribute(String name); 删除数据
<4>案例:记录网站的登录成功的人数
①分析:
②代码实现
<5>ServletContext读取Web资源
在实际开发中,有时候可能会需要读取Web应用中的一些资源文件,比如配置文件,图片等。为此,在ServletContext接口中定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件名相对于Web应用的路径,返回关联资源文件的IO流,资源文件在文件系统的绝对路径等。
代码实现
①加载配置文件
②开发者需要获取的是资源的绝对路径。接下来,通过使用getRealPath(String path)方法获取资源 文件的绝对路径
<6>类加载器读取文件
<7>Servlet模板
package ${enclosing_package}; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ${primary_type_name} extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("hello haohao..."); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }