主要内容
记录下第一次使用tomcat的踩坑过程,要达到的效果为能够在tomcat上运行一个war包,这个包里包含一个servlet
前置
知道tomcat是一个容器,然后采用多线程运行servlet
maven配置
由于servlet不是在jdk标准包里,所以首先要在pom.xml里面添加servlet的包依赖,版本自己选:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
复制代码
一定要注意的是,scope填privided, 表示在最后打包的时候不将这个依赖放进去,因为在运行的时候都是使用tomcat的自带包。
然后将打包名称改成hello,这样最后会生成hello.war:
<build>
<finalName>hello</finalName>
</build>
复制代码
maven打包默认是jar文件,将其修改成war:
<groupId>groupid</groupId>
<artifactId>projectname</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
复制代码
前三项都是自己设定的项目信息,只要在最后添加packaging一项就行,然后修改项目的结构,需要在src文件夹建立webapp这个包,其他两项java,resources都是已经存在的。最重要的是web.xml这个文件,这个之后再讲。
├─java
│ └─test
│ HelloWorld.java
│
├─resources
└─webapp
└─WEB-INF
web.xml
复制代码
编写servlet
package test;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
private String message; //unsafe
@Override
public void init() throws ServletException {
message = "Hello World";
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println(message);
}
@Override
public void destroy() {
super.destroy();
}
}
复制代码
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>test.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web-app>
复制代码
前面两项的意思我也不太懂,不过我们一般只需要关注web-app这个标签下的内容,servlet-name可以自己随便指定,指定之后下面的配置都用这个名称来指代目标servlet,上面这个配置是用Hello指代test.HelloWorld这个实现了Servlet接口的类,注意包名带上。下面有一项url-pattern,表示你想让用户使用什么样的地址可以访问到这个servlet。
运行
上面都写好了之后,maven命令clean,compile, package三连,生成了一个hello.war,将这个文件放在tomcat的webapps目录下,然后进入到tomcat的bin文件夹里面,cmd输入
startup
复制代码
然后浏览器输入localhost:8080/hello/Hello就可以看到servlet返回的信息了,其中hello是war文件的名称,后面的/Hello就是url-pattern的值,当然也可以设置成通配符,让其他url也能够连接到这个servlet
可能出现的问题
乱码
tomcat的输出按照目标系统语言,所以有可能乱码,解决方法,将tomcat下conf/logging.properties中java.util.logging.ConsoleHandler.encoding = UTF-8改成= GBK
端口被占用
这时候要修改tomcat的端口,将conf/server.xml里的Connector port="8080"修改成想要的端口即可。
总结
踩了一天坑
近期评论