我 |
们可以在JSP中直接写代码,比如数据库的操作语句,把接收到的数据保存在数据库中,这样做的缺点是在JSP页面中会有很多的Java代码,看上去十分混乱,不便于维护和修改,对于大项目来说,这个缺点会更明显。为了解决问题,我们可以把业务代码封装在javaBean内,可以减少JSP的Java代码。这样的一种模式叫做:模式1。它分离了业务层[JavaBean]和表示层[JSP]。
任务:完成数据库数据的插入
步骤:
-
建立一个数据库表team。[id:int,key,autoincrement;name:varchar:slogan:varcha]。安装MySql=>打开Navicat=>在test数据库中建立team表,任意输入几个记录。
-
安装Tomcat7=>打开Eclipse->建立动态Web工程=>在Eclipse内部配置Tomcat7=>试验一个jsp以证明开发环境正常。
-
由于网站要用到Mysql,所以要将MySql的Java驱动放到Tomcat的Lib目录中。
-
做一个数据库的连接类database.DataSource,它的功能是连接到数据库,返回连接对象。以后要使用连接数据库只需调用下面的getConnection即可。
package database; import java.sql.Connection; import java.sql.DriverManager; publicclass DataSource { //这一句不太理解 publicstatic ConnectiongetConnection()throws Exception{ //在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机) Class.forName("com.mysql.jdbc.Driver"); 提供JDBC连接的URL 连接URL定义了连接数据库时的协议、子协议、数据源标识。 书写形式:协议:子协议:数据源标识 协议:在JDBC中总是以jdbc开始 子协议:是桥连接的驱动程序或是数据库管理系统名称。 数据源标识:标记找到数据库来源的地址与连接端口。 String url="jdbc:mysql://localhost:3306/ test?characterEncoding=utf-8"; String user="root"; String password="11"; /* 使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 密码来获得。 */ Connection cn=DriverManager.getConnection(url,user,password); return cn; } }
-
做一个JavaBean:Team用来对应数据库表team的每一条记录。放在bean.Team中。
package bean; publicclass Team { privateintid; private Stringname; private Stringslogan; publicint getId() { returnid; } publicvoid setId(int id) { this.id = id; } public StringgetName() { returnname; } publicvoid setName(String name) { this.name = name; } public StringgetSlogan() { returnslogan; } publicvoid setSlogan(String slogan) { this.slogan = slogan; } }
-
建立一个业务类business.TeamBusiness,里面封装了插入数据库表的具体代码。
publicclass TeamBusiness{ publicstaticvoid addTeam(Team team)throws Exception{ Connection cn=null; Statement stmt=null; try{ //这里又不太懂 cn=DataSource.getConnection(); //Statement用于执行静态 SQL语句并返回它所生成结果的对象。 //createStatement()创建一个Statement对象来将 SQL语句发送到数据库。 stmt=cn.createStatement(); stmt.executeUpdate("insertintoteam(name,slogan)values('"+team.getName()+"','"+team.getSlogan()+"')"); }catch(Exceptione){ throw e; } } }
-
后台的基础工作完成了,下面来完成前台工作。先做一个表单,用于填写名字和口号。
<!DOCTYPEhtmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=GBK"> <title>Insert titlehere</title> </head> <body> <formaction="test.jsp"method="post"> <p>组名:<inputtype="text"name="name"> <p>口号:<inputtype="text"name="slogan"> <p><inputtype="submit"> </form> </body> </html>
-
处理表单的jsp要:将表单数据取出,然后将表单数据装配成Team对象,最后调用业务类TeamBusiness的业务方法addTeam插入了数据。
<% request.setCharacterEncoding("GBK"); String nm=request.getParameter("name"); String slg=request.getParameter("slogan"); //out.print(nm+":"+slg+"<br>"); Team team=new Team(); //对象,存内容。team存在栈内存,内容存在对应堆内存的。 team.setName(nm); team.setSlogan(slg); try{ TeamBusiness.addTeam(team); //把对象内容传懂TeamBusiness里面 out.print("插入成功.<br>"); }catch(Exception e){ e.printStackTrace(); } %>
-
用jsp:javaBean指令读取表单,建立Team的实例
<%@pagelanguage="java"contentType="text/html;charset=GBK" pageEncoding="GBK"%> <%@pageimport="business.TeamBusiness"%> //这里插入包 <!DOCTYPEhtmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=GBK"> <title>Insert titlehere</title> </head> <body> //不一定准确的,可以想象,id的属性可以想象成class的代号,其他JAVABean标签通过这个代号可以接受和输出bean.Team中的值, 也可以理解成。Team team =newTeam() <jsp:useBeanid="team"class="bean.Team"/> <jsp:setPropertyname="team"property="*"/> //<jsp:setProperty>用于JAVABean中属性赋值,property="*" 将请求中属性和JAVABean中的属性进行的匹配,注意的是用这种方法,请求中的属性一定要和JAVABean中属性(具体好像是名字)相同 <% request.setCharacterEncoding("GBK"); try{ TeamBusiness.addTeam(team); out.print("插入成功.<br>"); }catch(Exception e){ e.printStackTrace(); } %> </body> </html>