您的位置:首页 > 运维架构 > Tomcat

tomcat的一些知识点

2016-07-18 12:29 274 查看
首先,来张图简单说明下:



首先说一个容易混淆的“/”的问题,在网页中“/”表示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);


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

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


最后说下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>


注释出为添加的核心代码,大于0的数字时表示启动顺序。数值越小,越先启动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat servlet