Servlet

来源:互联网 发布:学说四川话的软件 编辑:程序博客网 时间:2024/06/07 00:11

**

Servlet

**

一、 Java Web开发环境
(1)、Java开发环境
下载并安装JDK
配置Java环境变量
(2)、Servlet容器
常用Servlet容器(Tomcat、Jetty)
下载Tomcat
运行并访问Tomcat
Servlet容器和Java应用服务器(WebLogic、WebSphere、JBoss)
(3)、Eclipse下载安装
(4)、Java Web执行过程

二、 Servlet
(1)、Java Servlet继承结构
Servlet继承接口(javax.servlet.Servlet)
GenericServlet(javax.servlet. GenericServlet)
HttpServlet(javax.servlet.http.HttpServlet)
(2)、创建Servlet过程
继承HttpServlet
重写service(doGet,doPost)方法
在web.xml中配置Servlet
三、 创建和部署Web应用
(1)、Web Project目录结构

(2)、在Tomcat中部署Web应用
静态部署:
 将web目录拷贝到Tomcat的webapps目录
 修改server.xml在中添加

 在CATALINAHOME/conf/Catalina/localhostwebpathxml CATALINA_HOME/conf/tomcat-users.xml加入




 通过Tomcat管理页面部署
四、 Servlet API
1. Servlet
(1)、Servlet是Java服务运用的小程序,由Servlet容器进行管理
(2)、Servlet关联的类:ServletConfig、IOException、ServletException、ServletResponse、ServletRequest
(3)、Servlet常用方法:
destory()
getServletConfig()
getServletInfo()
Init(ServletConfig )
servlet(ServletRequest ,ServletResponse )
2. HttpServlet
(1)、HttpServlet是基于HTTP协议的Servlet实现。用户创建的Servlet一般继承HttpServlet
(2)、HttpServlet的继承关系
HttpServlet继承GenericServlet,GenericServlet实现Serviet、Serializable、ServletConfig接口
(3)、Javax.servlet.GenericServlet常用方法:
destroy()
getInitParameter(String )
getInitParameterNames()
getServletConfig()
getServletContext()
getServletInfo()
getServletName()
init()
init(ServletConfig )
log(String , Throwable )
log(String )
service(ServletRequest ,ServletResponse )
(4)、Javax.servlet.http.HttpServlet常用方法:
HttpServlet()
doDelete(HttpServletRequest , HttpServletResponse )
doGet(HttpServletRequest , HttpServletResponse )
doHead(HttpServletRequest , HttpServletResponse )
doOptions(HttpServletRequest , HttpServletResponse )
doPost(HttpServletRequest , HttpServletResponse )
doPut(HttpServletRequest , HttpServletResponse )
doTrace(HttpServletRequest , HttpServletResponse )
getLastModified(HttpServletRequest )
servlet(HttpServletRequest , HttpServletResponse )
servlet(ServletRequest , ServletResponse )
五、 Servlet声明周期
(1)、Java Web Server端的运行都是围绕者Servlet展开。Servlet生命周期需要结合Servlet接口中定义的方法来了解Servlet的加载、创建、服务及销毁的过程
(2)、处理Servlet生命周期事件
在Servlet生命周期过程中涉及到其他下相关对象创建、销毁或更改其他对象的属相时提供对应的回调接口来实现特定的功能。
这里写图片描述
六、 HttpServletRequest
(1)、HttpServletRequest是继承ServletRequest并基于HTTP协议提供对用户请求信息进行统一封装的接口。一般有Servlet容器提供者实现。
(2)、HttpServletRequest生命周期:一个HttpServletRequest对象用户web服务器发送请求时,由servlet容器创建,并根据相关信息(请求头、请求主题)对其进行封装,然后传送给HttpServletRequest的使用者(通常是Servlet);一个HttpServletRequest对象只能存活在Servlet容器中;在服务器响应客户后HttpServletRequest对象被销毁
(3)、ServletRequest常用方法
String getCharacterEncoding()返回此请求正文使用的字符编码名称
void setCharacterEncoding(String s)重写此请求正文使用的字符编码名称
String getContentType()返回请求正文的MIME类型,如果该类型未知,则返回null
ServletInputStream getInputStream()以二进制数据形式获取请求正文
String getParameter(String name)以String形式返回请求参数的值,如果该参数不存在,则返回null
String[] getParameterValue(String name)返回包含给定请求参数拥有的所有值的String对象数组
RequestDispatcher getRequestDispatcher(String s)返回一个RequestDispatcher对象。如果该路径以“/”开头,那么可以相当于当前上下文
Int getContentLength()返回请求正文的长度(以字节为单位),如果长度未知,则返回-1.对于HttpServlet,返回的值与CGI变量CONTENT_LENGTH的值相同
Object getAttribute(String name)以Object形式返回指定属性的值,如果不存在给定名称的属性,则返回null
Enumeration getAttributeNames()返回包含次请求可用属性的名称的Enumeration。如果该请求没有可用属性,则此方法返回一个空的Enumeration
(4)、HttpServletRequest增加常用方法
Cookie[] getCookies()返回包含客户端次请求一起发送的所用Cookie对象的数组
String getContextPath()返回请求URI指示请求上下文的那一部分。请求URI中首先出现的总是上下文路径
HttpSession getSession()返回与请求关联的当前会话,如果该请求没有会话,则创建一个会话
HttpSession getSession(Boolean flag)返回与当前请求关联的HttpSession,如果没有当前会话并且flag为true,则返回一个新会话
String getRequestURI()返回此请求的URL的一部分,从协议名称一直到HTTP请求的第一行中查询字符串
String getMethod()返回用于发出次请求的HTTP方法名称
String getQueryString()返回包含在请求URL中路径后面的查询字符串
String getHeader(String s)以String的形式返回指定请求头的值
Enumeration gtHeaderName()返回次请求包含的所有头名称的枚举
boolean isRequestedSessionIdVaild()检查请求的会话ID是否仍然有效
Boolean isRequestedSessionIdFromCookie()检查请求的会话ID是否是作为cookie进入的
Boolean isRequestedSessionIdFromURL()检查请求的会话ID是否作为请求URL的一部分进入的
七、 表单处理
(1)、HttpServletRequest获取客户请求信息
在Servlet的doGet()或doPost()方法中,通过HttpServletRequest对象获取用户信息。一般主要处理由超链接或者表单传递的数据。
(2)、超链接传参
(3)、普通表单
(4)、带有文件上传的表单
(5)、获取Request中的其他信息
八、 RequestDispatcher
(1)、是由servlet容器创建的一个Web资源的包装器,可以用来把当前的request传递到该资源,或者把新的资源包括到当前响应中
(2)、方法
void forward(ServletRequest req,ServletResponse resp)将请求从一个servlet转发到服务器上的另一个资源(Servlet、JSP文件或HTML文件)。此方法允许一个servlet对请求进行初步处理,并使另一个资源生成响应。

