Servlet

字数 457 · 2018-02-26

#java

从Eclipse新建一个Servlet Maven 项目(已过时)

打开Eclipse

File -> New -> Maven Project -> Next

Archetype 选择 maven-archetype-webapp -> Next

输入Group Id 和 Artifact Id -> Finish

补充pom.xml,在dependencies节点下添加

1
2
3
4
5
6
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

保存后Eclipse会自动Build,Build好后小红叉就消失了。

接着右击项目 -> Run As -> Run On Server

选择一个Tomcat -> Next

如果没有安装Tomcat,这时可以选择安装,稍等片刻,Tomcat就安装好了。

点击 Finish,就可以在Eclipce内置的浏览器中看到 Hello World! 了。

此时的项目的结构如下

1
2
3
4
5
6
7
8
9
10
11
.
├── pom.xml
├── src
│   └── main
│       ├── resources
│       └── webapp
│           ├── WEB-INF
│           │   └── web.xml
│           └── index.jsp
└── target
    └── ...

接着我们在./src/main 下新建个 java 文件夹
然后右键工程 New -> Servlet
填写包名和类名 -> Finish
重新运行项目即可访问这个Servlet了

用这种方式创建的工程是Servlet2的,所以 ./src/main/webapp/WEB-INF/web.xml中会如以下内容

1
2
3
4
5
6
7
8
9
10
<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <display-name>HelloServlet</display-name>
    <description></description>
    <servlet-class>com.example.hello.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>

非常繁琐的XML,不方便阅读也不方便重构,我们可以使用更简洁的Servlet3写法,删除这段xml,然后在相应的Servlet添加注解即可。

1
2
3
4
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    ...
}

项目结构

我们来看看此时的项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.
├── pom.xml
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── example
│       │           └── hello
│       │               └── HelloServlet.java
│       ├── resources
│       └── webapp
│           ├── WEB-INF
│           │   └── web.xml
│           └── index.jsp
└── target
    ├── classes
    │   └── ...
    ├── m2e-wtp
    │   └── ...
    └── test-classes

Tomcat 做了什么?

Tomcat 接收了一个请求并交给相应的Servlet处理。

Tomcat 还做了什么?

把jsp编译成Servlet,并像使用Servlet一样使用它。

Servlet做了什么?

1
2
3
4
5
6
7
8
9
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    ...
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    ...
}

Servlet接收了一个HTTP请求,并返回了一个字符串。

jsp做了什么?

jsp接收了一个HTTP请求,并返回了HTML。

小结

总之,使用 Maven+Servlet 来创建 webapp 非常的麻烦,不建议使用。

Tips

Artifact Id 小写 eg. maven, commons-math

参考资料

maven 官方的命名约定
java web 新手教程 - www.journaldev.com