# JAVA Web 工程,从创建到部署
# JAVA Web 工程,从创建到部署
本文记录在不使用框架的情况下(基本功别忘了),在 IDEA 中开发 Web 工程以及最后发布到服务器的过程
------
## 项目开发
### 创建项目
{{< image src="0731a.png" caption="JAVA Web 工程(`1.新建项目`)" >}}
{{< image src="0731b.png" caption="JAVA Web 工程(`2.设置目录`)" >}}
一般设置好项目文件夹所在,名字按需要起就可以,其他可以用缺省值
### 编辑 pom.xml 配置文件
```xml
4.0.0
com.fakeproject
demo1
1.0-SNAPSHOT
war
UTF-8
UTF-8
1.8
1.8
javax.servlet
javax.servlet-api
4.0.1
provided
```
这里使用 v1.8 版,是因为如果使用 v11 版,后面部署的时候会因为 CentOS7 官方 yum 源的 Tomcat 是 tomcat-7.0.76-16.el7_9.noarch 版,作为依赖安装的是 java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64,从而导致 “编译版本高于运行版本” 报错。
### 创建 webapp 目录
在 `/src/main` 下创建 webapp 目录
{{< image src="0731c.png" caption="JAVA Web 工程(`3.新建目录`)" >}}
因为前面在 pom.xml 配置文件中设置了打包方式为 war 包,`/src/main/webapp` 目录会自动带上 Web 资源目录(Web Resource Directory)标记
{{< image src="0731d.png" caption="JAVA Web 工程(`4.webapp`)" >}}
### 创建 Web.xml 配置文件
打开项目配置
{{< image src="0731e.png" caption="JAVA Web 工程(`5.项目设置`)" >}}
按图示创建 web.xml 配置文件
(注意看黄框部分,就是上一步骤,webapp 会被标记为 Web 资源目录的原因)
{{< image src="0731f.png" caption="JAVA Web 工程(`6.创建 web.xml 配置文件`)" >}}
注意按需要修改路径
{{< image src="0731g.png" caption="JAVA Web 工程(`7.修改 web.xml 路径`)" >}}
最后效果
{{< image src="0731h.png" caption="JAVA Web 工程(`8.效果`)" >}}
### 编写一个 HelloWorld 页面
```html
Index
Hello World !
```
### 配置 Tomcat(IDEA 开发测试环境)
{{< image src="0731j.png" caption="JAVA Web 工程(`9.添加 Tomcat`)" >}}
添加 “工件”
{{< image src="0731k.png" caption="JAVA Web 工程(`10.添加工件`)" >}}
开发测试选第二个,生产发布选第一个
{{< image src="0731l.png" caption="JAVA Web 工程(`11.选第二个`)" >}}
Application context 这里可以把路径缩减一下
{{< image src="0731m.png" caption="JAVA Web 工程(`12.简化一下路径`)" >}}
这里基本按默认就可以
{{< image src="0731n.png" caption="JAVA Web 工程(`13.默认设置`)" >}}
### 测试 HelloWorld
启动 Tomcat
{{< image src="0731o.png" caption="JAVA Web 工程(`14.启动测试`)" >}}
后台显示启动、部署成功
{{< image src="0731p.png" caption="JAVA Web 工程(`15.Tomcat 启动日志`)" >}}
浏览器正常显示 HelloWorld 页面
{{< image src="0731q.png" caption="JAVA Web 工程(`16.浏览器访问正常`)" >}}
### 编写一个 Servlet
```java
package com.fakeproject.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 设置编码
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
// 接收客户端发送过来的信息,输出到控制台
System.out.println("___接收到客户端发送过来的信息:" + req.getParameter("msg"));
// 向客户端返回消息
resp.getWriter().write("你好,Servlet !");
}
}
```
web.xml 添加一下 Servlet
```xml
HelloServlet
com.fakeproject.servlet.HelloServlet
HelloServlet
/hello_servlet
```
编写一个 jsp 测试
```jsp
<%-- src/main/webapp/hello_jsp.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
HelloJsp
Hello JSP !
```
index.html 加一下 jsp 页面的链接
```html
./hello_jsp.jsp
```
### 测试 Servlet
客户端发送信息
{{< image src="0731r.png" caption="JAVA Web 工程(`17.浏览器给服务器发送信息`)" >}}
服务端控制台按预期输出信息
{{< image src="0731s.png" caption="JAVA Web 工程(`18.服务器接收到信息`)" >}}
客户端正常接收到服务端返回的信息
{{< image src="0731t.png" caption="JAVA Web 工程(`19.浏览器接收到服务器返回的信息`)" >}}
------
## 打包成 war 包
打包之前,先把下面这几个地方的 JDK 都改成 1.8 版
{{< image src="0731u1.png" caption="JAVA Web 工程(`20.修改工程的 JDK 版本`)" >}}
{{< image src="0731u2.png" caption="JAVA Web 工程(`21.修改模块的 JDK 版本`)" >}}
{{< image src="0731u3.png" caption="JAVA Web 工程(`22.修改编译器的 JDK 版本`)" >}}
再清理一下
{{< image src="0731u.png" caption="JAVA Web 工程(`23.清理一下`)" >}}
进行打包
{{< image src="0731v.png" caption="JAVA Web 工程(`24.打包`)" >}}
用于发布到服务器,选第一个
{{< image src="0731w.png" caption="JAVA Web 工程(`25.选第一项`)" >}}
完成后,会在 target 目录下生成 demo1-1.0-SNAPSHOT.war 包(可以改名)
{{< image src="0731x.png" caption="JAVA Web 工程(`26.打包结果`)" >}}
------
## 发布到 Web 服务器
CentOS7 安装 tomcat
```bash
yum install -y tomcat
systemctl start tomcat
systemctl enable tomcat
systemctl status tomcat
```
防火墙开启 http 服务,并将 80 端口转发至 8080 端口,[参考](https://wangchujiang.com/linux-command/c/firewall-cmd.html)
```bash
firewall-cmd --list-all
firewall-cmd --add-service=http
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
firewall-cmd --runtime-to-permanent
firewall-cmd --list-all
```
将 war 包,上传到服务器 /var/lib/tomcat/webapps 目录
```bash
/var/lib/tomcat/webapps
└── demo1.war
```
浏览器访问正常,功能测试正常
{{< image src="0731y.png" caption="JAVA Web 工程(`27.部署测试结果`)" >}}
完工