java--完善mvc框架

来源:互联网 发布:js trim函数使用 编辑:程序博客网 时间:2024/04/29 18:19

这里写图片描述

这里完善dao层连接数据库的功能

这里写图片描述

主页面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html>  <head>    <title>学生信息管理</title>  </head>  <body>    <a href='<c:url value="/query?cmd=query"/>'>查看学生信息</a>  </body></html>

获取数据库连接的工具ConnUtils3.java

package cn.hncu.utils;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.DriverManager;import java.util.ArrayList;import java.util.List;import java.util.Properties;public class ConnUtils3 {    private final static List<Connection> pool=new ArrayList<Connection>();    private static int SIZE;//由资源文件读取    private ConnUtils3(){    }    static{        Properties p=new Properties();        try {            p.load(ConnUtils3.class.getClassLoader().getResourceAsStream("jdbc.properties"));//          p.load(ClassLoader.getSystemResourceAsStream("jdbc.properties"));            String driver=p.getProperty("driver");            String url=p.getProperty("url");            String name=p.getProperty("username");            String pwd=p.getProperty("password");            String ssize=p.getProperty("size");            SIZE=Integer.parseInt(ssize);            Class.forName(driver);            for(int i=0;i<SIZE;i++){                final Connection con=DriverManager.getConnection(url,name,pwd);                //更改conn.close()方法                //用代理模式生成一个增强版的conn对象,把它的close()方法拦截更改掉                Object nCon=Proxy.newProxyInstance(                        ConnUtils3.class.getClassLoader(),                         // conn.getClass().getInterfaces(),                         //后面这种方式不行,应该是驱动中的实现类和我们当前程序不在同一空间(类加载器不同)                         new Class[]{Connection.class},                         new InvocationHandler() {                            @Override                            public Object invoke(Object proxy, Method method, Object[] args)                                    throws Throwable {                                if(method.getName().equals("close")){                                    pool.add((Connection)proxy);                                    return null;                                }                                return method.invoke(con, args);                            }                });                pool.add((Connection)nCon);            }        } catch (Exception e) {            e.printStackTrace();        }    }    public static synchronized Connection getConnection(){        if(pool.size()<=0){            System.out.println("池中连接没有了...");            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            return getConnection();        }        return pool.remove(0);//拿一个移一个    }}

资源文件jdbc.properties

##MySQLdriver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=utf-8username=rootpassword=1234size=3##Oracle#driver=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl#username=scott#password=tiger

stud层的servlet层–QueryServlet.java

package cn.hncu.stud.servlet;import java.io.IOException;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.hncu.stud.service.IStudService;import cn.hncu.stud.service.StudServiceImpl;public class QueryServlet extends HttpServlet {    //注入    IStudService service=new StudServiceImpl();    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doPost(request, response);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        List<Map<String, String>> studs=service.query();        request.setAttribute("studs", studs);        request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);    }}

stud层的service层–
接口:

package cn.hncu.stud.service;import java.util.List;import java.util.Map;public interface IStudService {    public List<Map<String, String>> query();}

实现类

package cn.hncu.stud.service;import java.util.List;import java.util.Map;import cn.hncu.stud.dao.StudDAO;import cn.hncu.stud.dao.StudJdbcDAO;public class StudServiceImpl implements IStudService {    //注入    StudDAO dao=new StudJdbcDAO();    @Override    public List<Map<String, String>> query() {        return dao.query();    }}

stud层的dao层–
接口–分离式做法,一个表对应一个dao,为框架做准备

package cn.hncu.stud.dao;import java.util.List;import java.util.Map;public interface StudDAO {    public List<Map<String, String>> query();}

实现类

package cn.hncu.stud.dao;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import cn.hncu.utils.ConnUtils3;public class StudJdbcDAO implements StudDAO {    @Override    public List<Map<String, String>> query() {        List<Map<String, String>> list=new ArrayList<Map<String,String>>();        //一个map就是一行数据, List<Map>就是整个数据表        Connection con=null;        try {            con=ConnUtils3.getConnection();            Statement st=con.createStatement();            String sql="select * from stud";            ResultSet rs=st.executeQuery(sql);            while(rs.next()){                Map<String,String> m=new HashMap<String, String>();                m.put("id", rs.getString(1));                m.put("name", rs.getString(2));                list.add(m);            }            rs.close();            st.close();        } catch (SQLException e) {            e.printStackTrace();        }finally{            try {                con.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        return list;    }}

显示学生信息页面jsps/show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html>  <head>    <title>学生信息管理</title>  </head>  <body>    <h2>学生信息</h2>    <c:forEach items="${studs}" var="x">    ${x.id},${x.name}<br/>    </c:forEach>  </body></html>

这里写图片描述

0 0
原创粉丝点击