一 问题描述
在学习Java web的过程中,创建了Servlet类之后,需要到配置文件(或部署描述符文件)web.xml中配置Servlet的映射,于是就产生了疑问,像JSP、HTML文件可以直接根据路径名,例如http://localhost:8080/helloworld/index.jsp进行访问,那么为什么class文件(类的字节码文件)不能像http://localhost:8080/helloworld/WEB-INF/classes/com/company/app/HelloWorld.class这样去访问呢?
二 问题解决
原因如下:
- 最重要的一点,Oracle公司的Servlet规范定义了Java web应用的目录结构,自定义的Servlet类及其他类文件编译后必须放在项目根目录\WEB-INF\classes\,而WEB-INF目录下的文件浏览器无法直接访问,因此需要建立映射,使得浏览器可以通过该映射(本质是统一资源标识符)访问该类。
- 可以给同一个Servlet建立多个映射。.do结尾的Servlet都由ActionServlet来处理。(来自Tomcat与Java Web,孙卫琴,虽然可以这么用,但是实际中一个Servlet应该具备单一功能,建立多个映射不实用。可能有其他应用场景,目前不清楚)
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>com.company.servlet.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
- 简化访问Servlet的URL,使得用户更容易理解和记忆。同时,隐藏了Web应用的实现细节。