Session
1. Enctype 属性:application/x-www-form-urlencoded:窗体数据被编码为名称/值对;
multipart/form-data:窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。
enctype 属性:代表HTML表单数据的编码方式
取值:
application/x-www-form-urlencoded -- 窗体数据被编码为名称/值对.这是标准的编码格式.
multipart/form-data -- 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分.
text/plain -- 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符.
在head标签中加载一个CSS文件
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
2. RequestDispatcher的forward方法依靠目的JSP页面生成全部输出。不允许servlet生成任何自己的输出。
3. 转发(forward)的一种替代方案是包含(include)。使用包含servlet可以将它自身的输出及一个或多个JSP页面的输出组合在一起。
Servlet
1. Servlet初始化:加载并初始化Servlet ,主要通过init()方法实现,读取配置信息、初始参数,连接数据库等。
2. Servlet处理客户请求:通过Service()方法实现,Servlet引擎会创建一个ServletRequest和ServletResponse响应对象,然后传递给Service()方法。
3. 卸载Servlet:通过Servlet的destroy()方法实现。释放资源(Java垃圾自动回收器无法回收的资源)。
4. 获取Servlet信息:通过ServletConfig接口定义的方法获取
getInitParameter(String name) //获取初始化参数
5. 获取Servlet的配置名称:
getServletName();
6. 获取服务器端信息:
a. 使用ServletRequest
getServerName() getServerPort();
b. 使用ServletContext
是服务器的上的一个Web的代表,可以获得多个服务器端信息
getServerInfo()
getAttributeNames() //获取所有属性名称
getAttribute(String name) //获取该属性名的值
getMajorVesion()
getMinorVersion()
7. 获取客户端信息
1. 使用ServletRequest
getRemoteHost()
getRemoteAddr()
getRemotePort()
getProtocol()
getCharacterEncoding()
getParameterNames()
getParameter(String name)
8. Servlet中的会话管理
1. 获取会话对象
HttpSession session = request.getSesssion()
2. 在HttpSession对象中保存数据
setAttribute(String name, Object value)
3. 从HttpSession对象中读取数据
getAttribute(String name)
4. 获取会话ID
getId()
5. 创建时间
getCreationTime()
6. 最后访问时间
getLastAccessedTime()
9. Servlet中的异常处理
1. 声明式异常处理(在web.xml中)
<error-page></error-page>
将一个异常类型映射到一个特定的处理页面
使用Servlet过滤器和监听器
Servlet过滤器是一种web组件,它们拦截请求和响应,以便查看、提取或以某种方式操作客户机和服务器之间交换的数据。
将过滤器用于请求调度程序。Servlet 2.4在部署描述符中添加了一个新的元素,以便servlet程序员决定是否将过滤器(filters)应用于请求调度程序。元素的值可以是REQUEST(默认值)、FORWARD、INCLUDE和ERROR:
REQUEST。如果请求直接来自客户机则使用过滤器。
FORWARD。如果请求正由请求调度程序进行处理,表示与或相匹配的Web组件使用传递调用,则使用过滤器。
INCLUDE。只有在请求正由请求调度程序进行处理,表示与或相匹配的Web组件使用包含(include)调用时,才使用过滤器。
ERROR。只有在请求正由错误页面机制处理为一个与元素相匹配的错误资源时才使用过滤器。
REQUEST。如果请求直接来自客户机则使用过滤器。
FORWARD。如果请求正由请求调度程序进行处理,表示与或相匹配的Web组件使用传递调用,则使用过滤器。
INCLUDE。只有在请求正由请求调度程序进行处理,表示与或相匹配的Web组件使用包含(include)调用时,才使用过滤器。
ERROR。只有在请求正由错误页面机制处理为一个与元素相匹配的错误资源时才使用过滤器。
1. 必须实现的接口,该接口定义了
init() - 初始化
doFilter() - 响应
destroy() – 销毁
2. 过滤器的用途
a. 可以用在J2EE Web的任何存在请求和响应的任何地方
b. 可以应用在客户机和Servlet之间、Servlet之间和Servlet和JSP之间,以及所包括的每个JSP页面之间。
c. 日志、访问控制、编码转换、保存特定操作参数到Session对象。
3. 配置过滤器
< filter -mapping></filter-mapping>
4. 将一个过滤器映射到一个servlet
< filter -mapping>
<filter-name></ filter-name>
<servlet-name></servlet-name>
</filter-mapping>
5. 将一个过滤器映射到JSP文件
< filter -mapping>
<filter-name></ filter-name>
<url-pattern></url-pattern>
</filter-mapping>
6. 映射到多个Servlet文件
< filter -mapping>
<filter-name></ filter-name>
<servlet-name></servlet-name>
</filter-mapping>
< filter -mapping>
<filter-name></ filter-name>
<servlet-name></servlet-name>
</filter-mapping>
7. 配置过滤器的初始参数
<filter>
……
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
……
</filter>
Request Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法.
使用Servlet 监听器,共有8个监听器,分为三类:
1. Servlet Context事件监听器
ServletContextListener
ServletContextAttributeListener
2. HTTP Session监听器
HttpSessionListener
HttpSessionActivation
HttpSessionAttributeListener
HttpSessisonBindingListener
3. Servlet Request事件监听器
ServletRequestListener
ServletRequestAttributeListener