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
- java--完善mvc框架
- mvc框架的完善
- MVC框架与MVT框架详解(更新完善中...)
- java MVC框架:WebWind
- java开发 mvc框架
- ESASP 业界第一个最为完善的 ASP MVC框架(待续)
- Java简易MVC框架 etmvc
- SoybeanMilk Java MVC框架介绍
- jSimpleWeb轻量级java mvc框架
- Java MVC框架性能比较
- Java MVC框架性能比较
- java-经典MVC框架Structs
- Java MVC框架性能比较
- Java Web 自定义MVC框架
- Java - 搭建 Spring MVC 框架
- Java Web 自定义MVC框架
- Java Web自定义MVC框架
- 基础知识框架完善
- 模板实现顺序表和链表
- NOIP2011复赛DAY2
- $('div','li') 和 $('div , li') 和 $('div li') 区别
- HDU 2008 数值统计
- javascript 内置对象 - 时间 date
- java--完善mvc框架
- Spring 全注解配置 bean 和 调用 (4) @Primary 自动装配歧义性
- CentOS7的桌面引擎MATE安装配置经验
- 我的秋招之旅
- 搭建Spring Boot环境
- navicat和doc下查看mysql的字符集不一样问题
- linux /proc/loadavg(平均负载)
- Python编程入门-第9章 异常处理 -学习笔记
- 对角线O(n)