例:response.sendRedirect(nextPage);
19、MVC编程模型
20、Servlet中使用JNDI数据源访问数据库 步骤:
(1)、在Web工程目录下新建META-INF目录,其中放一个context.xml文件,内容是:
type=\ //绑定资源的类型 maxActive=\ //连接池最大连接数 maxIdle=\ //最大空闲连接数 maxWait=\ //请求数据源等待时间,-1代表无限等待 username=\password=\ driverClassName=\ url=\>
type=\ //绑定资源的类型 maxActive=\ //连接池最大连接数 maxIdle=\ //最大空闲连接数 maxWait=\ //请求数据源等待时间,-1代表无限等待 username=\password=\ driverClassName=\ url=\>
(2)、取得数据库连接
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(\);
Connect con = ds.getConnection();
21、会话管理。为什么使用Session.
(1)、从同一客户打开浏览器连接到服务再到客户关闭浏览器可称为一次会话 (2)、一个客户向服务器发出请求然后服务器返回响应,连接就被关闭了。在服务器端不保
留连接的有关信息.因此当下一次连接建立时,服务器已没有以前连接的信息了,无法判断这一次连接和以前的连接是不是属于同一客户发出的。在实际应用中,客户进行一个事务性的操作可能需要对服务器进行好几次连接,这时维护前几次连接的状态就非常重要。
(3)、服务器必须能够区分不同的客户,而且还要有为每一个客户存储数据的方法。
22、会话管理。实现Session的三种方式
1、Cookie
(1)浏览器请求,服务器创建Cookie对象,设置Cookie名称、值和最大时效
Cookie userName = new Cookie(\, \); userName.setMaxAge(60 * 60 * 24 * 365);
Cookie password = new Cookie(\, \); (2)将Cookie对象使用HTTP响应报头返回给客户端
response.addCookie(userName);
response.addCookie(password);
(3)从客户端读取cookie信息。取得cookie数组,遍历数组. Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) { String username;
if (cookies[i].getName.equals(“username”)) String username = cookies[i].getValue(); //到数据库查询是否为该用户。 }
}
2、HttpSession
(1)获得当前请求的Session对象,调用getSession方法
HttpSession session = request.getSession();
(2)查找与会话相关联的信息,调用getAttribute方法,并转为相对应的类型。 Counter counter = (Counter) session.getAttribute(\); (3)查看从session得到的结果。
如果为null,则把new一新的对象调用setAtrribute方法存放入session中 如果不为null,则可直接对结果(对象)进行操作;
if (counter == null) {
counter = new Counter(1);
session.setAttribute(\, counter); } else {
counter.add(); }
3、URL重写
当浏览器不支持cookie或在用户禁用cookie的情况下,当客户第一次请求服务器时服
务器在返回资源的路径后添加多一个额外数据,即Jsessionid = xxx,当用户再次发送请求时把这个Jsession数据一同发送给服务器,服务器再根据这个Jsession值即可与特定的用户相关联,这称为“URL重写”
String pageURL = \; pageURL = response.encodeURL(pageURL);
这样处理后,pageURL = /serv-guides/state/session;jsession=xxxxxxxxx;
23、过滤器
过滤器是一些Web应用程序组件,可以绑定到一个Web应用程序中。但是与其他Web应用程序组件不同的是,过滤器是\链\在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发的响应信息返回到客户前访问这些响应信息。这种访问使得过滤器可以检查并修改请求和响应的内容。
24、过滤器编程,示例一:非法用户登陆
(1)继承于HttpFilter类,并覆盖doFilter()方法
public class SessionFilter extends HttpFilter { @Override
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain) throws IOException, ServletException { //不符合条件的,响应客户转向指定的页面
response.sendRedirect(\); //符合条件的,转向客户所要请求页面 chain.doFilter(request, response);
}
(2)web.xml配置
25、过滤器编程,示例二:字符编码过滤
(1)继承于HttpFilter类,并覆盖doFilter()方法
public class CharacterEncodingFilter extends HttpFilter {
@Override
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String charset = getInitParameter(\); if (charset == null) { charset = \; }
//设计请求字符编码
request.setCharacterEncoding(charset); //转向客户所要请求页面
chain.doFilter(request, response); } }
(2)web.xml配置
26、监听器
(1)ServletRequestListener
(2)HttpSessionListener (3)ServletContextListener
a. 这三个监听器接口,分别监听Servlet中3种对象(ServletContext、HttpSession
及ServletRequest)的创建和销毁。
b. 这三个接口中分别有监听该对象创建和销毁事件的方法
27、ServletContext事件监听器
1、对于应用程序而言得管理资源或保存状态 2、有二种类型的事件监听器:
(1)ServletContextListener(以下是该监听器的方法) contextDestroyed(ServletContextEvent sce) contextInitialized(ServletContextEvent sce)
(2)ServletContextAttributeListener(以下是该监听器的方法) attributeAdded(ServletContextAttributeEvent scab) attributeRemoved(ServletContextAttributeEvent scab) attributeReplaced(ServletContextAttributeEvent scab)
28、HttpSession事件监听器
1、管理从同一个客户端或用户向一个Web应用程序发出的一系列请求相关的 状态或资源;
2、有二种类型的事件监听器:
(1)HttpSessionListener(以下是该监听器的方法) sessionCreated(HttpSessionEvent se) sessionDestroyed(HttpSessionEvent se)
(2)HttpSessionAttributeListener(以下是该监听器的方法) attributeAdded(HttpSessionBindingEvent se) attributeRemoved(HttpSessionBindingEvent se) attributeReplaced(HttpSessionBindingEvent se)
29、ServletRequest事件监听器
1、管理整个request生命周期的状态 2、有二种类型的事件监听器:
(1)ServletRequestListener(以下是该监听器的方法) requestDestroyed(ServletRequestEvent sre) requestInitialized(ServletRequestEvent sre)
(2)ServletRequestAttributeListener(以下是该监听器的方法) attributeAdded(ServletRequestAttributeEvent srae) attributeRemoved(ServletRequestAttributeEvent srae) attributeReplaced(ServletRequestAttributeEvent srae)
30、监听器编程
1、监听器类,实现ServletRequestListener接口,覆盖两个方法。
public class IpLogListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent sre) { }
public void requestInitialized(ServletRequestEvent sre) { ServletRequest request = sre.getServletRequest(); System.out.println(request.getRemoteAddr()); } }
2、web.xml配置