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

一个简单的tomcat应用(HFSJ)

2016-08-12 12:52 309 查看

内容

本文是《Head First Servlet & JSP》的第一个例子。此为学习笔记。

这里是创建一个非常简单的tomcat应用,目的在于了解tomcat应用的目录结构、关键元素。

注:中文版有些笔误,比如java源代码中import大小写错误、web.xml中server首字母大写。

创建源代码目录结构

创建一个文件夹,比如名为project1,然后创建如下的子目录和文件。——这里的class是后面javac生成的。另外,建议不要像本文这样放到tomcat目录下面。

D:\tomcat\webapps\project1>tree /F
文件夹 PATH 列表
卷序列号为 5645-602F
D:.
├─classes
│      Ch1Servlet.class
│
├─etc
│      web.xml
│
├─src
│      Ch1Servlet.java
│
└─WEB-INF
└─classes

D:\tomcat\webapps\project1>


编写源文件

在文本编辑器下面编写即可。

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="heep://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<servlet>
<servlet-name>Chapter1 Servlet</servlet-name>
<servlet-class>Ch1Servlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Chapter1 Servlet</servlet-name>
<url-pattern>/Serv1</url-pattern>
</servlet-mapping>
</web-app>


Ch1Servlet.java

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Ch1Servlet extends HttpServlet {

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
PrintWriter out = response.getWriter();
java.util.Date today = new java.util.Date();
out.println("<html>"
+ "<body>"
+ "<h1 align=center>HF\'s Chapter1 Servelet</h1>"
+ "<br>"
+ today
+ "</body>"
+ "</html>");
}
}


编译java文件

在命令行下面执行javac命令:

javac -classpath ../../lib/servlet-api.jar -d classes src/Ch1Servlet.java


如果源代码有语法错误,这里就会显示出来。比如按照中文版在import的时候,用首字母大写的Servlet就会出错。

示例错误:

D:\tomcat\webapps\project1>javac -classpath ../../lib/servlet-api.jar -d classes src/Ch1Servlet.javasrc\Ch1Servlet.java:1: 错误: 程序包javax.Servlet不存在
import javax.Servlet.*;
^
src\Ch1Servlet.java:2: 错误: 程序包javax.Servlet.http不存在
import javax.Servlet.http.*;
^
src\Ch1Servlet.java:5: 错误: 找不到符号
public class Ch1Servlet extends HttpServlet {
^
符号: 类 HttpServlet
src\Ch1Servlet.java:7: 错误: 找不到符号
public void doGet(HttpServletRequest request,
^
符号: 类 HttpServletRequest
位置: 类 Ch1Servlet
src\Ch1Servlet.java:8: 错误: 找不到符号
HttpServletResponse response)
^
符号: 类 HttpServletResponse
位置: 类 Ch1Servlet
5 个错误

D:\tomcat\webapps\project1>


创建tomcat应用目录

创建tomcat应用目录,并把project1下的web.xml、以及javac生成的Ch1Servlet.class放到对应位置。

D:\tomcat\webapps\ch1>tree /F
文件夹 PATH 列表
卷序列号为 5645-602F
D:.
└─WEB-INF
│  web.xml
│
└─classes
Ch1Servlet.class

D:\tomcat\webapps\ch1>


验证

以上准备妥当之后,重启tomcat。——每次修改web.xml之后,都需要重新启动tomcat。

如果一切正常(web.xml语法正常),那么会有类似下面的日志:

信息: Deploying web application directory D:\tomcat\webapps\ch1
八月 11, 2016 8:15:03 下午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [205] milliseconds.
八月 11, 2016 8:15:03 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory D:\tomcat\webapps\ch1 has finished in 717 ms


如果web.xml有语法错误,则tomcat日志有提示信息,遵照修改即可。示例错误日志:

信息: Deploying web application directory D:\tomcat\webapps\ch1
八月 11, 2016 8:14:37 下午 org.apache.tomcat.util.digester.Digester fatalError
严重: Parse Fatal Error at line 15 column 3: 元素类型 "Servlet" 必须由匹配的结束标记 "</Servlet>" 终止。
org.xml.sax.SAXParseException; systemId: jndi:/localhost/ch1/WEB-INF/web.xml; lineNumber: 15; columnNumber: 3; 元素类型 "Servlet" 必须由匹配的结束标记 "</Servle
t>" 终止。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)


打开页面

浏览器输入URL(http://localhost:8080/ch1/Serv1),会显示预期结果。

如果按照中文版的web.xml,Servlet首字母大写了,则tomcat启动的时候不会有错误提示;但浏览器总是返回404。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat servlet