一个简单的tomcat应用(HFSJ)

内容

本文是《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.java
src\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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值