J2EE
bin:存放各种平台下启动和停止 Tomcat 服务的脚本文件
conf:存放 Tomcat 服务器配置文件
lib:存放运行Tomcat 服务需要的 jar 文件
logs:存放 Tomcat 运行的日志文件
temp:存放 Tomcat 运行时的临时文件
webapps:存放允许客户端访问的资源
work:存放 JSP 生成的 Servlet
Tomcat 常遇到的异常: org.apache.catalina.LifecycleException,生命周期异常一.工作流程:
1、过滤器是服务端代码,用于拦截传入的请求和传出的响应。
2、监听、修改或者以某种方式处理正在客户端与服务器之间交换的数据流。
java8接口新特性: 例如:一个接口->20个实现类,不用20个都改。 default void test1(){ }二.Filter API:
1、init(FilterConfig cf),类似于 Servlet 的 init,只调用一次,FilterConfig 类似于 ServletConfig,获取当前 Filter 的基本信息。 <filter> <filter-name>test</filter-name> <filter-class>com.m.filter.TestFilter</filter-class> <init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param> </filter> System.out.println(cf.getInitParameter("charset")); 2、doFilter() 类似于 Servlet 的 service,过滤器的主要业务逻辑写在该方法中,多次调用,只要有请求、响应被捕获,就调用一次。 FilterChain:过滤器链,让请求或者响应继续向下传递。 3、destory() 类似于 Servlet 的 destory,当 Web 应用程序关闭时调用,只调用一次,释放资源。三.过滤器的应用:
- 对请求编码进行统一设置 - 屏蔽敏感词 (1) jsp <form action="word.do" method="post"> <table> <tr> <td>用户名: </td> <td><input type="text" name="username"></td> </tr> <tr> <td><input type="submit" value="提交"></td> </tr> </table> </form>(2)Filter
@WebFilter("/word.do") public class WordFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); String username = request.getParameter("username"); username = username.replaceAll("敏感词","***"); request.setAttribute("username",username); chain.doFilter(request,response); } @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("word.do1"); } @Override public void destroy() { System.out.println("word.do2"); } }(3) Servlet
@WebServlet("/word.do") public class TestServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("get1"); this.doPost(req, resp); System.out.println("get2"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = (String) req.getAttribute("username"); System.out.println(username); resp.setContentType("text/html;charset=UTF-8"); PrintWriter out = resp.getWriter(); out.print("进入了Servlet"); out.println(username); } }
旧值
ServletContext app = req.getServletContext(); String att = req.getParameter("att"); String key = req.getParameter("key"); String value = req.getParameter("value"); if("1".equals(att)) { app.setAttribute(key, value); }else if("2".equals(att)) { app.removeAttribute(key); }else if("3".equals(att)) { app.setAttribute(key, value); }Session监听绑定
实现在线用户统计的步骤 创建类实现HttpSessionBindingListener接口 在valueBound()和valueUnbound()方法中实现用户数量的统计 valueBound(HttpSessionBindingEvent arg0) { //用户对象存入session时自动调用 //用户数量加1 } valueUnbound(HttpSessionBindingEvent arg0) { //用户对象从session中删除时自动调用 //用户数量减1 }HttpSessionListener、HttpSessionBindingListener二者的区别
HttpSessionListener只需要设置到web.xml就可以监听整个应用中的所有session HttpSessionBindingListener必须实例化后放入某一个session中,才能监听 监听范围 HttpSessionListener设置一次就可以监听所有session HttpSessionBindingListener通常是一对一