javaEE-Tomcat

    技术2022-07-10  108

    01Web 应用服务器:

    Tomcat、Jboss、webloic、Jetty

    J2EE

    01Tomcat

    bin:存放各种平台下启动和停止 Tomcat 服务的脚本文件

    conf:存放 Tomcat 服务器配置文件

    lib:存放运行Tomcat 服务需要的 jar 文件

    logs:存放 Tomcat 运行的日志文件

    temp:存放 Tomcat 运行时的临时文件

    webapps:存放允许客户端访问的资源

    work:存放 JSP 生成的 Servlet

    Tomcat 常遇到的异常: org.apache.catalina.LifecycleException,生命周期异常

    02Servlet

    三种创建方式,GenericServlet 三大域:application,request,session Servlet 可以完成以下功能: - 创建并返回基于客户端请求的动态 HTML 页面。 - 与数据库进行通信。

    03过滤器(Filter)

    -对请求和响应进行统一处理 -对请求进行日志记录和审核 -对数据进行屏蔽和替换 -对数据进行加密和解密

    一.工作流程:

    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); } }
    4.Open session in view    (Struts2)
    (1)可以不必使用数据库连接池 (2)优势是提高查询的效率 (3)劣势是在高并发的情况下,会导致连接数不够用 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("初始化数据库连接"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("打开数据库连接Connection"); chain.doFilter(request,response); System.out.println("关闭数据库连接"); } /** Test1Filter-init TestFilter-init Servlet-init Test1Filter打开数据库连接Connection TestFilter打开数据库连接Connection Servlet-service TestFilter关闭数据库连接 Test1Filter关闭数据库连接 */

    04监听器(listener)

    Servlet当中的三大域

    Application

    (1)1对多的监听,彻底和代码解耦 (2)Application ①监听作用域本身 1)容器加载的时候调用application监听的contextInitialized方法 2)容器在关闭的时候,同时调用contextDestroyed方法 3)可以在监听当中获取application ②监听作用域的元素 1)可以监听到作用域当中所有的元素的增减和修改 2)监听到的修改的元素的值是 % 旧值%

    旧值

    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

    ①监听作用域本身 1)session的创建是第一次获取session后,sessionCreated监听执行 2)销毁 a.容器关闭 b.手动销毁 c.时间到期

    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通常是一对一
    Processed: 0.015, SQL: 9