Void include(ServletRequest req,ServletResponse resp)包含响应中某个资源(Servlet、JSP文件或HTML文件)的内容。事实上,此方法支持编程式服务器端包含

九、 ServletResponse
(1)、辅助servlet将响应发送到客户端的对象由servlet容器创建ServletResponse对象,并将它作为参数传递给servlet的service方法
(2)、常用方法
void setCharacterEncoding(String s)设置将发送客户端的响应的字符编码
void setContentType(String s)设置将发送到客户端的响应的内容类型。给定内容类型可能包含字符编码,如text/html;charset=UTF-8
void setContentLength(int len)设置响应的内容正文长度
ServletOutputStream getOutputStream()返回适用于二进制数据的响应流
PrintWriter getWriter()返回适用于文本数据的响应流
(3)、常用常量
SC_CONTINUE状态代码(100),指示客户端可以继续
SC_OK状态代码(200),指示请求正常成功
SC_SEE_OTHER状态代码(303),指示可在另一个URL之下找到该请求的响应
SC_NOT_FOUND状态代码(404),指示请求的资源不可用
SC_INTERNAL_SERVER_ERROR状态代码(500),指示HTTP服务器内存在错误使服务器无法完成请求
(4)、HttpServletResponse增加的方法
void addCookie(Cookie cookie)将指定cookie添加到响应(可加多个)
void addHeader(String name,String value)用给定名称和值添加响应头,此方法允许响应头有多个值
String encodeURL(String url)通过将会话ID包含在指定URL中并对该URL进行编码,如果不需要编码,则返回未更改的URL
String encodeRedirectURL(String url)对指定URL进行编码,以便在sendRedirect方法中使用它,如果不需要编码,则返回未更改的URL(可以判断是否需要将ID加入URL)
void sendError(int I,String s)使用指定状态将错误响应发送到客户端
void sendError(int i)使用指定状态代码并清楚缓冲区将错误响应发送到客户端
void setStatus(int i)设置此响应的状态代码,用于设置没用错误时的返回状态代码(例如SC_OK、SC_MOVED_TEMPORARILY)
void sendRedirect(String s)使用指定重定向位置URL将临时重定向响应发送到客户端

