天天看点

使用 Docker 部署 Servlet/JSP 网站到 Tomcat 服务器的详细过程

作者:三阶

本文主要介绍不用Spring框架,用原生Servlet/JSP写一个简单的 Servlet/JSP 网站示例,包含了常用的注解和接口,并用Docker部署到TOMCAT服务器,理解这些,对JAVA WEB开发大有益处。

1. 配置

在 web.xml 文件中配置 Servlet 和过滤器:

<web-app>

<servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>com.example.MyServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>MyServlet</servlet-name>

<url-pattern>/myservlet</url-pattern>

</servlet-mapping>

<filter>

<filter-name>MyFilter</filter-name>

<filter-class>com.example.MyFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<listener>

<listener-class>com.example.MyHttpSessionListener</listener-class>

</listener>

</web-app>

2. Servlet(MyServlet.java)

@WebServlet("/myservlet")

public class MyServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 处理 GET 请求

String name = request.getParameter("name");

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<head>");

out.println("<title>Hello Servlet</title>");

out.println("</head>");

out.println("<body>");

out.println("<h1>Hello " + name + "!</h1>");

out.println("</body>");

out.println("</html>");

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 处理 POST 请求

doGet(request, response);

}

}

3. 过滤器(MyFilter.java)

@WebFilter("/*")

public class MyFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

// 初始化过滤器

}

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

// 处理请求和响应

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse resp = (HttpServletResponse) response;

HttpSession session = req.getSession();

String username = (String) session.getAttribute("username");

if (username != null) {

// 用户已登录,继续处理请求

chain.doFilter(request, response);

} else {

// 用户未登录,重定向到登录页面

resp.sendRedirect(req.getContextPath() + "/login.jsp");

}

}

@Override

public void destroy() {

// 销毁过滤器

}

}

4. 监听器(MyHttpSessionListener.java)

@WebListener

public class MyHttpSessionListener implements HttpSessionListener {

@Override

public void sessionCreated(HttpSessionEvent se) {

// HttpSession 创建时触发

}

@Override

public void sessionDestroyed(HttpSessionEvent se) {

// HttpSession 销毁时触发

}

}

5. JSP 页面(login.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<title>Hello JSP</title>

</head>

<body>

<h1>Hello <%= request.getParameter("name") %>!</h1>

</body>

</html>

以上是一个简单的 Servlet/JSP 网站示例,其中包含了常用的注解和接口。开发者可以根据需要进行修改和扩展。

下面介绍:部署 Servlet/JSP 网站到 Tomcat 服务器,可以使用 Docker 进行容器化部署。下面是详细的步骤:

1. 安装 Docker

首先需要在本地机器上安装 Docker。可以参考官方文档:https://docs.docker.com/engine/install/

2. 编写 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,内容如下:

# 基础镜像

FROM tomcat:9.0.50-jdk11

# 将本地文件夹挂载到容器

ADD target/my-webapp.war /usr/local/tomcat/webapps/

# 暴露端口

EXPOSE 8080

其中,tomcat:9.0.50-jdk11 是基础镜像,my-webapp.war 是编译后的 WAR 包,8080 是 Tomcat 的默认端口。

3. 构建 Docker 镜像

在终端中进入项目根目录,执行以下命令构建 Docker 镜像:

docker build -t my-webapp . (注意最后一个 . 点是代表当前目录)

其中,my-webapp 是镜像的名称,可以自定义。

4. 运行 Docker 容器

执行以下命令启动容器:

docker run -d -p 8080:8080 my-webapp

其中,-d 表示后台运行,-p 表示将容器的 8080 端口映射到主机的 8080 端口,my-webapp 是之前构建的镜像名称。

5. 访问网站

在浏览器中访问 http://localhost:8080/my-webapp/ 即可看到网站

以上是使用 Docker 部署 Servlet/JSP 网站到 Tomcat 服务器的详细过程,需要使用的工具是 Docker,需要编写 Dockerfile 文件,需要执行构建和运行命令。