Article for beginners

117 阅读6分钟

util

package com.qf.exam.util;

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

/**
 * 根据包名,获取该包下面所有的类全名
 * @author Administrator
 *
 */
public class PackageUtil { 

    /**
     * 获取某包下(包括该包的所有子包)所有类
     * @param packageName 包名
     * @return 类的完整名称
     */ 
    public static List<String> getClassName(String packageName) { 
        return getClassName(packageName, true); 
    } 

    /**
     * 获取某包下所有类
     * @param packageName 包名
     * @param childPackage 是否遍历子包
     * @return 类的完整名称
     */ 
    public static List<String> getClassName(String packageName, boolean childPackage) { 
        List<String> fileNames = null; 
        ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
        String packagePath = packageName.replace(".", "/"); 
        URL url = loader.getResource(packagePath); 
        if (url != null) { 
            String type = url.getProtocol(); 
            if (type.equals("file")) { 
                fileNames = getClassNameByFile(url.getPath(), null, childPackage); 
            } else if (type.equals("jar")) { 
                fileNames = getClassNameByJar(url.getPath(), childPackage); 
            } 
        } else { 
            fileNames = getClassNameByJars(((URLClassLoader) loader).getURLs(), packagePath, childPackage); 
        } 
        return fileNames; 
    } 

    /**
     * 从项目文件获取某包下所有类
     * @param filePath 文件路径
     * @param className 类名集合
     * @param childPackage 是否遍历子包
     * @return 类的完整名称
     */ 
    private static List<String> getClassNameByFile(String filePath, List<String> className, boolean childPackage) { 
        List<String> myClassName = new ArrayList<String>(); 

        filePath = filePath.replaceAll("%20", " ");
//        System.out.println(filePath);

        File file = new File(filePath); 

//        System.out.println(file);

        File[] childFiles = file.listFiles(); 

        for (File childFile : childFiles) { 
            if (childFile.isDirectory()) { 
                if (childPackage) { 
                    myClassName.addAll(getClassNameByFile(childFile.getPath(), myClassName, childPackage)); 
                } 
            } else { 
                String childFilePath = childFile.getPath(); 
                if (childFilePath.endsWith(".class")) { 
                    childFilePath = childFilePath.substring(childFilePath.indexOf("\\classes") + 9, childFilePath.lastIndexOf(".")); 
                    childFilePath = childFilePath.replace("\\", "."); 
                    myClassName.add(childFilePath); 
                } 
            } 
        } 

        return myClassName; 
    } 

    /**
     * 从jar获取某包下所有类
     * @param jarPath jar文件路径
     * @param childPackage 是否遍历子包
     * @return 类的完整名称
     */ 
    private static List<String> getClassNameByJar(String jarPath, boolean childPackage) { 
        List<String> myClassName = new ArrayList<String>(); 
        String[] jarInfo = jarPath.split("!"); 
        String jarFilePath = jarInfo[0].substring(jarInfo[0].indexOf("/")); 
        String packagePath = jarInfo[1].substring(1); 
        try { 
            JarFile jarFile = new JarFile(jarFilePath); 
            Enumeration<JarEntry> entrys = jarFile.entries(); 
            while (entrys.hasMoreElements()) { 
                JarEntry jarEntry = entrys.nextElement(); 
                String entryName = jarEntry.getName(); 
                if (entryName.endsWith(".class")) { 
                    if (childPackage) { 
                        if (entryName.startsWith(packagePath)) { 
                            entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf(".")); 
                            myClassName.add(entryName); 
                        } 
                    } else { 
                        int index = entryName.lastIndexOf("/"); 
                        String myPackagePath; 
                        if (index != -1) { 
                            myPackagePath = entryName.substring(0, index); 
                        } else { 
                            myPackagePath = entryName; 
                        } 
                        if (myPackagePath.equals(packagePath)) { 
                            entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf(".")); 
                            myClassName.add(entryName); 
                        } 
                    } 
                } 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        return myClassName; 
    } 

