建议去看一下孤傲苍狼写的Servlet+JSP+JavaBean开发模式(http://www.cnblogs.com/xdp-gacl/p/3902537.html),
最好把他JavaWeb学习总结全部看完会有很大的收获哦! 而把jsp专递的参数封装到一个方法里面也是从他那里学到的.
我觉得特别有用,尤其是在做项目的时候能省很多的代码
一: 需要的包
根据上一篇JDBC+Servlet+jsp(http://www.cnblogs.com/zhu520/p/6913650.html)的内容为基础,增加新功能代码.
如下所示:
一:代码的编写
1. zhu.jdbc.unit
在zhu.jdbc.unit包下创建一个WebUtils.java的类(用来存放参数定义的类)
WebUtils代码如下:
package zhu.jdbc.unit; import java.util.Enumeration;
import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.apache.commons.beanutils.BeanUtils; /**
* 把request对象中的请求参数封装到bean中
*
* @author Xiao_Zhu
*
*/
public class WebUtils { /**
* 将request对象转换成T对象
*
* @param request
* @param clazz
* @return
*/
public static <T> T request2Bean(HttpServletRequest request, Class<T> clazz) {
/*
* JDK中,普通的Class.newInstance()方法的定义返回Object,要将该返回类型强制转换为另一种类型;
* 但是使用泛型的Class<T>,Class.newInstance()方法具有一个特定的返回类型;
* java反射就是从Class<T>类开始的,Class<T>是没有公共的构造方法,虽然没有构造方法,但是有相应的方法可以获取类的变量和类型
* “?”是一个匹配字符,匹配任意类型;“T”匹配的是某一具体的类型,如String。如果知道Class的具体类型,可以直接使用Class<T>,
* 如Class<String>
*/
try {// 创建对象(这里的是创建Tb_User的对象)
T bean = clazz.newInstance();
// 使用枚举获取 参数-->key-value 键值对
Enumeration<String> e = request.getParameterNames();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
String value = request.getParameter(key);
BeanUtils.setProperty(bean, key, value);
}
return bean;
} catch (Exception e) {
throw new RuntimeException(e);
}
} /**
* 生成UUID
*
* @return
*/
public static String makeId() {
return UUID.randomUUID().toString();
}
}
为了更明了点,我再建一个servlet和jsp
2. zhu.jdbc.servlet
在zhu.jdbc.servlet包下创建一个Servlet_TbUser2.java的类(用来存放参数定义的类)
主要的差别是: 在没有调用WebUtils类的方法request2Bean时,专递参数是这样的
调用了之后是这样的:
Servlet_TbUser2代码如下:
package zhu.jdbc.servlet; import java.io.IOException;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import zhu.jdbc.domain.Tb_User;
import zhu.jdbc.service.ITb_UserService;
import zhu.jdbc.service.imp.ITb_UserServiceImpI;
import zhu.jdbc.unit.WebUtils; public class Servlet_TbUser2 extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
ITb_UserService myITb_UserService = new ITb_UserServiceImpI(); @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");// 解决乱码
String type = request.getParameter("who");
// 新增
if ("Insert".equals(type)) {
Insert(request, response);
}
//查询所有数据
else if("queryAll".equals(type)){
queryAll(request, response);
}
} // 新增
public void Insert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*注册字符串到日期的转换器
* ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
* */
//将jsp页面专递参数封装到 domain层的 Tb_User对象中
Tb_User tb_User=WebUtils.request2Bean(request, Tb_User.class);
System.out.println(tb_User.getName());
// 把获取到的这些值放到user里
Tb_User user = new Tb_User();
try {
// 下面两句是把 string 转换为 sql类型的 时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String time=sdf.format(tb_User.getBirthday());
user.setBirthday(new Date(sdf.parse(time).getTime()));
user.setEmail(tb_User.getEmail());
user.setName(tb_User.getName());
user.setPassword(tb_User.getPassword());
user.setSex(tb_User.isSex());
// 最后调用服务来添加
String message = null;
if (myITb_UserService.insertData(user) == true) {
queryAll(request, response);
} else {
message = "新增失败!!!";
request.setAttribute("msg", message);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
//查询所有的数据
public void queryAll(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
List<Tb_User> lis=myITb_UserService.queryAllData();
request.setAttribute("list", lis);
request.getRequestDispatcher("/jsp/WebUtils_User.jsp").forward(request, response);
} }
3.jsp
创建一个WebUtils_User.jsp
WebUtils_User.jsp的代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- c标签要使用,那么就必须要有它 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set scope="page" var="url"
value="${pageContext.request.contextPath }"></c:set> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'WebUtils_User.jsp' starting page</title>
</head> <body>
<div align="center"
style="width: 400px; position: relative;left:450px">
<form action="${url}/zhu/Servlet_TbUser2?who=Insert" method="post">
<h4>新增用户</h4>
姓名: <input type="text" name="name"><br />
密码: <input type="text" name="password"><br />
出生日期 : <input type="text" name="birthday"><br />
性别: <select name="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br />
<input type="submit" value="新增"/>
<hr />
</form>
</div>
<div align="center"style="width: 400px; position: relative;left:450px;">
<form action="${url}/zhu/Servlet_TbUser2?who=queryAll" method="post">
<input type="submit" value="查询所有的数据"/> <br/>
<table border="1" cellspacing="0">
<thead>
<tr><td>ID</td><td>姓名</td><td>密码</td><td>日期</td><td>性别</td><td>操作</td></tr>
</thead>
<tbody>
<c:forEach items="${list}" var="list">
<tr>
<td>${list.id }</td>
<td>${list.name }</td>
<td>${list.password }</td>
<td>${list.birthday }</td>
<td><c:if test="${list.sex==false }">男</c:if>
<c:if test="${list.sex==true }">女</c:if></td>
<td><a href= "${url}/zhu/Servlet_TbUser?who=queryById&id=${list.id}" style='text-decoration:none' >修改 </a>
<a href= "${url}/zhu/Servlet_TbUser?who=delete&id=${list.id}" style='text-decoration:none' >删除</a> </td>
</tr>
</c:forEach>
</tbody>
</table>
<hr />
</form>
</div>
</body>
</html>
效果如下
二:使用jQuery提价表单
应用jquery-2.1.4.min.js的文件
在刚刚的WebUtils_User.jsp中应用jQuery-2.1.4.min.js的文件即可应用jQuery的了
WebUtils_User.jsp的完整代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- c标签要使用,那么就必须要有它 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set scope="page" var="url"
value="${pageContext.request.contextPath }"></c:set> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'WebUtils_User.jsp' starting page</title>
<script type="text/javascript" src="${url}/js/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
function funInsert(){
//专递的参数和定义的变量必须要遵循驼峰形式的格式
var userName=$("#name").val();
var userPassword=$("#password").val();
var userSex=$("#sex").val();
var userBirthday=$("#birthday").val();
//那面的专递的参数 如:name,password...必须要与domain层的表的名称对应,
$.post("${url}/zhu/Servlet_TbUser2",{who:'jQueryInsert',name:userName,password:userPassword,sex:userSex,birthday:userBirthday},
function(getData){
console.log(getData);
alert(getData.msg); },"json");
} </script>
</head> <body> <div align="center"
style="width: 400px; position: relative;left:450px">
<form action="${url}/zhu/Servlet_TbUser2?who=Insert" method="post">
<h4>新增用户</h4>
姓名: <input type="text" name="name"><br />
密码: <input type="text" name="password"><br />
出生日期 : <input type="text" name="birthday"><br />
性别: <select name="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br />
<input type="submit" value="新增"/>
<hr />
</form>
</div>
<div align="center"style="width: 400px; position: relative;left:450px;">
<form action="${url}/zhu/Servlet_TbUser2?who=queryAll" method="post">
<input type="submit" value="查询所有的数据"/> <br/>
<table border="1" cellspacing="0">
<thead>
<tr><td>ID</td><td>姓名</td><td>密码</td><td>日期</td><td>性别</td><td>操作</td></tr>
</thead>
<tbody>
<c:forEach items="${list}" var="list">
<tr>
<td>${list.id }</td>
<td>${list.name }</td>
<td>${list.password }</td>
<td>${list.birthday }</td>
<td><c:if test="${list.sex==false }">男</c:if>
<c:if test="${list.sex==true }">女</c:if></td>
<td><a href= "${url}/zhu/Servlet_TbUser?who=queryById&id=${list.id}" style='text-decoration:none' >修改 </a>
<a href= "${url}/zhu/Servlet_TbUser?who=delete&id=${list.id}" style='text-decoration:none' >删除</a> </td>
</tr>
</c:forEach>
</tbody>
</table>
<hr />
</form>
</div> <div align="center"
style="width: 400px; position: relative;left:450px">
<h4>不用使用form标签提交表单,使用jQuery的post来提交表单</h4>
<h5>新增用户</h5>
姓名: <input type="text" id="name"><br />
密码: <input type="text" id="password"><br />
出生日期 : <input type="text" id="birthday"><br />
性别: <select id="sex">
<option value="0">男</option>
<option value="1">女</option>
</select><br />
<input type="button" value="新增" onclick="funInsert()"/>
<hr /> </div>
</body>
</html>
Servlet_TbUser2完整代码如下:
使用JSON*方法来把数据从servlet专递个jsp中
JSON*需要的用用到的jar包是
package zhu.jdbc.servlet; import java.io.IOException;
import java.sql.Date; import java.text.SimpleDateFormat;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import zhu.jdbc.domain.Tb_User;
import zhu.jdbc.service.ITb_UserService;
import zhu.jdbc.service.imp.ITb_UserServiceImpI;
import zhu.jdbc.unit.WebUtils; public class Servlet_TbUser2 extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
ITb_UserService myITb_UserService = new ITb_UserServiceImpI(); @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");// 解决乱码
String type = request.getParameter("who");
// 新增
if ("Insert".equals(type)) {
Insert(request, response);
}
//查询所有数据
else if("queryAll".equals(type)){
queryAll(request, response);
}
//使用jquery提交表单新增
else if("jQueryInsert".equals(type)){
jQueryInsert(request, response);
}
} // 新增
public void Insert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*注册字符串到日期的转换器
* ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
* */
//将jsp页面专递参数封装到 domain层的 Tb_User对象中
Tb_User tb_User=WebUtils.request2Bean(request, Tb_User.class);
System.out.println(tb_User.getName());
// 把获取到的这些值放到user里
Tb_User user = new Tb_User();
try {
// 下面两句是把 string 转换为 sql类型的 时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String time=sdf.format(tb_User.getBirthday());
user.setBirthday(new Date(sdf.parse(time).getTime()));
user.setEmail(tb_User.getEmail());
user.setName(tb_User.getName());
user.setPassword(tb_User.getPassword());
user.setSex(tb_User.isSex());
// 最后调用服务来添加
String message = null;
if (myITb_UserService.insertData(user) == true) {
queryAll(request, response);
} else {
message = "新增失败!!!";
request.setAttribute("msg", message);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
//查询所有的数据
public void queryAll(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
List<Tb_User> lis=myITb_UserService.queryAllData();
request.setAttribute("list", lis);
request.getRequestDispatcher("/jsp/WebUtils_User.jsp").forward(request, response);
} // 新增
public void jQueryInsert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { /*注册字符串到日期的转换器
* ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
* */
//将jsp页面专递参数封装到 domain层的 Tb_User对象中
Tb_User tb_User=WebUtils.request2Bean(request, Tb_User.class);
System.out.println(tb_User.getName());
// 把获取到的这些值放到user里
Tb_User user = new Tb_User();
try {
// 下面两句是把 string 转换为 sql类型的 时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String time=sdf.format(tb_User.getBirthday());
user.setBirthday(new Date(sdf.parse(time).getTime()));
user.setEmail(tb_User.getEmail());
user.setName(tb_User.getName());
user.setPassword(tb_User.getPassword());
user.setSex(tb_User.isSex());
// 最后调用服务来添加 JSONObject json=new JSONObject();
response.setCharacterEncoding("UTF-8");//解决乱码
if (myITb_UserService.insertData(user) == true) {
json.put("msg", "新增成功!");
} else {
json.put("msg", "新增失败!");
}
//使用了JSONObject就必须这句代码
response.getWriter().write(json.toString());
} catch (Exception e1) {
e1.printStackTrace();
} } }
效果:
源码下载地址: http://pan.baidu.com/s/1c1V00s4