编写基础的Servlet应用程序
1 Servlet
使用Servlet需要在pom.xml中引入以下依赖:
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
Servlet接口定义了以下5个方法
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
init、service和destroy方法属于servlet生命周期方法。servlet根据以下原则调用这三个方法:
- init:第一次请求Servlet时,Servlet容器就会调用这个方法。在后续的请求中,将不会再调用该方法。可以利用这个方法来编写一些应用程序初始化相关的代码。在调用这个方法时,Servlet容器会传递一个ServletConfig。
- service:每次请求Servlet时,Servlet容器都会调用这个方法。必须在这里编写要Servlet完成的相应代码。第一次请求Servlet时,Servlet容器会调用init和service,之后每次请求,不会再调用init,只会调用service方法。
- destroy:要销毁Servlet时,Servlet容器就会调用这个方法。它通常发生在卸载应用程序,或者关闭Servlet容器的时候,一般来说,可以在这个方法中编写一些资源清理相关的代码。
Servlet中的另外两个方法是非生命周期方法:getServletInfo和getServletConfig。必须注意的一点是线程安全性。一个应用程序中的所有用户将共用一个Servlet实例。
2 编写Servlet示例
确保在pom.xml文件中已经引入servlet-api依赖包。项目目录结构如下:
package com.servlet.demo;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "MyServlet", urlPatterns = {"/my"})
public class MyServlet implements Servlet {
private transient ServletConfig servletConfig;
@Override
public void init(ServletConfig config) throws ServletException {
this.servletConfig = config;
}
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
String servletName = servletConfig.getServletName();
res.setContentType("text/html");
PrintWriter writer = res.getWriter();
writer.print("<html><head></head><body>Hello from " + servletName + "</body></html>");
}
@Override
public String getServletInfo() {
return "My Servlet";
}
@Override
public void destroy() {
}
}
上述使用了@WebServlet注解,所以需要在web.xml中配置允许使用注解,web.xml 的顶层标签 中有一个属性:metadata-complete,该属性用于指定当前 web.xml 是否是完全的。若该属性设置为 true,则容器在部署时将只依赖 web.xml,忽略所有的注解。若不配置该属性,或者将其设置为 false,则表示启用注解支持。配置如下所示:
<!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
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0" metadata-complete="false">
<!-- metadata-complete取值为true,表示关闭注解支持 -->
<!-- metadata-complete取值为false,表示启用注解支持 -->
<display-name>Archetype Created Web Application</display-name>
</web-app>
现在,就可以运行Servlet项目了。
3 配置Servlet容器
- 点击Add Configuration
- 点击 add new
- tomcat选择local
- 选择Application Server
- 选择本地的tomcat目录
- 更改如下两个端口号(如果没有被占用可以不用更改)
- 配置Deployment
- 更改一下application context
然后点击ok。
运行项目
依次按照下图顺序点击运行:
运行成功后如下图所示,有一个对钩
然后浏览器中输入如下所示:
【Java后台】从零开始的Java后台开发(二)【Java后台】从零开始的Java后台开发(一)