Servlet程序实战之前后端值的交互

Servlet程序实战之前后端值的交互

1. 前言

本文通过简单的 Servlet + 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方法。 有关GETPOST 方法的区别,可见我的博客:https://blog.****.net/liu16659/article/details/80661566
  • <input type="text" name="userName" > 这就是一个输入框,对应在浏览器中的显示如下所示:
    Servlet程序实战之前后端值的交互
    如果我们需要在后台获取这个文本框中的值,就可以在后台 doPost() 中调用 requestgetParameter(...)方法。
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程序实战之前后端值的交互
点击这个超链接,点击这个超链接的时候,就会传递这个 GET 请求到后台的java程序,其后台输出值如下:
Servlet程序实战之前后端值的交互
相应的,点击超链接之后,浏览器得到的页面如下:
Servlet程序实战之前后端值的交互

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

同样,如果在文本框中输入值,那么就会调用POST方法,同时调用相应的Servlet的doPost()代码去处理。如下示:在文本框中输入Lawson
Servlet程序实战之前后端值的交互

得到的浏览器响应如下所示:
Servlet程序实战之前后端值的交互

在后台看到的输出就是如下的样子:
Servlet程序实战之前后端值的交互
说明我们已经将前台JSP 的值传递到了 java 后台中。

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