A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 巴拿马的海岸线 初级黑马   /  2019-3-12 11:28  /  806 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

先看代码块: 

  <servlet>
    <servlet-name>Controller</servlet-name>
    <servlet-class>com.ricardo.login.demo.web.controller.UserController</servlet-class>//包名+类名
  </servlet>

  <servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/login</url-pattern>//用户输入的或者浏览器跳转的路径
  </servlet-mapping>
<servlet></servlet>的作用是在服务器加载时将对应的Servlet加载,如果没有在web.xml中声明的Servlet是不能够正常进行访问的。其中的<servlet-name>Controller</servlet-name>看上去好像是Servlet的名称 ,其实只是Servlet的一个内部映射名称而已,<servlet-class>com.ricardo.login.demo.web.controller.UserController</servlet-class>是Servlet类的真实路径( 包名+类名 ),当我们直接将类名+包名交给用户访问的时候,因为名称相对比较长,用户比较容易出错,由于是直接写包名+类名,就会很容易将具体的访问路径暴露出来,这样,安全性就会大大的降低。相反,正是由于有了一个内部映射这样的机制,当我们修改内部的代码,改变类的路径的时候,只要保证映射的名称正常,对用户来说没有任何影响。

<serlvet-mapping></servlet-mapping>正是基于这样的原因而产生,其中<serlvet-mapping></servlet-mapping>中的<servlet-name></servlet-name>必须和<servlet></servlet>中的<servlet-name></servlet-name>保持一致,<url-pattern>/login</url-pattern>中的/login才是用户真正访问的路径,也就是浏览器通过该名称找到Servlet真正的路径!

  整一个的解析过程如下:

  当用户在浏览器输入一个url,如 http://localhost:8080/login时,服务器将其提交到Tomcat,Tomcat根据用户提交的url在web.xml中进行查找,首先是在<servlet-mapping>中查找,当找到<url-pattern>中有跟用户输入的url匹配时,获取mapping中的<servlet-name>中的值,这里是Servlet-Request,并且根据获取得到的值在<Servlet>中查找一个<servlet-name>与其匹配的值,然后获取<servlet-class>中的确切的类,生成Servlet对象,然后进行访问。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马