版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录先连接数据库:新建DBTest类代码如下: 1导入web.xml文件放在WEB-INF文件夹下,修改其内部代码: 2导入mysql.jar包放在lib文件夹下 3编写context.xml文件放入META-INF文件夹下,并修改内部代码: 3新建一个com.ambow.myweb.util的包 3新建DBUtil类: 3新建一个com.ambow.myweb.pojo的包 5新建一个VIP的类:根据数据库表中的列名,声明私有变量名(与列名相同,数据类型与数据库中数据类型相同),并同时生命get,set方法:部分代码: 5新建一个com.ambow.myweb.dao的包 6新建一个名为BaseDao的接口,具体代码如下: 6在com.ambow.myweb.dao中另新建一个名为VIPDao的接口,并继承BaseDao接口,具体代码如下: 7新建一个包名为com.ambow.dao.impl; 7在此包中新建一个BaseDaoImpl抽象类去实现BaseDao的方法; 7在com.ambow.dao.impl;包中新建一个VIPDAOImpl的类 9在WebContent的文件下新建一个名为login的jsp文件。作为起始页: 14新建一个名为com.ambow.myweb.servlet的包; 16新建一个LoginServlet的类。 16新建com.ambow.myweb.factory;新建一个DAOFactory类 17新建一个server包;创建一个VIPServer接口 17新建一个server.impl包创建一个VIPServerImpl类 18在factory包中新建一个ServerFactory的类。 19在loginservlet中写进入主页代码 19先连接数据库:新建DBTest类代码如下:packagecom.ambow.myweb.test;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassDBTest{ publicstaticvoidmain(String[]args){ try{ Class.forName("com.mysql.jdbc.Driver"); Connectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root",""); System.out.println(conn); }catch(ClassNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } }}导入web.xml文件放在WEB-INF文件夹下,修改其内部代码:<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"version="3.0"> <servlet>最后配置 <servlet-name>login</servlet-name> <servlet-class>com.ambow.bbs.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping></web-app>导入mysql.jar包放在lib文件夹下编写context.xml文件放入META-INF文件夹下,并修改内部代码:<?xmlversion="1.0"encoding="UTF-8"?><Context><Resourcename="jdbc/myweb"//myweb为工程名 auth="Container" 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"/></Context>新建一个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)的根 Contextcontext=(Context)newInitialContext().lookup("java:comp/env"); //从JNDI根上查找目标数据库连接池 dataSource=(DataSource)context.lookup("jdbc/bbs"); }catch(NamingExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicstaticConnectiongetConnection(){ Connectionconn=null; try{ //从连接池中取一个连接 conn=dataSource.getConnection(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnconn; } publicstaticvoidclose(Connectionconn){ if(conn!=null){ try{ //将连接还回连接池中 conn.close(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }}新建一个com.ambow.myweb.pojo的包新建一个VIP的类:根据数据库表中的列名,声明私有变量名(与列名相同,数据类型与数据库中数据类型相同),并同时生命get,set方法:部分代码:publicclassVIP{ privateStringusername; privateStringpassword; privateintexperience;publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicintgetExperience(){ returnexperience; } publicvoidsetExperience(intexperience){ this.experience=experience; }新建一个com.ambow.myweb.dao的包新建一个名为BaseDao的接口,具体代码如下:packagecom.ambow.myweb.dao;importjava.util.List;/**泛型接口,用于定义DAO层所有表的CRUD*T:表的类型*ID:表的主键类型*此接口的所有CRUD行为都是基于对象的*/publicinterfaceBaseDAO<T,ID>{ //增删改 voidadd(Tt); voidupdate(Tt); voiddelete(Tt); //根据主键查找一个对象 TgetObject(IDid); //查所有对象 List<T>getObjectsAll(); //根据sql语句查询对象 List<T>getObjects(Stringsql); //有条件的分页查询 List<T>getObjects(Stringsql,intstart,intrange); //无条件分页查询 List<T>getObjectsAll(intstart,intrange); //根据sql语句计算查询总记录数 intgetCount(Stringsql);}在com.ambow.myweb.dao中另新建一个名为VIPDao的接口,并继承BaseDao接口,具体代码如下:packagecom.ambow.myweb.dao;importcom.ambow.myweb.pojo.VIP;/**针对vip表的CRUD的定义*BaseDAO中的所有T,在这里替换成了VIP*BaseDAO中的所有ID,在这里替换成了String*/publicinterfaceVIPDaoextendsBaseDAO<VIP,String>{}新建一个包名为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<T,ID>implementsBaseDAO<T,ID>{ @Override //?????????为什么用到抽象类//根据sql语句计算查询总记录数 publicintgetCount(Stringsql){ Connectionconn=DBUtil.getConnection(); try{ //得到容器对象 Statementstm=conn.createStatement(); //发送sql语句,得到结果 ResultSetrs=stm.executeQuery(sql); //遍历结果集 if(rs.next()){ returnrs.getInt(1); } }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } return0; }}在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<VIP,String> implementsVIPDao{ @Override publicvoidadd(VIPt){ Connectionconn=DBUtil.getConnection(); Stringsql="insertintovipvalues(?,?,0,?,?,?,?,?,0)"; try{ PreparedStatementpstm=conn.prepareStatement(sql); pstm.setString(1,t.getUsername()); 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(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ DBUtil.close(conn); } } @Override publicvoidupdate(VIPt){ Connectionconn=DBUtil.getConnection(); //注册时间不能修改 Stringsql="updatevipsetpassword=?,experience=?,"+ "head_image=?,phone=?,email=?,state=?,"+ "sign_days=?whereusername=?"; 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(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ DBUtil.close(conn); } } @Override publicvoiddelete(VIPt){ Connectionconn=DBUtil.getConnection(); Stringsql="deletefromvipwhereusername='"+t.getUsername()+"'"; try{ conn.createStatement().executeUpdate(sql); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ DBUtil.close(conn); } } @Override publicVIPgetObject(Stringid){ Stringsql="selectusername,password,experience,head_image,"+ "phone,email,state,regist_time,sign_daysfromvip"+ "whereusername='"+id+"'"; List<VIP>vips=getObjects(sql); //按主键查询,最多能查询一条记录,因此没有记录时,返回null if(vips.size()>0){ returnvips.get(0); }else{ returnnull; } } @Override publicList<VIP>getObjectsAll(){ Stringsql="selectusername,password,experience,head_image,"+ "phone,email,state,regist_time,sign_daysfromvip"; returngetObjects(sql,0,Integer.MAX_VALUE); } @Override publicList<VIP>getObjects(Stringsql){ //TODOAuto-generatedmethodstub returngetObjects(sql,0,Integer.MAX_VALUE); } @Override publicList<VIP>getObjects(Stringsql,intstart,intrange){ //start从0开始 sql=sql+"limit"+start+","+range; Connectionconn=DBUtil.getConnection(); //创建一个集合,用于存放查询的数据 List<VIP>vips=newArrayList<VIP>(); try{ ResultSetrs=conn.createStatement().executeQuery(sql); //循环遍历结果集,并将结果集中的每一行数据取出放到一个vip对象中 while(rs.next()){ //创建一个vip对象,用于存放一行数据 VIPvip=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(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ DBUtil.close(conn); } returnvips; } @Override publicList<VIP>getObjectsAll(intstart,intrange){ Stringsql="selectusername,password,experience,head_image,"+ "phone,email,state,regist_time,sign_daysfromvip"; returngetObjects(sql,start,range); }}在WebContent的文件下新建一个名为login的jsp文件。作为起始页:<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>Inserttitlehere</title><scripttype="text/javascript"> functionshowError(){ //如果error属性有值,说明有错误信息,显示div if('${error}'!=''){ //得到div对象 vardivObj=document.getElementById("showDiv"); //设置div的内容,innerHTML是设置一个元素开始标签和结束标签中间的内容 divObj.innerHTML='${error}'; //显示div divObj.style.display='block'; } }</script></head><bodyonload="showError()"><center> <divid="showDiv"style="display:none;color:red"></div> <formaction="login"method="post">//post、get能在地址栏里显示不显示文本框所输入的内容,post不显示,get显示 <tablewidth="30%"> <tr> <tdwidth="20%">用户名</td> <td><inputtype="text"name="username"value=""size="20"/></td> </tr> <tr> <td>密码</td> <td><inputtype="password"name="password"value=""size="21"/></td> </tr> <tr> <tdcolspan="2"align="right"> <ahref="#">忘记密码</a> <ahref="#">注册</a> </td> </tr> <tr> <tdcolspan="2"align="center"> <inputtype="submit"value="登陆"> </td> </tr> </table> </form></center></body></html>新建一个名为com.ambow.myweb.servlet的包;新建一个LoginServlet的类。publicclassLoginServletextendsHttpServlet{ @Override protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doPost(request,response); } @Override protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ //设置请求和响应的编码方式 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); //获取上传参数,参数名和表单中数据的name属性一致 Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password");//所有的都这么写新建com.ambow.myweb.factory;新建一个DAOFactory类代码如下:packagecom.ambow.myweb.factory;importcom.ambow.myweb.dao.VIPDao;importcom.ambow.myweb.dao.impl.VIPDAOImpl;publicclassDAOFactory{ publicstaticVIPDaogetVipdao(){ returnnewVIPDAOImpl(); }}新建一个server包;创建一个VIPServer接口packagecom.ambow.bbs.server;importcom.ambow.bbs.pojo.VIP;publicinterfaceVIPServer{ VIPlogin(Stringusername,Stringpassword); /* *添加一个查看某个用户是否存在的方法定义 *形参:用户名 *返回:用户邮箱 */ StringfindEmailByUsername(Stringusername);}新建一个server.impl包创建一个VIPServerImpl类packagecom.ambow.myweb.server.impl;importjava.util.List;importcom.ambow.myweb.dao.VIPDao;importcom.ambow.myweb.factory.DAOFactory;importcom.ambow.myweb.pojo.VIP;importcom.ambow.myweb.server.VIPServer;publicclassVIPServerImplim
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 活动2 学做凉拌菜教学设计小学劳动粤教版劳动与技术三年级-粤教版(劳动与技术)
- 七年级生物下册 第三章 人体的呼吸 第一节 呼吸道对空气的处理教学设计 (新版)新人教版
- 六年级上信息技术教学设计-声音片段巧截取-泰山版
- 人教版高一物理必修一第二章第四节匀变速直线运动的位移与速度的关系教学设计
- 2025年报关员面试题目及答案
- 2025年园艺植物育种与遗传面试题目及答案
- 2026年初中英语教师资格《学科素养》专项训练
- 2026年初中英语教师岗位能力测试试卷
- 智慧海洋海洋水下机器人自主避障系统验收规范
- 2026年导游业务考试题(附答案)
- 2025年教师招聘考试(心理健康教育)(中小学)综合能力测试题及答案
- 2026新版生产安全事故应急预案+两个报告
- 2025年海南三沙市事业单位公开招聘笔试试卷(含完整答案解析)
- 江苏盐城东台市2026年专职网格员招聘考试试卷-含答案解析
- 2026年消化系统内镜报告规范解读手册
- 2026年南昌县医疗健康集团县120急救中心自主招聘16人考试备考题库及答案详解
- 2026年CCAA国家注册审核员考试(有机产品认证基础)复习题及答案
- 2025年国家文物保护工程监理师考试试卷(附答案)
- 2026内蒙古工程建设行业供需现状调研及战略发展规划分析报告
- 2026年人教部编版新教材语文四年上册全册教案设计(含教学计划)
- 药剂师招聘笔试题试题集详解
评论
0/150
提交评论