首先是获取前端数据
Request获取前端数据常用的有以下两个方法:
getParameter(String name);
getParameterValues(String name);
getParameter(String name)是获取前端单个数据,比如说文本框、单选框等,传入的他们的name,就会返回他们的value;
getParameterValues(String name);是获取前端的多个数据,比如说复选框,同样传入他们的name,会返回他们的value到一个String数组中。
然后是请求转发
前面在ServletContext中已经有过了一个请求转发的应用,Request同样可以实现请求转发,并且应用时应尽量采用后者;
req.getRequestDispatcher(String Path).forward(ServletRequest request, ServletResponse response);
再次有必要再强调一下请求转发与重定向的路径问题,请求转发传入时,根目录在WEB项目(WEB应用),并且此时也正处在WEB项目目录中;而重定向时,是以WEB服务器为根目录,但我们此时同样处于WEB项目目录下,需要注意二者的区别。还有一个需要注意的点是,重定向可以通过URL对外部资源(比如https://www.baidu.com)进行访问,但是请求转发只能访问服务器的内部资源。
下面我们进行一个建议登陆界面的数据读取并且进行请求转发:
首先建立一个前端登陆的页面index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <h1>登录</h1> <form action="${pageContext.request.contextPath}/login" method="post"> 用户名:<input type="text" name="username"><br> 密码: <input type="password" name="password"><br> 爱好: <input type="checkbox" name="hobby" value="读书">读书 <input type="checkbox" name="hobby" value="唱歌">唱歌 <input type="checkbox" name="hobby" value="听音乐">听音乐 <input type="checkbox" name="hobby" value="打篮球">打篮球 <br> <input type="submit" value="登录"> </form> </body> </html>
再建立一个登陆成功的页面LoginSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录成功</title> </head> <body> <h1>登录成功!!!</h1> </body> </html>
建立一个类LoginServlet.class
1 package com.jms.servlet; 2 3 import java.io.IOException; 4 import java.util.Arrays; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class LoginServlet extends HttpServlet{ 12 13 @Override 14 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 15 doPost(req, resp); 16 } 17 18 @Override 19 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 20 21 req.setCharacterEncoding("UTF-8"); 22 resp.setCharacterEncoding("UTF-8"); 23 24 //读取数据并输出到控制台查看 25 String name = req.getParameter("username"); 26 String pwd = req.getParameter("password"); 27 String hobby[] = req.getParameterValues("hobby"); 28 29 System.out.println(name); 30 System.out.println(pwd); 31 System.out.println(Arrays.toString(hobby)); 32 33 //请求转发到登录成功页面 34 req.getRequestDispatcher("/LoginSuccess.jsp").forward(req, resp);; 35 } 36 37 38 }
修改web.xml文件,建立servlet连接
<servlet> <servlet-name>login</servlet-name> <servlet-class>com.jms.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping>
测试一下
输入用户名、密码以及选择爱好后点击登录
请求转发成功,然后我们看看控制台有没有输出从前端获取的信息
获取前端数据成功。
(本文仅作个人学习记录用,如有纰漏,敬请指正)