servlet自动获取前端页面jsp提交数据
以下是本人在学习过程中,因前端页面提交参数过多,后台servlet封装实体类过于麻烦而写的一个工具类,应用于jsp/servlet数据提交后,基于MVC+MyBatis进行数据持久化的过程。这里只介绍页面到servlet(controller)提交数据封装对象的过程,MVC+MyBatis访问数据库不在这里介绍。
1.前端页面及代码
1)前端表单页面构建(用于测试简单构建的页面有点丑陋哦~)
2)前端jsp页面代码
这里使用了Ajax异步 get去除缓存方式提交表单。传统方式请自测,本人都已经测试过,在这里不做展示。
注意:在Ajax提交表单部分使用了jQuery的serialize()序列化函数,初学者可参看jQuery的帮助文档。如不理解,可以在data部分使用“字符串”或json对象的方式进行常规方式提交数据。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 <script type="text/javascript" src="jquery-1.11.1-min.js"></script> 9 <script type="text/javascript"> 10 $(function(){ 11 $("#submitBtn").click(function(){ 12 $.ajax({ 13 url:"${pageContext.request.contextPath }/testPage", 14 data:$("#formId").serialize(), //jQuery中的函数,序列化表单数据 15 type:"get", 16 cache:false, 17 success:function(jsonObj){ 18 alert(jsonObj.msg); 19 $("#formId")[0].reset();//重置表单 20 } 21 }) 22 }); 23 }) 24 25 </script> 26 </head> 27 <body> 28 <form > 29 ID:<input ><br> 30 姓名:<input ><br> 31 性别:<input ><br> 32 年龄:<input ><br> 33 价格:<input ><br> 34 <input type="button" value="提交" > 35 </form> 36 </body> 37 </html>
2.实体类
5个属性and提供set/get方法
1 package com.domain; 2 3 public class Person { 4 String username; 5 String sex; 6 int age; 7 Double price; 8 Long id; 9 public String getUsername() { 10 return username; 11 } 12 public void setUsername(String username) { 13 this.username = username; 14 } 15 public String getSex() { 16 return sex; 17 } 18 public void setSex(String sex) { 19 this.sex = sex; 20 } 21 public int getAge() { 22 return age; 23 } 24 public void setAge(int age) { 25 this.age = age; 26 } 27 public Double getPrice() { 28 return price; 29 } 30 public void setPrice(Double price) { 31 this.price = price; 32 } 33 public Long getId() { 34 return id; 35 } 36 public void setId(Long id) { 37 this.id = id; 38 } 39 }
3.后台Servlet代码
1)封装实体类对象
这里只讲前端提交数据输出到控制台,证明数据已经获取并封装到对象中。
其中,p = (Person) EncapsulationUtil.getJavaBean(Person.class, request); 使用了封装体工具,为本人为偷懒所写,在后面提供源码。后面做详细解释。
注意:前端提交数据和我们需要保存到数据库的数据不完全时,在servlet中拿到封装对象后可手动进行设置,如:数据的主键id一般我们采用UUID进行后台生成需要手动set进行设置。
1 package com.controller; 2 3 import java.io.IOException; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import com.domain.Person; 13 import com.fasterxml.jackson.databind.ObjectMapper; 14 import com.utils.EncapsulationUtil; 15 16 public class testPage extends HttpServlet { 17 18 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 19 //定义数据封装体的对象 20 Person p; 21 //定义用于返回json的数据存放集合 22 Map<String,Object> map = new HashMap<>(); 23 24 try { 25 //获取前端页面表单提交的数据 26 p = (Person) EncapsulationUtil.getJavaBean(Person.class, request); 27 //打印封装体中的数据结果 28 System.out.println("ID---->"+p.getId()+"<-----"); 29 System.out.println("姓名:---->"+p.getUsername()+"<-----"); 30 System.out.println("年龄:---->"+p.getAge()+"<-----"); 31 System.out.println("性别:"+p.getSex()); 32 System.out.println("价格:"+p.getPrice()); 33 map.put("msg", "提交成功"); 34 35 } catch (Exception e1) { 36 e1.printStackTrace(); 37 //当前的提交数据类型和实体类中数据格式不一致时,抛出异常 38 System.err.println("getMessage"+e1.getMessage()); 39 //将异常信息保存到集合中,返回到前端 40 map.put("msg", e1.getMessage()); 41 } 42 43 //jackson插件,用于将map集合转化为json字符串 44 ObjectMapper ob = new ObjectMapper(); 45 //返回json 46 request.setAttribute("json",ob.writeValueAsString(map) ); 47 request.getRequestDispatcher("/json.jsp").forward(request, response); 48 49 50 /* Map<String,Object> conditionMap = EncapsulationUtil.getMap(request); 51 52 Set ketSet = conditionMap.keySet(); 53 for (Object object : ketSet) { 54 String key = (String) object; 55 System.out.println(conditionMap.get(key)); 56 }*/ 57 } 58 59 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 60 doGet(request, response); 61 } 62 63 }