    /**
     * 从所有jar中搜索该包,并获取该包下所有类
     * @param urls URL集合
     * @param packagePath 包路径
     * @param childPackage 是否遍历子包
     * @return 类的完整名称
     */ 
    private static List<String> getClassNameByJars(URL[] urls, String packagePath, boolean childPackage) { 
        List<String> myClassName = new ArrayList<String>(); 
        if (urls != null) { 
            for (int i = 0; i < urls.length; i++) { 
                URL url = urls[i]; 
                String urlPath = url.getPath(); 
                // 不必搜索classes文件夹 
                if (urlPath.endsWith("classes/")) { 
                    continue; 
                } 
                String jarPath = urlPath + "!/" + packagePath; 
                myClassName.addAll(getClassNameByJar(jarPath, childPackage)); 
            } 
        } 
        return myClassName; 
    } 
} 

package com.qf.exam.util;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/pic.do")
public class ImageCodeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	static int WIDTH=100;
	static int HEIGHT=50;
	static Random random = new Random();
	static int size = 4;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取一个画布
		BufferedImage bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_BGR);

		//获取画笔
		Graphics graphics = bi.getGraphics();

		//给画笔设置颜色  画笔的颜色是随机的
		graphics.setColor(getColor());

		//code库
		String code = "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456798";
		char str[] = code.toCharArray();

		//用于接收生成的每一个随机字符  用于之后验证
		StringBuffer sb = new StringBuffer();
		//作画
		//画一个框 长宽 给画布填充颜色
		graphics.fillRect(0, 0, WIDTH, HEIGHT);
		//往框里面写字  写N次 
		for (int i = 0; i < size; i++) {
			int index = random.nextInt(str.length);
			graphics.setColor(getFontColor());
			//写字时 纵坐标的位置
			graphics.drawString(str[index]+"", (i+1)*20+random.nextInt(5),random.nextInt(15)+25 );
			sb.append(str[index]);
		}

		//添加干扰  1  添加点  2   干扰线
		for (int i = 0; i < 300; i++) {
			graphics.setColor(getColor());
			graphics.drawOval(random.nextInt(WIDTH+1), random.nextInt(HEIGHT+1), 1, 1);
		}

		graphics.setColor(getColor());
		graphics.drawRect(random.nextInt(WIDTH), random.nextInt(HEIGHT), random.nextInt(WIDTH/2), 1);

		//把验证码的字符存起来
		request.getSession().setAttribute("vcode", sb);

		//将画好的图片使用流输出到前端 
		ImageIO.write(bi, "png", response.getOutputStream());

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);
	}

	//给画布设置浅色
	private Color getColor(){
		int x;
		int y;
		int z;
		do{
			 x = random.nextInt(250);
			 y = random.nextInt(250);
			 z = random.nextInt(250);
		}while(!isDark(x, y, z));

		return new Color(x,y,z);
	}

	//判断颜色深浅
	private boolean isDark(int r,int g,int b){
		if(r*0.299 + g*0.578 + b*0.114 >= 192){ //浅色
		    return false;
		}else{  //深色
			return true;
		}
	}

	//给字体设置深色
	private Color getFontColor(){
		int x;
		int y;
		int z;
		do{
			 x = random.nextInt(250);
			 y = random.nextInt(250);
			 z = random.nextInt(250);
		}while(isDark(x, y, z));

		return new Color(x,y,z);

	}

}

