# 前后台通讯 - 前台发送数据到后台

# 一. idea 中建立 Maven 项目

# 1. 在 Idea 中配置 maven

  • 打开 Idea,点击 File,然后点击 Settings,进入设置,或者直接按 Ctrl+Alt+S 进入设置

  • 先在左上角的搜索框输入 maven,找到 maven 后单击,然后在右边的 maven home path 的右边选择你的 maven 安装路径,选择到根目录就好了,然后点击确定,具体步骤看下图:

  • Local repository 是 maven 的 本地仓库,默认路径是 C:\Users\Administrator.m2\repository,可以使用默认路径也可以在 settings.xml 中配置本地 maven 仓库,看自己需要,一般在 settings.xml 中配置好了这里会自动检测你在 settings.xml 中配置的仓库路径 ,具体步骤如下图:

# 2. 在 Idea 中创建 maven 项目

  • 点击 File,选择 New,再点击 Project

  • 建立 maven 工程,具体看图,别选错 webapp 了

  • 接下来输入各类名称,填完后直接 next 下一步

  • 配置 maven 信息,具体操作如下图:

  • 添加配置 DarchetypeCatalog=internal,添加原因:每次创建 maven 项目时, IDEA 要使用插件进行创建,这些插件当你创建新的项目时,它每次都会去中央仓库下载,这样使得创建比较慢。所以在创建 maven 项目时,应该让它找本地仓库中的插件进行项目的创建。

DarchetypeCatalog=internal

# 3. 完善 maven-web 项目模板

  • 第一次加载 maven 项目比较慢,等待右下角的进度条加载结束,下面是刚建好的 maven-web 项目模板

  • 上面的项目不完整,不能满足我们的开发需要,所以需要我们手动建设一些文件夹,需要兴建的文件夹如下,以下是 maven 项目的标准目录结构:
    src/main/java
    src/main/resources
    src/test/java
    src/test/resources
    下面来构建目录,在 main 上右击 New->Directory 新建 java 文件夹和 resources 文件夹
    在 src 目录上右击 New->Directory 新建 test 文件夹
    在 test 目录上右击 New->Directory 新建 java 和 resources 文件夹
    下面只演示一个,其余类似

  • 接下来就是把新建立的文件夹进行关联了,看清楚关联对象,关联错了就得重新关联,这一定不能出错,关联方法如下图。
    src/main/java 关联为 Sources Root
    src/main/resources 关联为 Resources Root
    src/test/java 关联为 Test Sources Root
    src/test/resources 关联为 Test Resources Root

  • 以下是关联之后完整的 maven-web 项目的目录,配置完成

# 二。编写前端页面 html,用户提交信息

  • acion 对应创建的 Serlvet 类,method 使用 doPost 方法(见第三部分 java 代码)

  • 代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <center>
    <h1 style=color:green;size="20">userinfo</h1><br>
    <form action="LoginServlet" method="post">
    username: <input type="text" name="username"><br><br>
    hometown: <input type="text" name="hometown"><br>
    <input type="submit" value="Login">
    </form>
    </center>
    </body>
    </html>
  • 效果如图:(用户输入信息后点击 Login 登录)

# 三。创建 Serlvet 类,并在 main 函数中嵌入 Tomcat 代码

# 1. 在 pom.xml 中导入 Servlet 依赖,注意代码放在 <dependencys></dependencys > 之间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!--加入servlet依赖(servlet的jar)-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--jsp的依赖(jsp相关的jar加进来)-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>

# 2. 创建 Serlvet 类(LoginSerlvet)实现 HttpServlet 接口

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
26
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException; //注意要导入Serlvet依赖
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

req.setCharacterEncoding("UTF-8");

String username = req.getParameter("username"); //对应html代码中input的name属性
String hometown = req.getParameter("hometown");

resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();

System.out.println("用户名:"+username);
System.out.println("籍贯:"+hometown);
}
}

# 3. 在 pom.xml 中导入 Tomcat 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.12</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>9.0.46</version>
</dependency>

# 4. 建立一个测试类,在 main 函数中嵌入 Tomcat 代码

  • 使用 main 函数启动,默认加载 webapp 下的 index.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.apache.catalina.Context;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;
import java.io.File;

public class Login {
public static void main(String[] args) throws Exception {
Tomcat tomcat = new Tomcat();
tomcat.setPort(Integer.getInteger("port", 8080));
tomcat.getConnector();
// 创建 WebApp
Context context = tomcat.addWebapp("", new File("src/main/webapp").getAbsolutePath());
WebResourceRoot resources = new StandardRoot(context);
resources.addPreResources(
new DirResourceSet(resources, "/WEB-INF/classes",
new File("target/classes").getAbsolutePath(), "/"));
context.setResources(resources);
tomcat.start();
tomcat.getServer().await();
}
}

# 5. 配置 web.xml 文件,使 tomcat 启动时加载我们写好的 html 文件,配置 Tomcat 映射路径,使 Serlvet 类能获取页面信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>LoginServlet</servlet-name> //与创建的Serlvet类同名
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>userinfo.html</welcome-file> //加载我们编写的html文件
</welcome-file-list>
</web-app>

# 四。运行测试类的 main 函数,获取页面信息输入到后端

  • 运行 main 函数,在地址栏输入 locathost:8080/userinfo.html(自己编写的 html 文件)访问前端页面,输入信息,点击 Login 登录。

  • 可以看到控制台获取前端数据并输出:

    至此我们成功获得前端数据并输出