maven项目怎么写一个简单servlet,运行在tomca

主要内容

记录下第一次使用tomcat的踩坑过程,要达到的效果为能够在tomcat上运行一个war包,这个包里包含一个servlet

前置

知道tomcat是一个容器,然后采用多线程运行servlet

maven配置

由于servlet不是在jdk标准包里,所以首先要在pom.xml里面添加servlet的包依赖,版本自己选:

1
2
3
4
5
6
7
8
xml复制代码    <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:

1
2
3
xml复制代码    <build>
<finalName>hello</finalName>
</build>

maven打包默认是jar文件,将其修改成war:

1
2
3
4
xml复制代码    <groupId>groupid</groupId>
<artifactId>projectname</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

前三项都是自己设定的项目信息,只要在最后添加packaging一项就行,然后修改项目的结构,需要在src文件夹建立webapp这个包,其他两项java,resources都是已经存在的。最重要的是web.xml这个文件,这个之后再讲。

1
2
3
4
5
6
7
8
shell复制代码├─java
│ └─test
│ HelloWorld.java

├─resources
└─webapp
└─WEB-INF
web.xml

编写servlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
java复制代码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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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输入

1
shell复制代码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”修改成想要的端口即可。

总结

踩了一天坑

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%