一个简单的tomcat应用(HFSJ)
来源:互联网 发布:监测数据造假怎么举报 编辑:程序博客网 时间:2024/06/07 06:10
内容
本文是《Head First Servlet & JSP》的第一个例子。此为学习笔记。
这里是创建一个非常简单的tomcat应用,目的在于了解tomcat应用的目录结构、关键元素。
注:中文版有些笔误,比如java源代码中import大小写错误、web.xml中server首字母大写。
创建源代码目录结构
创建一个文件夹,比如名为project1,然后创建如下的子目录和文件。——这里的class是后面javac生成的。另外,建议不要像本文这样放到tomcat目录下面。
D:\tomcat\webapps\project1>tree /F文件夹 PATH 列表卷序列号为 5645-602FD:.├─classes│ Ch1Servlet.class│├─etc│ web.xml│├─src│ Ch1Servlet.java│└─WEB-INF └─classesD:\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 { ^ 符号: 类 HttpServletsrc\Ch1Servlet.java:7: 错误: 找不到符号 public void doGet(HttpServletRequest request, ^ 符号: 类 HttpServletRequest 位置: 类 Ch1Servletsrc\Ch1Servlet.java:8: 错误: 找不到符号 HttpServletResponse response) ^ 符号: 类 HttpServletResponse 位置: 类 Ch1Servlet5 个错误D:\tomcat\webapps\project1>
创建tomcat应用目录
创建tomcat应用目录,并把project1下的web.xml、以及javac生成的Ch1Servlet.class放到对应位置。
D:\tomcat\webapps\ch1>tree /F文件夹 PATH 列表卷序列号为 5645-602FD:.└─WEB-INF │ web.xml │ └─classes Ch1Servlet.classD:\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" 必须由匹配的结束标记 "</Servlet>" 终止。 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
- 一个简单的tomcat应用(HFSJ)
- 浅析Tomcat原理(一个简单的web应用服务器)
- Tomcat工作原理(一)一个简单的Web应用
- 自己写的一个简单的LBS应用 GoogleMap与Tomcat 服务器
- tomcat配置及使用(环境变量设置及测试,一个简单的web应用实例)
- tomcat配置及使用(环境变量设置及测试,一个简单的web应用实例)
- ajax的一个简单应用
- 一个简单的AJAX应用
- 一个简单的flex应用
- regex的一个简单应用
- 一个http的简单应用
- BitSet的一个简单应用
- 一个简单的小黄鸡应用
- 一个简单的ant应用
- 一个简单的Struts2应用
- 一个简单的express应用
- 自己模拟的一个简单的tomcat
- 一个简单的tomcat部署方案
- 分数类(雏形)
- eclipse智能提示与常用快捷键
- Codeforces Round #367 (Div. 2) C. Hard problem
- Memcache 缓存
- Python函数可变参数* args及**kwargs 应用
- 一个简单的tomcat应用(HFSJ)
- Doxygen使用学习(一)------Doxygen的简单注释格式
- jQuery性能优化建议
- group by与distinct效率分析及优化措施
- 百度查到网页违规代码修改好后竞价账户一直审核不通过,怎么办?
- Linux数据流重定向
- Codeforces Round #367 (Div. 2) [B] Interesting drink
- Doxygen使用学习(二)------Doxygen的内部支持的markdown语法
- HTTP POST GET 本质区别详解