十、 HttpSession(会话跟踪)
(1)、HTTP协议是一种无状态的协议(一般情况下在相应客户后,服务器与客户端断开连接),需要对用户在访问同一web应用时对用户进行跟踪。
(2)、HttpSersion是Java web对用户进行会话跟踪的一个接口,由Servlet容器的提供者实现
HttpSession通过HttpServletRequest的getSession()(如果会话没有被创建则创建并返回)或getSession(boolean)(如果参数是false,会话存在则返回,否则返回null)方法获取
(3)、HttpSession常用方法
String getId()返回包含分配给此会话的唯一标识符的字符串
void invalidate()使会话无效,然后取消对任何绑定到此会话的对象的绑定
void setAttribute(String name, Object object)使用指定名称将对象绑定到此会话
Object getAttribute(String name)返回与此会话中的指定名称绑定在一起的对象
void removeAttribute(String name)从此会话中移除与指定名称绑定在一起的对象
void setMaxInactiveInterval(int interval)设置servlet容器在客户端访问之间保持此会话最大时间间隔
int getMaxInactiveInterval()返回servlet容器在客户端访问之间将使此会话保持打开状态的最大时间间隔
ServletContext getServletContext()返回此会话的ServletContext
boolean inNew()如果客户端还不知道该会话,或者客户端选择不加入该会话,则返回true。例如如果服务器仅使用基于Cookie的会话,而客户端已经禁止了Cookie的使用,则每个请求上的会话都将是新会话。
十一、 Cookie
(1)、Cookie是Servlet发送到web浏览器的少量信息,这些信息有浏览器保存,然后发送回服务器。Cookie一般用来保存会话ID来实现会话跟踪
一个Cookie拥有一个名称、一个值和一些可选属性,如注释、路径和域限定符、最大生存时间和版本号
Servlet通过使用HttpServletResponse的addCookie(cookie)方法将Cookie发送到浏览器,该方法将字段添加到Http响应头发送到浏览器。浏览器支持每台web服务器有20个Cookie,总共有300个Cookie。每个Cookie的大小默认为4KB
浏览器通过向HTTP请求添加字段将Cookie返回给Servlet。可使用HttpServletRequset的getCookie()方法从请求获取Cooki
Cookie通过名称和路径来进行区分
(2)、Cookie常用方法
Cookie(String key, String value)构建通过key/value保存的信息
void setDomain(String pattern)指定应在其中显示此Cookie的域
void setMaxAge(int expiry)返回为此Cookie设置的域名
void getMaxAge()设置Cookie的最大生存时间,以秒为单位。负值浏览器退出时删除。0值导致删除cookie
int getMaxAge()返回以秒为单位指定的Cookie的最大生存时间
String getName()返回Cookie的名称。名称在创建之后不得更改
String getValue()返回cookie的值
Void setPath(String uri)指定客户端应该返回cookie的路径。对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的。
(3)、使用Cookie
在服务器端添加Cookie
在服务器端获取Cookie
删除Cookie
客户端禁用Cookie
十二、 URL重写
(1)、客户端不支持Cookie或禁用Cookie,服务器端不能通过Cookie获取jsessionid
(2)、将jsessionid加入到URL之后,使用HttpServletResponse进行重写
String encodeURL(String url)通过将会话ID包含在指定的URL中并对该URL进行编码。如果不需要编码,则返回为更改的URL
String encodeRedirectURL(String url)对指定URL进行编码,以便在sendRedirect方法中使用它,如果不需要编码,则返回未更改URL(可判断是否需要将ID加入URL)
十三、 过滤器
(1)、Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter。
通过Filter技术,开发人员可以实现用户在访问某个目标资源前后进行拦截处理。简单说,就是可以实现web容器对某资源的访问前拦截并进行相关处理,也可以在某资源向web容器返回响应前进行获取并进行相关处理。
(2)、常用的Filter
验证过滤器
日志记录和审计过滤器
图像转换过滤器
数据压缩过滤器
加密过滤器
标记过滤器
触发资源访问事件过滤器
Mime类型链过滤器
XSL/T过滤器
(3)、Filter常用方法
void init(FilterConfig filterConfig)Filter被初始化时调用
void destroy()此方法仅在过滤器的所在线程都退出之后调用,或在过了时期之后调用
void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)当要访问过滤器过滤的资源前后都会通过此方法在这个过程中对请求的内容或响应的数据进行处理。此方法的典型实现遵循以下模式:检查请求;有选择地将带有自定义实现的请求对象装入过滤器;有选择地将带有自定义实现的响应对象装入过滤器;可以使用FilterChain对象的doFilter方法调用链中的下一个实体也可以不将请求/响应传递给过滤器链中的下一个实体,从而阻塞请求处理;在调用过滤器链中的下一个实体之后直接设置响应头
(4)、Filter执行原理
(5)、FilterChain
FilterChain是Servlet容器为开发人员提供对象。过滤器使用FilterChain调用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。
Void doFilter(ServletRequest req, ServletResponse resp)导致链中的下一个过滤器被调用,如果调用的过滤器是链中的最后一个过滤器,则导致调用链末尾的资源
(6)、实现Filter、配置Filter
十四、 监听器
(1)、Servlet中相关的监听器
在其相关对象(ServletContext、HttpSession、ServletRequest)创建、销毁或者对其属性进行操作时会触发监听。根据要实现的功能选择要监听的接口并配置。
(2)、常用的监听器
这里写图片描述
十五、 JavaEE架构
JavaEE(Java企业开发平台)

十六、 Java Web新特性
(1)、Fragment
将一个Web应用做成几个部分,然后整合
(2)、注解
@WebServlet
@WebListener
@WebFilter
@resource

原创粉丝点击