Servlet
Servlet概述
Servlet是运行在服务端的java的小程序,是javaWeb的三大组件之一(Servlet,Filter,Listener),且最为重要。
Servlet作用
用来处理从客户端发送过来请求,并对该请求做出响应。
- 获得请求数据
- 处理请求
- 完成响应
准备工作
Servlet规范要求:Servlet程序需要编写实现类,并在web.xml进行配置。
- 实现类:通过继承javax.servlet.http.HttpServelt类,并复写doGet和doPost方法 、分别处理get和post请求
编写步骤
- 创建类,继承HttpServlet,复写doGet和doPost方法
- 编写配置文件web.xml
- 浏览器访问
Servlet的执行流程详解
1.先根据浏览器地址栏中的地址找到web.xml文件中在< servlet-mapping>的< url-pattern>中的名字。
2.再在< servlet-mapping>的找到< servlet-name>中真实的文件名,
3.再去< servlet>中找到全地址找到该servlet
4.并访问
Request接收请求参数
Request接收请求参数的概述
请求参数
post的参数是在请求体中,get的参数是直接在url后面以?连接的(多个的话以&连接的)
- String getParameter(String name) 获得指定参数名对应的值,如果没有返回null,有多个则获得第一个。例如:username=jack
- String[] getParamteterValues(String name) 获得指定参数名对应的所有的值。例如hobby=抽烟&hobby=喝酒&hobby=烫头
- Map<String,String[]> getParameterMap() 获得所有的请求参数。key为参数名,value为key对应的所有的值
- setCharacterEncoding(String env) 设置请求体的编码,用于解决post请求参数乱码问题
Request接收请求参数入门
案例分析
代码实现
Servlet的生命周期
生命周期:就是一个对象从创建到销毁的过程。
- Servlet生命周期:Servlet从用户第一次访问Servlet创建Servlet的实例的时候创建,当项目从服务器移除或者关闭服务器的时候Servlet被销毁。
- 用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行。任何一次请求 服务器都会创建一个新的线程访问Servlet的service的方法,在service方法内部根据请求的方法不同调用doxxx的方法,当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,destory方法就会被执行。
JavaEE规范中提供Servlet接口实现类:
- GenericServlet:通用servlet实现,没有实现service
- HttpServlet:与HTTP协议有关的实现。实现service方法,request.getMethod()获得请求方式,分别调用doGet()和doPost()方法。
Servlet规范规定,所有的servlet必须实现javax.servlet.Servlet接口,主要方法:init(),service(),destory()方法
- init():每一次调用都将执行初始化方法init(ServletConfig)
- service():每一次调用都将执行service(ServletRequest,ServletResponse)方法
- destory():服务器关闭或项目移除时调用
Servlet的相关配置
启动时创建Servlet
Servlet默认是在第一次访问的时候创建的,现在让Servlet在服务器启动的时候创建好,进行对Servlet的配置
在web.xml的< servlet>< /servlet>标签中配置
< load-on-startup>2< /load-on-startup> --传入正整数,整数越小,被创建的优先级就越高
【url-pattern的配置】
url-pattern配置方法共有三种:
-
完全路径匹配:以 / 开始
例如:/ServletDemo4 ,/aaa/ServletDemo5 ,/aaa/bbb/ServletDemo6 -
目录匹配: 以/开始,需要以结束
例如: /(所有),/aaa/*(aaa目录下的所有) -
扩展名匹配:不能以/开始,以开始的。
例如:.do、.action、.jsp。错误的写法:/*.do -
缺省路径 /
通常情况下访问html页面时,首先从当前web项目的web.xml文件寻找匹配路径,如果没有找到,再从tomcat默认的web.xml匹配,将使用缺省servlettomcat获得匹配路径时:1>2>3>4
开发中路径的编写:
案例:记录网站的登陆成功的人数
相关知识点:
ServletContext
服务器启动的时候,为每个WEB应用创建一个单独的ServletContext对象,我们可以使用这个对象存取数据,用这个对象存取的数据可以在整个WEB应用中获得,可以使用如下方法存取ServletContext中寸数据
- void setAttribute(String name,Object object)
- object getAttribute(Stirng name)
- void removeAttribute(String name)
案例分析
代码实现
ServletConfig:获得Servlet的配置信息(了解)
- String getInitParamter(String name) 获得Servlet的初始信息
- Enumeration getInitParameterNames() 获得所有Servlet的初始化参数的名称
- ServletContext getServletContext() 获得封装了servlet的上下文内容的对象
- Stirng getServletName() 获得Servlet在web.xml中配置的name的值
ServletContext:读取WEB工程下的文件(重点)
ServletContext 对象,tomcat为每一个web项目单独创建的一个上下文对象。就有功能:
- 可以在多个servlet之间共享数据
存放:setAttribute()
获得:getAtribute()
删除:removeAtribute() - 可以获得当前WEB项目中的指定资源文件
InputStream getResourceAsStream(String) 将一个文件转为流
String getRealPath(String) 将虚拟路径转化为真实路径 - 进行整个web项目初始化数据设置
String getInitParameter(String)
Enumeration getInitParameterNames()
在实际开发中,有时候可能会需要读取Web应用中的一些资源文件,比如配置文件,图片等。为此,在ServletContext接口中定义了一些读取Web应用的路径,返回关联资源文件的IO流,资源文件文件在系统中的绝对位置等