Servlet程序实战之前后端值的交互
Servlet程序实战之前后端值的交互
1. 前言
本文通过简单的 Servlet + JSP
代码。实现前后台值的传递。
参考的文章主要有:
- 如何使用
Intellij
新建Java Web
项目?可见我的博客:https://blog.****.net/liu16659/article/details/80890343 - 如何使用
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
方法的区别,可见我的博客:https://blog.****.net/liu16659/article/details/80661566 -
<input type="text" name="userName" >
这就是一个输入框,对应在浏览器中的显示如下所示:
如果我们需要在后台获取这个文本框中的值,就可以在后台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
就写好了,现在运行一下程序得到如下页面:
点击这个超链接,点击这个超链接的时候,就会传递这个 GET
请求到后台的java
程序,其后台输出值如下:
相应的,点击超链接之后,浏览器得到的页面如下:
这表明我们通过java 后台程序向前端写值已经成功。
同样,如果在文本框中输入值,那么就会调用POST
方法,同时调用相应的Servlet的doPost()
代码去处理。如下示:在文本框中输入Lawson
:
得到的浏览器响应如下所示:
在后台看到的输出就是如下的样子:
说明我们已经将前台JSP
的值传递到了 java 后台中。
如果要获取全部代码,可以参看我的 github。