servlet通用的基础类

本篇文章是对之前的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>


这里是含有分页工具类和系统所有数据表工具类的,可以根据自己的需求来查看,有些地方并不是很完善,页面也没有贴出来,本文只起一个参考作用!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

outSide~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值