tomcat知识点总结

来源:互联网 发布:霾表 知乎 编辑:程序博客网 时间:2024/05/19 23:26

转载:http://blog.csdn.net/lengjinghk/article/details/51940980





首先说一个容易混淆的“/”的问题,在网页中“/”表示tomcat根目录,即webapps,而在web.xml中“/”表示项目根目录,后者之于前者多了个项目名字。

接下来,说一个安全目录的问题。
web项目的的WebRoot文件夹下,有个WEB-INF文件夹,它对外屏蔽,不允许通过路径名直接访问,如果非要访问,则需在web.xml中配置servlet,servlet的一个好处就是名字可以随便取,对外隐藏了路径,提高了安全性,所以一般不允许外面随便访问的资源一般都放在WEB-INF文件夹中。

接下来说下重定向和转发的知识点。
如上图所示:重定向:浏览器共发了两次请求,第一向tomcat请求资源,返回资源地址,第二次再发一次请求,返回所请求的资源。值得注意的是,在第二次的请求中服务器拿不到第一次请求的request对象,request信息会丢失。
重定向在servlet重的核心代码如下:

    //重定向--法1    String path = "/helloWeb/jsps/res.jsp";    //resp.sendRedirect(path);    //重定向---法2    //resp.setStatus(302);//重定向    resp.setHeader("Location", path);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

转发:浏览器共发一次请求,servlet将请求资源(request,response)转发给目标资源,这样不会造成信息的丢失。在servlet中核心代码如下:

        //转发        String path = "/jsps/res.jsp";        RequestDispatcher rd = req.getRequestDispatcher(path);        rd.forward(req, resp);
  • 1
  • 2
  • 3
  • 4

最后说下servlet生命周期的问题
servlet最初被访问时,会执行构造方法init()方法和service()方法一次。以后再访问时,构造方法和init()方法将不再执行,只执行service方法。关闭tomcat服务器是,destory()方法将被执行。即从始至终访问的是同一个servlet对象。

值得注意的是。加入同一个servlet类在web.xml中配了多个路径,当访问不同路径名时,servlet对象不同。

还有个小知识点值得一提,以上述方式只有servlet第一次被访问时,servlet对象才会被创建出来放入池中。但实际应用中,可能遇到这样的需求,要求在tomcat服务器启动时就创建出servlet对象,并将资源载入内存(如敏感词过滤,要求服务器一启动就将数据库的敏感词载入内存),关于这个,可以配置web.xml。
核心示例代码如下:

<servlet>    <servlet-name>two</servlet-name>    <servlet-class>cn.hncu.servlets.FirstServlet</servlet-class>    <!--       <load-on-startup>10</load-on-startup>     -->  </servlet>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注释出为添加的核心代码,大于0的数字时表示启动顺序。数值越小,越先启动。