package com.qf.exam.util;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DBUtil {

	public static Connection getConnection() {

		try {

			return DataSourceUtil.getDataSource().getConnection();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	public static void close(Connection con, PreparedStatement ps, ResultSet rs) {

		if (null != rs) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (null != ps) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (null != con) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public static int executeDML(String sql, Object... params) throws Exception {

		Connection con = DBUtil.getConnection();

		PreparedStatement ps = con.prepareStatement(sql);

		if (null != params && params.length > 0) {

			for (int i = 0; i < params.length; i++) {
				ps.setObject(i + 1, params[i]);
			}
		}

		int result = ps.executeUpdate();

		close(con, ps, null); 

		return result;
	}

	public static int dml(String sql, Object[] params) throws Exception {

		PreparedStatement ps = DBUtil.getConnection().prepareStatement(sql);

		if (null != params && params.length > 0) {

			for (int i = 0; i < params.length; i++) {
				ps.setObject(i + 1, params[i]);
			}
		}

		return ps.executeUpdate();
	}

	public static <T> T executeDQLByOne(Class cls, String sql, Object... params) throws Exception{

		List<T> list = executeDQL(cls,sql,params);

		if(null != list && list.size() >0){
			return list.get(0);
		}

		return null;
	}

	public static int executeCount(String sql) throws Exception{
		Connection con = DBUtil.getConnection();

		PreparedStatement ps = con.prepareStatement(sql);

		ResultSet rs = ps.executeQuery();

		if(rs.next()){
			return rs.getInt(1);
		}

		close(con, ps, rs);

		return 0;
	}

	public static <T> List<T> executeDQL(Class cls, String sql, Object... params) throws Exception {

		List<T> list = new ArrayList<T>();

		Connection con = DBUtil.getConnection();

		PreparedStatement ps = con.prepareStatement(sql);

		if (null != params && params.length > 0) {
			for (int i = 1; i <= params.length; i++) {
				ps.setObject(i, params[i - 1]);
			}
		}

		ResultSet rs = ps.executeQuery();

		ResultSetMetaData metaData = rs.getMetaData();
		int count = metaData.getColumnCount();

		T obj;

		while (rs.next()) { 

			obj = (T) cls.newInstance(); 

			for (int i = 1; i <= count; i++) {
				String columnName = metaData.getColumnLabel(i);

				Object columnValue = rs.getObject(columnName);

				Field field = cls.getDeclaredField(columnName);

				if(columnValue != null){
					field.setAccessible(true);
					field.set(obj, columnValue);
				}
			}

			list.add(obj);
		}

		close(con, ps, rs);

		return list;
	}

}

package com.qf.exam.util;

import java.io.IOException;

import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;

public class DataSourceUtil {
	private static DataSource dataSource = null;

	public synchronized static DataSource getDataSource(){
		if (null==dataSource) {
			DruidDataSource dSource = new DruidDataSource();
			Properties properties = new Properties();
			try {
				properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
				dSource.configFromPropety(properties);
				dataSource = dSource;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return dataSource;	
	}
}

servlet

package com.qf.exam.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.google.gson.Gson;
import com.qf.exam.anno.MyAjax;
import com.qf.exam.anno.RequestPath;
import com.qf.exam.entity.ResultEntity;
import com.qf.exam.entity.UserEntity;
import com.qf.exam.service.UserService;
import com.qf.exam.service.impl.UserServiceImpl;

public class UserServlet {
	ResultEntity rs=new ResultEntity();
	UserService us=new UserServiceImpl();
	Gson gson=new Gson();

	@RequestPath("login.do")
	@MyAjax
	public String login(HttpServletRequest req){
		String userName = req.getParameter("userName");
		String userPass = req.getParameter("userPass");
		req.getSession().setAttribute("falsename", userName);

		String vcode = req.getSession().getAttribute("vcode").toString();
		String code = req.getParameter("code");
		System.out.println(userName+"      " +userPass +"      " +vcode+"      " +code );
		if (isNull(userName) || isNull(userPass)  ||isNull(code)) {

			rs.setResMsg("username or password or code is null");
			rs.setResCode("0000");
			return gson.toJson(rs);

		}else{
			if (!code.equalsIgnoreCase(vcode)) {

				rs.setResMsg("wrong code");
				rs.setResCode("0001");
				return gson.toJson(rs);

			}else{
				UserEntity user = us.selOne(userName, userPass);
				if (null!=user) {
					req.getSession().setAttribute("rightname", user.getAname());
					rs.setResMsg("login success");
					rs.setResCode("0002");
					return gson.toJson(rs);

				}else{
					rs.setResMsg("wrong username or password");
					rs.setResCode("0003");
					return gson.toJson(rs);
				}
			}

		}

	}

	@RequestPath("selall.do")
	public String selAll(HttpServletRequest req){
		//定死  从第一页展示   每页展示5条
		String page = req.getParameter("page");
		String size = req.getParameter("size");
		int currentPage = 0;
		int pageSize = 0;
		if (isNull(page)) {
			currentPage = 1;
		}else{
			currentPage =Integer.valueOf(page.toString()) ;
		}

		if (isNull(size)) {
			pageSize = 5;
		}else{
			pageSize =Integer.valueOf(page.toString()) ;
		}

		//获取总记录数
		int count = us.getCount();

		//总页数
		int totalPage = count/pageSize;
		if (count%pageSize!=0) {
			totalPage = totalPage+1;
		}

		if (currentPage>=totalPage) {
			currentPage=totalPage;
		}

		if (currentPage<=1) {
			currentPage=1;
		}

		//获取分页的列表
		List<UserEntity> list = us.selAllByPage((currentPage-1)*pageSize, pageSize);
		req.getSession().setAttribute("currentPage", currentPage);
		req.getSession().setAttribute("pageSize", pageSize);
		req.getSession().setAttribute("list", list);
		req.getSession().setAttribute("totalPage", totalPage);

		return "f:index.jsp";
	}

	@RequestPath("add.do")
	@MyAjax
	public String add(HttpServletRequest req){
		String name = req.getParameter("name");
		String pass = req.getParameter("pass");
		String phone = req.getParameter("phone");
		String email = req.getParameter("email");
		String desc = req.getParameter("desc");

		if (isNull(name)||isNull(pass)) {
			rs.setResCode("1111");
			rs.setResMsg("username or password is null");
			return gson.toJson(rs);
		}else {
			UserEntity user = us.selOneByName(name);
			System.out.println(user);
			if (null==user) {
				//说明用户不存在  可以添加
				UserEntity u=new UserEntity();
				u.setAname(name);
				u.setApass(pass);
				u.setAphone(phone);
				u.setAemail(email);
				u.setAdesc(desc);
				boolean status = us.addOne(u);
				if (status) {
					rs.setResCode("1114");
					rs.setResMsg("add success");
					return gson.toJson(rs);
				}else {
					rs.setResCode("1115");
					rs.setResMsg("add failed");
					return gson.toJson(rs);
				}

			}else {
				//用户已存在 不允许注册
				rs.setResCode("1113");
				rs.setResMsg("user already exist");
				return gson.toJson(rs);
			}
		}

	}

	@RequestPath("del.do")
	@MyAjax
	public String del(HttpServletRequest req){
		int id = Integer.valueOf(req.getParameter("aid"));
		boolean status = us.delOne(id);
		if (status) {
			rs.setResCode("0000");
			rs.setResMsg("del success");
			return gson.toJson(rs);
		}else{
			rs.setResCode("1111");
			rs.setResMsg("del failed");
			return gson.toJson(rs);
		}
	}

	@RequestPath("upd.do")
	@MyAjax
	public String udp(HttpServletRequest req){
		//这是需要修改的用户的id
		String name = req.getParameter("name");
		String type = req.getParameter("type");
		System.out.println(name+"         " + type);
		//type为空做查询回填数据
		if (null==type || "".equals(type)) {
			//根据用户名查询到该用户的信息
			UserEntity user = us.selOneByName(name);
			//将用户存储到session
			req.getSession().setAttribute("user", user);
			rs.setResCode("2222");
			rs.setResMsg("find it");
			return gson.toJson(rs);
		}else{
			//默认用户名和id是不允许修改的
			Integer id = Integer.valueOf(req.getParameter("id"));
			String phone = req.getParameter("phone");
			String email = req.getParameter("email");
			String desc = req.getParameter("desc");
			String password = req.getParameter("pass");
			//需要对用户修改的密码进行判空  默认修改的密码不能为空  其它可为空
			if (isNull(password)) {
				rs.setResCode("2222");
				rs.setResMsg("password can not be null!");
				return gson.toJson(rs);
			}else{
				UserEntity user = new UserEntity();
				user.setAid(id);
				user.setAemail(email);
				user.setAname(name);
				user.setApass(password);
				user.setAphone(phone);
				user.setAdesc(desc);
				boolean status = us.udpOne(user);
				if (status) {
					rs.setResCode("0000");
					rs.setResMsg("update success");
					return gson.toJson(rs);
				}else {
					rs.setResCode("1111");
					rs.setResMsg("update failed");
					return gson.toJson(rs);
				}	
			}
		}

	}

	private boolean isNull(String str){

		return null==str || "".equals(str);
	}

}

filter

package com.qf.exam.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/*")
public class UserFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp= (HttpServletResponse) response;
		List<String> ignore = new ArrayList<>();
        //存入不需要过滤的请求路径
	    ignore.add("login.jsp");
	    ignore.add("/login.do");
	    ignore.add("/pic.do");

	    //定义一个是否忽略的标志,初始为false不放行
        boolean isIgnore = false;

        //2.遍历忽略白名单,并放行
        for (String path: ignore){
            //req.getRequestURL()是StringBuffer类型的,转换成String类型
            String reqPath = req.getRequestURL().toString();

            //判断get得到的reqPath请求路径是否在白名单内
            if (reqPath.contains(path)){
                //在白名单内,isIgnore标志赋值true
                isIgnore=true;
                //过滤链执行放行,放行请求和响应
                chain.doFilter(req,resp);
            }

        }

        //3.如果请求不在白名单内,就要判断session域内有没有登录时存入的用户名uName

        if (!isIgnore){
            //判断session域中是否存在用户名uName
            if (req.getSession().getAttribute("rightname")==null){
                //如果为空就是没登录,就要重定向到登录页面
                 resp.sendRedirect("login.jsp");
            }else {
                //域中有用户名,说明登陆过了,可以放行
                chain.doFilter(req,resp);
            }
        }

	}

	public void init(FilterConfig fConfig) throws ServletException {

	}

}

dispatcherServlet

package com.qf.exam.comm;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qf.exam.anno.MyAjax;
import com.qf.exam.anno.RequestPath;
import com.qf.exam.util.PackageUtil;

@WebServlet(value="*.do",loadOnStartup=1)
public class DispatcherServlet extends HttpServlet {
	//请求地址  类全名+方法名
	static Map<String, String> config = new HashMap<>();

	@Override
	public void init() throws ServletException {
		//要把所有的请求对应的实体类和方法名 加载到config里面
		//获取所有类
		//获取某个包下 的所有类
		String packagePath = "com.qf.exam.web";
		//根据指定包名  获取下面所有类的全名
		List<String> list = PackageUtil.getClassName(packagePath);

		//获取所有类里面的方法(带RequestPath注解的方法)
		for (String cpath : list) {
			try {
				Class cls = getClass().forName(cpath);
				Method[] methods = cls.getMethods();
				//查找所有方法的注解
				for (Method method : methods) {
					RequestPath pt = method.getAnnotation(RequestPath.class);
					if (null!=pt) {
						config.put(pt.value(), cls.getName()+"#"+method.getName());
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//获取目标类 使用反射获取目标类
		//获取请求地址
		//根据请求地址  去目标config里面获取执行的servlet类
		String key = req.getServletPath().substring(1);
		System.out.println(key);
		System.out.println(config);
		String path = config.get(key);

		String [] sp = path.split("#");
		String className = sp[0];  //类全名
		String methodName = sp[1]; //方法名

		try {
			//根据类全名  获取字节码对象以及类对象
			Class cls = Class.forName(className);
			Object obj = cls.newInstance();

			//根据方法名  获取方法 执行目标方法得到返回值 
			Method method = cls.getMethod(methodName, HttpServletRequest.class);
			String result = method.invoke(obj, req).toString();

			//根据返回值做不同的处理  
			MyAjax mj = method.getAnnotation(MyAjax.class);

			//代表我们当前的方法是专门来处理ajax请求
			if (null!=mj) {
				resp.getWriter().write(result);
			}else {  //代表页面跳转的请求
				if (result.contains(":")) {
					resp.sendRedirect(result.substring(result.indexOf(":")+1));  //重定向
				}else {
					req.getRequestDispatcher(result).forward(req, resp);//转发
				}

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

anno

package com.qf.exam.anno;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Inherited  
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAjax {

}

package com.qf.exam.anno;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Inherited  //锟斤拷锟斤拷锟角凤拷锟斤拷约坛懈锟斤拷锟斤拷注锟斤拷
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)

public @interface RequestPath {

	String value() default "";

}

dao

package com.qf.exam.dao;

import java.util.List;

public interface IBaseDao {

	//添加
	public boolean add(String sql , Object... params);
	//删除
	public boolean del(String sql , Object... params);
	//修改
	public boolean upd(String sql , Object... params);

	//查询多个
	public <T> List<T> sel(Class cls,String sql , Object... params);

	//查询一个
	public <T> T selOne(Class cls,String sql , Object... params);

}

package com.qf.exam.dao;

import java.util.List;

import com.qf.exam.entity.UserEntity;

public interface IUserDao extends IBaseDao {

	//根据用户名 密码查询一个用户是否存在
	public UserEntity selOne(String name,String password);

	//根据用户名 查询一个用户是否存在
	public UserEntity selOneByName(String name);

	//添加一个用户 
	public boolean addOne(UserEntity user);

	//根据id删除一个用户
	public boolean delOne(int id);

	//查询所有用户
	public List<UserEntity> selAll();

	//修改一个用户的信息
	public boolean udpOne(UserEntity user);

	//分页查询所有的用户信息
	public List<UserEntity> selAllByPage(int start,int size);
	//查询总用户数
	public int getCount();
}

package com.qf.exam.dao.impl;

import java.util.List;

import com.qf.exam.dao.IBaseDao;
import com.qf.exam.util.DBUtil;

public class BaseDaoImpl implements IBaseDao{

	@Override
	public boolean add(String sql , Object... params) {

		try {
			return DBUtil.executeDML(sql, params) > 0;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return false;
	}

	@Override
	public boolean del(String sql, Object... params) {
		try {
			return DBUtil.executeDML(sql, params) > 0;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return false;
	}

	@Override
	public boolean upd(String sql, Object... params) {
		try {
			return DBUtil.executeDML(sql, params) > 0;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return false;
	}

	@Override
	public <T> List<T> sel(Class cls, String sql, Object... params) {

		try {
			return DBUtil.executeDQL(cls, sql, params);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	@Override
	public <T> T selOne(Class cls, String sql, Object... params) {
		try {
			return DBUtil.executeDQLByOne(cls, sql, params);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	//获取总记录数
	public int selCount(String sql){
		try {
			return DBUtil.executeCount(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return 0;
	}

}

package com.qf.exam.dao.impl;

import java.util.List;

import com.qf.exam.dao.IUserDao;
import com.qf.exam.entity.UserEntity;
import com.qf.exam.util.DBUtil;

public class UserDaoImpl extends BaseDaoImpl implements IUserDao{
	String tsql = "select aid,aname,apass,aphone,aemail,adesc from t_admin where 1=1";
	@Override
	public UserEntity selOne(String name,String password) {
		String sql = tsql+" and aname=? and apass=? " ;
		return selOne(UserEntity.class, sql, name,password);
	}

	@Override
	public boolean addOne(UserEntity user) {
		String sql = "insert into t_admin(aname,apass,aphone,aemail,adesc) values(?,?,?,?,?)";
		return add(sql, user.getAname(),user.getApass(),user.getAphone(),user.getAemail(),user.getAdesc());
	}

	@Override
	public boolean delOne(int id) {
		String sql = "delete from t_admin where aid=?";
		return del(sql, id);
	}

	@Override
	public List<UserEntity> selAll() {

		return sel(UserEntity.class, tsql);
	}

	@Override
	public boolean udpOne(UserEntity user) {
		String sql = "update t_admin set apass=?,aphone=?,aemail=?,adesc=? where aid=?";
		return upd(sql, user.getApass(),user.getAphone(),user.getAemail(),user.getAdesc(),user.getAid());
	}

	@Override
	public List<UserEntity> selAllByPage(int start, int size) {
		String sql = tsql + " limit ?,?";
		try {
			return DBUtil.executeDQL(UserEntity.class, sql, start,size);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public int getCount() {
		String sql = "select count(aid) from t_admin";
		try {
			return DBUtil.executeCount(sql);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public UserEntity selOneByName(String name) {
		String sql = tsql + " and aname=?";
		return selOne(UserEntity.class, sql, name);
	}

}

db.properties

druid.username=root
druid.password=123456
druid.driverClassName=com.mysql.jdbc.Driver
druid.url=jdbc:mysql://localhost:3306/week8?useUnicode=true&characterEncoding=utf-8&useSSL=false
druid.initialSize=4
druid.maxActive=6000

gson jstl druid  mysql-connector-java  standard.jar

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>