本篇文章是对之前的jdbc实现通用的增删改查基础类的一个延伸,主要是对多个servlet相同的地方编写的一个通用的servlet基础类,对于本人用jdbc、servlet、jsp等基础技术实现的框架有非常大的作用。
直接servlet通用类
package com.shude.servlet;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.shude.DAO.im.IBaseDAO;
import com.shude.util.CommUtil;
import com.shude.util.PageUtil;
/**
* 通用servlet类
* @author Administrator
*
* @param <E>
*/
public class BaseServlet<E> extends HttpServlet {
/**
* 定义一个序列化值
*/
private static final long serialVersionUID = -6237582597594441469L;
private IBaseDAO<E> baseDao;
protected Map<String,String> urlMap;
private Class<?> cls;
public BaseServlet(){
Type type = this.getClass().getGenericSuperclass();
if(type instanceof ParameterizedType)
{
Type[] types = ((ParameterizedType) type).getActualTypeArguments();
cls = (Class<?>) types[0];
}
urlMap = new HashMap<String, String>();
urlMap.put("save_ok", "");
urlMap.put("queryById_ok", "");
urlMap.put("modify_ok", "");
urlMap.put("query_ok","");
urlMap.put("detailsById_ok","");
}
/**
* doget方法
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
String flag = req.getParameter("flag");
if("save".equals(flag)){
save(req,resp);//保存
}else if("queryAll".equals(flag)){
queryAll(req,resp,false);//查询全部
}else if("queryById".equals(flag)){
queryById(req,resp);//根据Id查询
}else if("modify".equals(flag)){
modify(req,resp);//修改方法
}else if("delete".equals(flag)){
delete(req,resp);//删除方法
}else if("detailsById".equals(flag)){
detailsById(req,resp);//详情查询
}else{
other(req,resp);//其它方法
}
}
/**
* 保存方法
* @param req
* @param resp
* @throws UnsupportedEncodingException
*/
protected void save(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException {
try {
String msg = "保存成功!";
E e = getReqParameter(req);
if(!baseDao.saveInfo(e)){
msg = "保存失败!";
}
req.setAttribute("msg", msg);
req.getRequestDispatcher(urlMap.get("save_ok")).forward(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 查询所有信息
* @param req
* @param resp
* @param b
* @throws IOException
* @throws ServletException
*/
@SuppressWarnings("unchecked")
protected void queryAll(HttpServletRequest req, HttpServletResponse resp, boolean flag) throws ServletException, IOException {
try {
//获取查询条件
E e = null;
if(flag){
e = (E) cls.newInstance();
}else{
e = getReqParameter(req);
}
//获取分页条件
PageUtil<E> pageUtil = getPageUtilParameters(req);
pageUtil.setEntity(e);
//调用业务方法
baseDao.queryinfo(pageUtil);
//封装查询结果
req.setAttribute("pageUtil", pageUtil);
req.setAttribute("entity", e);
} catch (Exception e) {
e.printStackTrace();
}
//跳转
req.getRequestDispatcher(urlMap.get("query_ok")).forward(req, resp);
}
/**
* 单条记录的查询
* @param req
* @param resp
* @throws IOException
* @throws ServletException
*/
protected void queryById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//获取要查询的Id
String id = getId(req);
E e = baseDao.queryById(id);
req.setAttribute("entity",e);
} catch (Exception e) {
e.printStackTrace();
}
req.getRequestDispatcher(urlMap.get("queryById_ok")).forward(req, resp);
}
/**
* 通用修改方法
* @param req
* @param resp
*/
protected void modify(HttpServletRequest req, HttpServletResponse resp) {
String msg = "修改成功!";
try {
E e = getReqParameter(req);
baseDao.modifyInfo(e);
req.setAttribute("msg", msg);
req.getRequestDispatcher(urlMap.get("modify_ok")).forward(req, resp);
} catch (Exception e) {
msg = "修改失败!";
e.printStackTrace();
}
}
/**
* 通用删除方法
* @param req
* @param resp
* @throws IOException
* @throws ServletException
*/
protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取Id
String id = getId(req);
//调用业务方法
baseDao.deleteInfo(id);
//再次查询
queryAll(req,resp,true);
}
/**
* 通用查询详情方法
* @param req
* @param resp
* @throws IOException
* @throws ServletException
*/
protected void detailsById(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//获取要显示的Id
String id = getId(req);
E e = baseDao.queryById(id);
req.setAttribute("entity",e);
} catch (Exception e) {
e.printStackTrace();
}
req.getRequestDispatcher(urlMap.get("detailsById_ok")).forward(req, resp);
}
protected void other(HttpServletRequest req, HttpServletResponse resp) {
}
/**
* 获取查询条件
* @param req
* @return
* @throws InstantiationException
* @throws IllegalAccessException
*/
@SuppressWarnings("unchecked")
private E getReqParameter(HttpServletRequest req) throws InstantiationException, IllegalAccessException {
Map<String,String[]> parameMap = req.getParameterMap();
E e = (E) cls.newInstance();
Field[] fields = cls.getDeclaredFields();
for (String fromName: parameMap.keySet())
{
String[] vals = parameMap.get(fromName);
String valSrc = "";
for (String v : vals) {
if("".equals(valSrc))
valSrc = v;
else
valSrc += "@@@" + v;
}
for (Field field : fields)
{
String fieldName = field.getName();
if(fieldName.equalsIgnoreCase(fromName))
{
field.setAccessible(true);
String fieldType = field.getType().getSimpleName();
if("Integer".equals(fieldType))
{
if(valSrc != null && !"".equals(valSrc))
{
field.set(e, Integer.parseInt(valSrc));
}
}
else
{
field.set(e, valSrc);
}
break;
}
}
}
return e;
}
/**
* 封装分页条件
* @param req
* @return
*/
private PageUtil<E> getPageUtilParameters(HttpServletRequest req) {
PageUtil<E> pageUtil = new PageUtil<E>();
String pageSize = req.getParameter("pageSize");
String pageNum = req.getParameter("pageNum");
if(pageSize != null && !"".equals(pageSize)){
pageUtil.setPageSize(Integer.parseInt(pageSize));
}
if(pageNum != null && !"".equals(pageNum)){
pageUtil.setPageNum(Integer.parseInt(pageNum));
}
return pageUtil;
}
/**
* 获取id
* @param req
* @return
*/
private String getId(HttpServletRequest req) {
return req.getParameter("id");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
public void setBaseDao(IBaseDAO<E> baseDao) {
this.baseDao = baseDao;
}
}
系统工具类CommUtil
package com.shude.util;
import java.util.List;
import java.util.Map;
import com.shude.DAO.FabricDAO;
import com.shude.DAO.ProductDAO;
import com.shude.DAO.RoleDAO;
import com.shude.DAO.im.IFabricDAO;
import com.shude.DAO.im.IProductDAO;
import com.shude.DAO.im.IRoleDAO;
import com.shude.entity.FabricInfo;
/**
* 上下文工具类
* @author Administrator
*
*/
public class CommUtil {
private static CommUtil commUtil;
private Map<String, String> roleMap;
private Map<String, String> fabricMap;
private Map<String,List<FabricInfo>> fabricList;
private Map<String, Map<String,String>> fabMap;
private Map<String,String> prMap;
private Map<String,String> pnMap;
private Map<String,String> pmMap;
private Map<String,String> icMap;
private Map<String,List<String>> rolePowerMap;
private CommUtil(){
init();
}
private void init() {
IRoleDAO roleDAO=new RoleDAO();
IFabricDAO fabricDAO=new FabricDAO();
IProductDAO productDAO=new ProductDAO();
roleMap=roleDAO.getRoleMap();
fabricMap=fabricDAO.getFabricMap();
fabricList=fabricDAO.getFabricList();
fabMap=fabricDAO.getFabMap();
prMap=productDAO.getPrMap();
pnMap=productDAO.getPnMap();
pmMap=productDAO.getPmMap();
icMap=productDAO.getIcMap();
rolePowerMap=roleDAO.getRoleMapList();
}
public static CommUtil newInstance(){
if(commUtil==null)
commUtil=new CommUtil();
return commUtil;
}
public void refesh(){
init();
}
public Map<String, String> getRoleMap(){
return roleMap;
}
public Map<String, String> getFabricMap() {
return fabricMap;
}
public List<FabricInfo> getFabricList(String fabricCode) {
return fabricList.get(fabricCode);
}
public Map<String, Map<String, String>> getFabMap() {
return fabMap;
}
public Map<String, String> getPrMap() {
return prMap;
}
public List<String> getRolePowerList(String roleId) {
return rolePowerMap.get(roleId);
}
public Map<String, String> getPnMap() {
return pnMap;
}
public Map<String, String> getPmMap() {
return pmMap;
}
public Map<String, String> getIcMap() {
return icMap;
}
}
分页条件类PageUtil
package com.shude.util;
import java.util.List;
/**
* 分页条件查询
* @author Administrator
*
*/
public class PageUtil<E> {
private Integer pageSize;//当前页数
private Integer pageNum;//每页条数
private Integer pageSizeSum;//总页数
private Integer pageNumSum;//总条数
private E entity;//条件查询
List<E> list;//查询结果集
public PageUtil(){
pageSize=1;
pageNum=10;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSizeSum() {
return pageSizeSum;
}
public void setPageSizeSum(Integer pageSizeSum) {
this.pageSizeSum = pageSizeSum;
}
public Integer getPageNumSum() {
return pageNumSum;
}
public void setPageNumSum(Integer pageNumSum) {
this.pageNumSum = pageNumSum;
if(pageNumSum%pageNum==0){
pageSizeSum=pageNumSum/pageNum;
}else{
pageSizeSum=pageNumSum/pageNum+1;
}
}
public E getEntity() {
return entity;
}
public void setEntity(E entity) {
this.entity = entity;
}
public List<E> getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
}
相关web.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>WLWeb</display-name>
<listener>
<listener-class>com.shude.listener.ApplicationListener</listener-class>
</listener>
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.shude.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/usMrg</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>FabricServlet</servlet-name>
<servlet-class>com.shude.servlet.FabricServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FabricServlet</servlet-name>
<url-pattern>/fabMrg</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MateServlet</servlet-name>
<servlet-class>com.shude.servlet.MateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MateServlet</servlet-name>
<url-pattern>/mateMrg</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>FileServlet</servlet-name>
<servlet-class>com.shude.servlet.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileServlet</servlet-name>
<url-pattern>/fileMrg</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ProgramServlet</servlet-name>
<servlet-class>com.shude.servlet.ProgramServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProgramServlet</servlet-name>
<url-pattern>/pgMrg</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ExcelServlet</servlet-name>
<servlet-class>com.shude.servlet.ExcelServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExcelServlet</servlet-name>
<url-pattern>/excMrg</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>jsp/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
这里是含有分页工具类和系统所有数据表工具类的,可以根据自己的需求来查看,有些地方并不是很完善,页面也没有贴出来,本文只起一个参考作用!!!