先连接数据库:新建DBTest类代码如下: ................................................ 错误!未定义书签。 导入web.xml文件放在WEB-INF文件夹下,修改其内部代码: ............. 错误!未定义书签。 导入mysql.jar包放在lib文件夹下 .............................................................. 错误!未定义书签。 编写context.xml文件放入META-INF文件夹下,并修改内部代码: ...... 错误!未定义书签。 新建一个com.ambow.myweb.util的包 ........................................................ 错误!未定义书签。 新建DBUtil类: ............................................................................................ 错误!未定义书签。 新建一个com.ambow.myweb.pojo的包 ...................................................... 错误!未定义书签。 新建一个VIP的类:根据数据库表中的列名,声明私有变量名(与列名相同,数据类型与数据库中数据类型相同),并同时生命get,set方法:部分代码: ........... 错误!未定义书签。 新建一个com.ambow.myweb.dao的包 ....................................................... 错误!未定义书签。 新建一个名为BaseDao的接口,具体代码如下: ..................................... 错误!未定义书签。 在com.ambow.myweb.dao中另新建一个名为VIPDao的接口,并继承BaseDao接口,具体代码如下:......................................................................................................... 错误!未定义书签。 新建一个包名为com.ambow.dao.impl; ..................................................... 错误!未定义书签。 在此包中新建一个BaseDaoImpl抽象类去实现BaseDao的方法; .......... 错误!未定义书签。 在com.ambow.dao.impl;包中新建一个VIPDAOImpl的类 ....................... 错误!未定义书签。 在WebContent的文件下新建一个名为login的jsp文件。作为起始页:错误!未定义书签。 新建一个名为com.ambow.myweb.servlet的包; ...................................... 错误!未定义书签。 新建一个LoginServlet的类。 ....................................................................... 错误!未定义书签。 新建com.ambow.myweb.factory;新建一个DAOFactory类......................... 错误!未定义书签。 新建一个server包;创建一个VIPServer接口 ........................................... 错误!未定义书签。 新建一个server.impl包创建一个VIPServerImpl类 .................................... 错误!未定义书签。 在factory包中新建一个ServerFactory的类。 ........................................... 错误!未定义书签。 在loginservlet中写进入主页代码 ................................................................ 错误!未定义书签。
先连接数据库:新建DBTest类代码如下:
packagecom.ambow.myweb.test; importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.SQLException; publicclassDBTest {
publicstaticvoid main(String[] args) {
try {
Class.forName(\"com.mysql.jdbc.Driver\"); Connection
conn=DriverManager.getConnection(\"jdbc:mysql://localhost:3306/test\", \"root\", \"\"); }
}
System.out.println(conn);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (SQLException e) { }
// TODO Auto-generated catch block e.printStackTrace();
导入web.xml文件放在WEB-INF文件夹下,修改其内部代码:
导入mysql.jar包放在lib文件夹下 编写context.xml文件放入META-INF文件夹下,并修改内部代码: type=\"javax.sql.DataSource\" driverClassName=\"com.mysql.jdbc.Driver\" url=\"jdbc:mysql://localhost:3306/myweb\"//myweb为工程名 username=\"root\" password=\"root\" maxWait=\"-1\" maxActive=\"30\" maxIdle=\"10\"/> 新建一个com.ambow.myweb.util的包 新建DBUtil类: packagecom.ambow.myweb.util; importjava.sql.Connection; importjava.sql.SQLException; importjavax.naming.Context; importjavax.naming.InitialContext; importjavax.naming.NamingException; importjavax.sql.DataSource; publicclassDBUtil { privatestaticDataSourcedataSource; //获取连接池 static { try { //找到本地Java命名服务(JNDI)的根 Context context = (Context) newInitialContext().lookup(\"java:comp/env\"); } publicstatic Connection getConnection() { } publicstaticvoid close(Connection conn) { if(conn!=null) { try { //将连接还回连接池中 conn.close(); Connection conn = null; try { //从连接池中取一个连接 conn = dataSource.getConnection(); //从JNDI根上查找目标数据库连接池 dataSource = (DataSource) context.lookup(\"jdbc/bbs\"); } catch (NamingException e) { } // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { } return conn; // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block } } } } e.printStackTrace(); 新建一个com.ambow.myweb.pojo的包 新建一个VIP的类:根据数据库表中的列名,声明私有变量名(与列名相同,数据类型与数据库中数据类型相同),并同时生命get,set方法:部分代码: publicclass VIP { privateStringusername; privateStringpassword; privateintexperience; publicStringgetUsername() { } publicvoidsetUsername(String username) { } public String getPassword() { } publicvoidsetPassword(String password) { } publicintgetExperience() { } returnexperience; this.password = password; returnpassword; this.username = username; returnusername; publicvoidsetExperience(int experience) { } this.experience = experience; 新建一个com.ambow.myweb.dao的包 新建一个名为BaseDao的接口,具体代码如下: packagecom.ambow.myweb.dao; importjava.util.List; /* * 泛型接口,用于定义DAO层所有表的CRUD * T:表的类型 * ID:表的主键类型 * 此接口的所有CRUD行为都是基于对象的 */ publicinterfaceBaseDAO //根据主键查找一个对象 T getObject(ID id); //查所有对象 List List List } //根据sql语句计算查询总记录数 intgetCount(String sql); 在com.ambow.myweb.dao中另新建一个名为VIPDao的接口,并继承BaseDao接口,具体代码如下: packagecom.ambow.myweb.dao; importcom.ambow.myweb.pojo.VIP; /* * 针对vip表的CRUD的定义 * BaseDAO中的所有T,在这里替换成了VIP * BaseDAO中的所有ID,在这里替换成了String */ publicinterfaceVIPDaoextendsBaseDAO 新建一个包名为com.ambow.dao.impl; 在此包中新建一个BaseDaoImpl抽象类去实现BaseDao的方法; 代码如下: packagecom.ambow.myweb.dao.impl; importjava.sql.Connection; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.sql.Statement; importcom.ambow.myweb.dao.BaseDAO; importcom.ambow.myweb.util.DBUtil; /* * BaseDAO的实现类 * 主要功能:实现一些与表结构无关的公共的行为 */ publicabstractclassBaseDaoImpl @Override //?????????为什么用到抽象类 //根据sql语句计算查询总记录数 } publicintgetCount(String sql) { } Connection conn = DBUtil.getConnection(); try { //得到容器对象 Statement stm = conn.createStatement(); //发送sql语句,得到结果 ResultSetrs = stm.executeQuery(sql); //遍历结果集 if(rs.next()) { } returnrs.getInt(1); } catch (SQLException e) { } return 0; // TODO Auto-generated catch block e.printStackTrace(); 在com.ambow.dao.impl;包中新建一个VIPDAOImpl的类 代码如下:packagecom.ambow.myweb.dao.impl; importjava.sql.Connection; importjava.sql.PreparedStatement; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.util.ArrayList; importjava.util.List; importcom.ambow.myweb.dao.VIPDao; importcom.ambow.myweb.pojo.VIP; importcom.ambow.myweb.util.DBUtil; /* * 实现vip表的具体的CRUD */ publicclassVIPDAOImplextendsBaseDaoImpl @Override publicvoid add(VIP t) { Connection conn = DBUtil.getConnection(); String sql = \"insert into vip values(?, ?, 0, ?, ?, ?, ?, ?, 0)\"; try { PreparedStatementpstm = conn.prepareStatement(sql); pstm.setString(1, t.getUsername()); implementsVIPDao{ } pstm.setString(2, t.getPassword()); pstm.setString(3, t.getHeadImage()); pstm.setString(4, t.getPhone()); pstm.setString(5, t.getEmail()); pstm.setInt(6, t.getState()); pstm.setTimestamp(7, t.getRegistTime()); pstm.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { } DBUtil.close(conn); @Override publicvoid update(VIP t) { Connection conn = DBUtil.getConnection(); //注册时间不能修改 String sql = \"update vip set password=?, experience=?, \" + \"head_image=?, phone=?, email=?, state=?, \" + \"sign_days=? where username=?\"; try { PreparedStatementpstm = conn.prepareStatement(sql); pstm.setString(1, t.getPassword()); pstm.setInt(2, t.getExperience()); pstm.setString(3, t.getHeadImage()); pstm.setString(4, t.getPhone()); pstm.setString(5, t.getEmail()); } pstm.setInt(6, t.getState()); pstm.setInt(7, t.getSignDays()); pstm.setString(8, t.getUsername()); pstm.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { } DBUtil.close(conn); @Override publicvoid delete(VIP t) { } Connection conn = DBUtil.getConnection(); String sql = \"delete from vip where username='\"+t.getUsername()+\"'\"; try { conn.createStatement().executeUpdate(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { } DBUtil.close(conn); @Override public VIP getObject(String id) { String sql = \"select username, password, experience, head_image, \" + } \"phone, email, state, regist_time, sign_days from vip \" + \"where username='\"+id+\"'\"; List //按主键查询,最多能查询一条记录,因此没有记录时,返回null if(vips.size()>0) { returnvips.get(0); } else { } returnnull; @Override public List String sql = \"select username, password, experience, head_image, \" + returngetObjects(sql, 0, Integer.MAX_VALUE); \"phone, email, state, regist_time, sign_days from vip\"; @Override public List // TODO Auto-generated method stub returngetObjects(sql, 0, Integer.MAX_VALUE); @Override public List //start从0开始 sql = sql + \" limit \"+start+\+range; 中 Connection conn = DBUtil.getConnection(); //创建一个集合,用于存放查询的数据 List ResultSetrs = conn.createStatement().executeQuery(sql); //循环遍历结果集,并将结果集中的每一行数据取出放到一个vip对象 while (rs.next()) { } //创建一个vip对象,用于存放一行数据 VIP vip = newVIP(); vip.setUsername(rs.getString(1)); vip.setPassword(rs.getString(2)); vip.setExperience(rs.getInt(3)); vip.setHeadImage(rs.getString(4)); vip.setPhone(rs.getString(5)); vip.setEmail(rs.getString(6)); vip.setState(rs.getInt(7)); vip.setRegistTime(rs.getTimestamp(8)); vip.setSignDays(rs.getInt(9)); //将一个vip对象放到集合中 vips.add(vip); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DBUtil.close(conn); } } } returnvips; @Override public List String sql = \"select username, password, experience, head_image, \" + returngetObjects(sql, start, range); \"phone, email, state, regist_time, sign_days from vip\"; 在WebContent的文件下新建一个名为login的jsp文件。作为起始页: <%@pagelanguage=\"java\"contentType=\"text/html; charset=UTF-8\" pageEncoding=\"UTF-8\"%> functionshowError() { //如果error属性有值,说明有错误信息,显示div if('${error}'!='') { //得到div对象 vardivObj = document.getElementById(\"showDiv\"); //设置div的内容,innerHTML是设置一个元素开始标签和结束标签中 间的内容 } } divObj.innerHTML = '${error}'; //显示div divObj.style.display = 'block';
框所输入的内容,post不显示,get显示 密码