servlet自动获取前端页面jsp提交数据

  以下是本人在学习过程中,因前端页面提交参数过多,后台servlet封装实体类过于麻烦而写的一个工具类,应用于jsp/servlet数据提交后,基于MVC+MyBatis进行数据持久化的过程。这里只介绍页面到servlet(controller)提交数据封装对象的过程,MVC+MyBatis访问数据库不在这里介绍。

1.前端页面及代码

  1)前端表单页面构建(用于测试简单构建的页面有点丑陋哦~)

      servlet自动获取前端页面提交数据

  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 }
View Code

相关文章: