Servlet程序实战一之前端向后台传值

1. 前言

本文通过简单的 ​​Servlet + JSP​​代码。实现前后台值的传递。

参考的文章主要有:


  • 如何使用​​Intellij​​​ 新建 ​​Java Web​​​ 项目?可见 我的博客
  • 如何使用​​JSP​​​代码 ?可以从​​菜鸟教程​​中学习。

2. 代码如下

2.1 java代码
package servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("处理get 请求...");
PrintWriter out = response.getWriter();
response.setContentType("text/html;charset=utf-8");
out.println("<strong>Hello Servlet</strong>");
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("处理 post 请求...");
PrintWriter out = response.getWriter();
response.setContentType("text/html;charset=utf-8");
String userName = request.getParameter("userName");
System.out.println("jsp页面的值是:"+userName);
out.println("<strong>Hello Servlet</strong><br> userName :<strong>"+userName+"</strong>");
}
}
  • ​HelloServlet​​​ 实现了​​HttpServlet​​ 接口。【所有的Servlet程序必须实现这个接口】 在实现这个接口的时候,必须实现其中的两个方法​​doGet(...)​​​ 和 ​​doPost(...)​​​方法。这个​​HttpServlet​​​接口可以在​​pom.xml​​中添加如下依赖获得:
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_3.0_spec</artifactId>
<version>1.0</version>
</dependency>

  • ​doGet()​​方法。
    这里的​​doGet()​​方法实现的功能如下。
    01.简单的打印出当前的方法是​​GET​​;
    02.定义一个文本输出对象 out;
    03.设定response 的内容类型为 ​​text/html​​,其编码方式为​​charset=utf-8​​ 04.然后输出。【注意这个输出是输出在浏览器中的页面】
  • ​doPost()​​方法
    大部分同​​doGet()​​ 方法。这里不再解释

2.2 前端代码
2.2.1 ​​index.jsp​
<html>
<body>
<h2>Hello World!</h2>
<a href="servlet/HelloServlet">First Servlet</a>

<%-- 将这个值传递给HelloServlet这个类处理,使用post方法 --%>
<form action="servlet/HelloServlet" method="post">
<%--<input type="submit" value="Post请求方式处理HelloServlet">--%>
<input type="text" name="userName" >
</form>
</body>
</html>

注意的点有如下几个:


  • ​<a href="servlet/HelloServlet">First Servlet</a>​​这个是在​​html​​使用到了​​servlet​​,但是这个方式很简单,就是将这个链接交由 ​​servlet/HelloServlet​​ 处理。在浏览器中点击这个链接之后,就会默认使用 ​​Get​​方法。接着 java 后台的 ​​HelloSerlet​​ 类就会对其进行处理。
  • ​<form action="servlet/HelloServlet" method="post">​​​ 这是一个表单,其 ​​action="servlet/HelloServlet"​​​ 表明的就是将这个表单交由 ​​HelloServlet​​​ 处理。​​method="post"​​​ 表示就是使用​​post​​​方法对其进行处理,而不是默认的​​Get​​​方法。 有关​​GET​​​和 ​​POST​​​ 方法的区别​​​
  • ​<input type="text" name="userName" >​​ 这就是一个输入框,对应在浏览器中的显示如下所示:
    Servlet程序实战一之前端向后台传值_xml
    如果我们需要在后台获取这个文本框中的值,就可以在后台 ​​doPost()​​ 中调用 ​​request​​ 的​​getParameter(...)​​方法。

2.2.2 ​​web.xml​

这个是一个关键的文件,定义了我们的​​Servlet​​ 同哪一个类关联。在我们的这个程序中,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>

<!--
01.这个位置应该和index.jsp中的href 那个值对应
02.但是必须加上/,否则部署Tomact的时候就会报错
-->
<url-pattern>/servlet/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>

  • ​<servlet-name>​​​表明的是这个​​Servlet​​名是什么;
  • ​<servlet-class>​​​表明的是这个​​Servlet​​对应的类是哪个,这里的类名必须是全路径名
  • ​<url-pattern>​​​表明的是访问的路径。这里必须由​​/​​前导。【具体的含义我暂时不了解】

3. 运行结果

这样第一个 ​​Servlet​​就写好了,现在运行一下程序得到如下页面:

Servlet程序实战一之前端向后台传值_xml_02

点击这个超链接,点击这个超链接的时候,就会传递这个 ​​GET​​ 请求到后台的​​java​​程序,其后台输出值如下:

Servlet程序实战一之前端向后台传值_html_03

相应的,点击超链接之后,浏览器得到的页面如下:

Servlet程序实战一之前端向后台传值_html_04

这表明我们通过java 后台程序向前端写值已经成功。

同样,如果在文本框中输入值,那么就会调用​​POST​​方法,同时调用相应的Servlet的​​doPost()​​代码去处理。如下示:在文本框中输入​​Lawson​​:

Servlet程序实战一之前端向后台传值_xml_05

得到的浏览器响应如下所示:

Servlet程序实战一之前端向后台传值_xml_06

在后台看到的输出就是如下的样子:

Servlet程序实战一之前端向后台传值_java_07

说明我们已经将前台​​JSP​​ 的值传递到了 java 后台中。

如果要获取全部代码,可以参看我的 ​​github​​。