文章目录
思路:新建一个java project,通过配置相关路径等熟悉J2ee tomcat servlet
来自于how2java
步骤1:创建一个单纯的JAVA项目:
- File->New->Other->Java->Java Project ;输入名称j2ee;
- 不要通过dynamic web project 的方式,它会把各种tomcat,相关配置文件的生成都自动做掉了。 而这些细节,恰恰就是你需要学习和掌握的。
步骤2: 导入servlet jar包:
- servlet-api.jar 包位于 D:\tomcat\lib\servlet-api.jar
- 右键点击项目 -> properties -> Java Build Path ->Libraries -> Add External JARs
步骤3 :编写HelloServlet
- 创建一个普通类
ctrl+n
,自带包名j2ee,不要使用,让其置空 - 为什么
- 我们通过
http://127.0.0.1/hello
访问该类,在浏览器中输入地址提交数据的方式是GET:
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response){
try {
response.getWriter().println("<h1>Hello Servlet!</h1>");
response.getWriter().println(new Date().toLocaleString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
步骤4 :编写web.xml:
-
首先在j2ee下创建目录web,接着再创建目录web/WEB-INF,然后在WEB-INF目录中创建 web.xml
-
web.xml提供路径与servlet的映射关系
把/hello这个路径,映射到 HelloServlet这个类上 -
<servlet>
标签下的<servlet-name>
与<servlet-mapping>
标签下的<servlet-name>
必须一样 -
<servlet-name>
与<servlet-class>
可以不一样,但是此处为了便于理解与维护,一般都会写的一样。 一目了然
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
- 通过hello,访问HelloServlet,HelloServlet对应
servlet-class
的位置,所以我们把HelloServlet.java不放在包里 - 是吗
步骤5:指定项目输出到classes目录
首先在WEB-INF下创建classes目录把项目的class文件输出由原来的 j2ee/bin 设置到 j2ee/web/WEB-INF/classes下
- 项目右键->properties->Java Build Path->Source->右下角的 Brower-> 指定位置是 j2ee/web/WEB-INF/classes。
- 为什么要有这一步? 在ecilpse中JAVA Project默认输出的class是在bin目录下,但是tomcat启动之后,在默认情况下,不会去bin目录找这些class文件,而是到WEB-INF/classes这个目录下去寻找。 所以通过这一步的配置,使得eclipse的class文件输出到WEB-INF/classes目录下,那么这样就和tomcat兼容了。
步骤 6 : 配置tomcat的server.xml 中的<context>
在 <Host name=“localhost” 下面加一句
<Context path="/" docBase="D:/project/j2ee/web" debug="0" reloadable="false" />
path="/" 就表示直接通过 http://127.0.0.1/hello 就可以访问网页了。
此处考虑:
<Context path="/j2ee" docBase="D:/project/j2ee" debug="0" reloadable="false" />
http://localhost/j2ee/hello``http://localhost/j2ee/web/hello
都无法访问到HelloServlet;
而对于
<Context path="/j2ee" docBase="D:/project/j2ee/web" debug="0" reloadable="false" />
http://localhost/j2ee/web/hello
可以访问
而另外一个结构的web应用:
即可访问:二者结构差异:
左边build里是class文件,而右边的class在web/web-inf/classes里
步骤 7 : 删除tomcat webapps下的ROOT目录
在上一步部署web的时候server.xml中的path 配置为 “/” 与 webapps下的ROOT目录冲突了
- 如果path配置的是
/j2ee
不冲突
总结:
整个请求的流程:url请求->web.xml解析->定位为helloservlet->去配置目录的/classes下找类->执行后返回结果