前言:
在一次网页开发中,由于在开发工程中servlet的部署不当,导致整个网页都无法正常使用。起初以为是在myeclipse中项目的路径出现问题,后来通过逐步排查,发现是自己在使用myeclipse中创建的servlet路径问题,导致整个网页无法正常显示。
开发环境:操作系统: win10、IDE:Myeclipse、JDK:java1.8.0 服务器:tomcat
内容概要:
1、 不要直接copy复制把servlet文件Paste粘贴到项目中,谨记。
2、 在myeclipse中创建servlet文件时,要注意servlet的路径设置,这个直接影响到servlet的使用,甚至影响到整个网页的开发。
主要内容:
首先要明确一点,servlet的使用和web.xml文件是分不开的。
接下来,本文通过创建一个web项目和servlet文件讲解在myeclipse中开发web项目该如何创建和使用servlet.
首先创建一个web项目web1
web1的主要内容。从图中可以看见web1\WebRoot\WEB-INF文件夹中并没有web.xml文件
现在在web1项目中创建名为servlet1的servlet文件
当我们选择将servlet文件存储到其他位置时,会看到只能选择存储到web1\src文件夹(而非web1\WebRoot文件夹)中
当我们给servlet文件选择package包时,只有default package默认包。因此在servlet存储时选择创建一个新的包或使用默认包,因此servlet文件存储在web1\src\包名\ 中
然后是servlet的路径配置,要注意Mapping URL这一项,这一项是调用servlet文件的路径
下面是生成的servlet文件的代码
<web-app>
<servlet>
<servlet-name>servlet1</servlet-name>
<display-name>This is the display name of my J2EE component</display-name>
<description>This is the description of my J2EE component</description>
<servlet-class>web1.servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/servlet/servlet1</url-pattern>
</servlet-mapping>
</web-app>
其中/servlet/servlet1当使用url”/servlet/servlet1”时,tomcat就会调用web1.servlet1这个文件。从而实现servlet的调用。如果直接复制servlet文件或servlet的文件内容到自己的项目中,而web.xml文件中并没有该servlet文件的调用路径,是无法调用servlet文件的。
结论一:不要直接copy复制把servlet文件Paste粘贴到项目中,谨记。
以下项目为例,Blog\src\C存储的是servlet文件,Blog\WebRoot存储的是web项目的主要内容。
在Blog\WebRoot\login.jsp中,调用了servlet文件Blog\src\C\loginCheck.java,在web.xml文件中loginCheck.java的寻址代码为
<servlet-mapping>
<servlet-name>loginCheck</servlet-name>
<url-pattern>/servlet/loginCheck</url-pattern>
</servlet-mapping>
所以,在login.jsp文件中要用语句“servlet/loginCheck调用loginCheck.java文件。在项目中的效果为:
从两幅图对比可以知道,login.jsp跳转loginCheck.java导致网页进入了更深的一层,当使用loginCheck.java跳转到其他网页是会因为loginCheck在servlet1文件夹下,而导致路径问题更加复杂。解决问题的方法是将/servlet/loginCheck改成/loginCheck
修改后的结果为
即loginCheck可以通过相对路径调用和login.jsp同一个路径下的文件。
结论二:在myeclipse中创建servlet文件时,要注意servlet的路径设置,这个直接影响到servlet的使用,甚至影响到整个网页的开发。