共享数据的对象:
HttpServletRequest
代表一次请求
HttpSession
代表和一个客户端相关的一系列请求/响应循环
ServletContext
代表整个web应用
共享数据的操作方法:
setAttribute(String name,Object o)
getAttribute(String name):Object o
removeAttribute(String name);
监听器种类:
ServletRequestListener
HttpSessionListener
ServletContextListener
监听器编程步骤:
1 编写监听器类,实现上述接口及其中的两个方法
2 将监听类配置给web容器
<listener>
<listener-class>....</listener-class>
</listener>
过滤器:
过滤需要的信息,然后对过滤后的信息再加工
javax.servlet.Filter
void init(FilterConfig filterConfig)
获取web容器传递进来的一些初始化参数
getInitParameter(String name) :String value
getInitParameterNames() :Enumeration names
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
参数request和response是当前过滤器所拦截到的请求/响应
FilterChian负责将处理完的请求和相应传递给真正的资源
chain.doFilter(req,resp)
void destroy()
过滤器的使用:
1 实现filter接口编写过滤器类
2 配置过滤器给web容器
<filter>
<filter-name>filter1</filter-name>
<filter-class>filter.basic.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/servlet1</url-pattern>
</filter-mapping>
给一组Servlet配置某一个过滤器:
要求一组servlet的url-pattern中必须包含统一前缀
如: <url-pattern>/redi/servlet1</url-pattern>
<url-pattern>/redi/servlet2</url-pattern>
配置filter时,指定统一前缀的模糊匹配方式
如: <url-pattern>/redi/*</url-pattern>
filter的作用:
记录日志
中文乱码处理
处理权限
/manager/...
/user/...
Servlet ServletConfig
GenericServlet
HttpServlet
一个类自身具有的一个方法,没有实际实现。而是调用其他类的同名方法执行
代理模式:Proxy
两个类之间有直接、间接的关系
委托模式:Delegate
两个类没有任何关系
HttpServletRequest.getContextPath();
===>/应用名
LoginServlet
big5
utf-8
gb2312
gbk
gb18030
中文乱码:
1 客户端提交信息时,
1)
form表单中必须使用method=post
处理类中request.setCharacterEncoding("gbk");
2)
form可以用method=get方式提交/热链接提交参数
处理类中必须手动对获取到的参数编码
String name = req.getPameter("name");
name = new String(name.getBytes("iso-8859-1"),"gbk");
2 数据库在安装时需指定支持中文
3 服务器端响应信息给客户端时
response.setCharacterEncoding("gbk");
服务器回显信息给客户
out.println("--------");
filter在显示信息之后,继续在客户端的页面中追加某些内容
extraServlet---->ExtraFilter ---->HelloServlet
---->CharacterEncodingFilter
Filter
servlet
Filter
CharArrayWriter
StringWriter
内部具有缓冲区
输出方式是把信息输出到当前对象内部的缓冲区中
toString()把内部缓冲区中的数据取出来