和上一次的并没胡什么不同,也就是多了一个使用ant初始化mysql数据库
目录结构:
D:\code\kongee\ant_web_three λ tree /f 卷 软件 的文件夹 PATH 列表 卷序列号为 000D-CD8E D:. │ .classpath │ .project │ build.xml │ studentbak.sql │ ├─.settings │ .jsdtscope │ org.eclipse.jdt.core.prefs │ org.eclipse.wst.common.component │ org.eclipse.wst.common.project.facet.core.xml │ org.eclipse.wst.jsdt.ui.superType.container │ org.eclipse.wst.jsdt.ui.superType.name │ ├─src │ └─com │ └─laolang │ ├─dao │ │ IStudentDao.java │ │ StudetDao.java │ │ │ ├─modle │ │ Student.java │ │ │ ├─servlet │ │ HelloServlet.java │ │ ShowServlet.java │ │ │ └─util │ DButil.java │ student-sql.properties │ └─WebContent │ hello.jsp │ index.jsp │ show.jsp │ ├─META-INF │ MANIFEST.MF │ └─WEB-INF │ web.xml │ └─lib mysql-connector-java-5.1.28-bin.jar D:\code\kongee\ant_web_three λ
代码:
modle
com.laolang.modle.Student
package com.laolang.modle; public class Student { public Student() { super(); } public Student(String name, int age, String sex) { super(); this.name = name; this.age = age; this.sex = sex; } public Student(int id, String name, int age, String sex) { super(); this.id = id; this.name = name; this.age = age; this.sex = sex; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } private int id; private String name; private int age; private String sex; }
dao
IStudentDao
package com.laolang.dao; import java.util.List; import com.laolang.modle.Student; public interface IStudentDao { public List<Student> selectAll() ; }
StudentDao
package com.laolang.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.laolang.modle.Student; import com.laolang.util.DButil; public class StudetDao implements IStudentDao { @Override public List<Student> selectAll() { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; List<Student> stus = new ArrayList<Student>(); try { conn = DButil.getConnection(); String sql = "select stuid,stuname,stuage,stusex from student"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while( rs.next() ){ Student stu = new Student(); stu.setId(rs.getInt("stuid")); stu.setName(rs.getString("stuname")); stu.setAge(rs.getInt("stuage")); stu.setSex(rs.getString("stusex")); stus.add(stu); } } catch (SQLException e) { e.printStackTrace(); }finally{ DButil.close(rs); DButil.close(ps); DButil.close(conn); } return stus; } }
util
student-sql.properties
jdbc.url=jdbc:mysql://localhost:3306/student jdbc.username=root jdbc.userpassword=root jdbc.driver=com.mysql.jdbc.Driver
com.laolang.util.DButil
package com.laolang.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ResourceBundle; public class DButil { /** 数据库连接地址 */ private static String URL; /** 数据库用户名 */ private static String USERNAME; /** 数据库密码 */ private static String USERPASSWORD; /** mysql 驱动 */ private static String DRIVER; /** The rb. */ private static ResourceBundle rb = ResourceBundle .getBundle("com.laolang.util.student-sql"); /** * 使用静态代码块加载驱动 */ static { URL = rb.getString("jdbc.url"); USERNAME = rb.getString("jdbc.username"); USERPASSWORD = rb.getString("jdbc.userpassword"); DRIVER = rb.getString("jdbc.driver"); try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { Connection con = null; con = DriverManager.getConnection(URL, USERNAME, USERPASSWORD); return con; } public static void close(Connection con) { try { if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void close(PreparedStatement ps) { try { if (ps != null) ps.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void close(ResultSet rs) { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } } }
servlet
com.laolang.servlet.HelloServlet
package com.laolang.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("hello", "world"); RequestDispatcher dis = request.getRequestDispatcher("hello.jsp"); dis.forward(request, response); } }
com.laolang.servlet.ShowServlet
package com.laolang.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.laolang.dao.IStudentDao; import com.laolang.dao.StudetDao; import com.laolang.modle.Student; /** * Servlet implementation class ShowServlet */ public class ShowServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ShowServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { IStudentDao dao = new StudetDao(); List<Student> stus = dao.selectAll(); for( Student stu : stus ){ System.out.println(stu); } request.setAttribute("stus", stus); request.getRequestDispatcher("show.jsp").forward(request, response); } }
jsp
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> This is a jsp page! <br /> <a href="hello.do">hello</a> <br /> <a href="show.do">show</a> </body> </html>
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>Hello:${hello }</h1> </body> </html>
show.jsp
<%@page import="java.util.List"%> <%@page import="com.laolang.modle.Student"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <table border="1"> <tr> <th>学号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> <% //@SuppressWarnings("unchecked") List<Student> stus = (List<Student>)request.getAttribute("stus"); for( Student stu : stus){ %> <tr> <td><%=stu.getId() %></td> <td><%=stu.getName() %></td> <td><%=stu.getAge() %></td> <td><%=stu.getSex() %></td> </tr> <% } %> </table> </body> </html>
sql
studentbak.sql
/* SQLyog Ultimate v11.11 (64 bit) MySQL - 5.5.38 : Database - student ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=‘‘*/; /*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @[email protected]@SQL_MODE, SQL_MODE=‘NO_AUTO_VALUE_ON_ZERO‘ */; /*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`student` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `student`; /*Table structure for table `student` */ DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `stuid` int(11) NOT NULL AUTO_INCREMENT, `stuname` varchar(20) DEFAULT NULL, `stuage` int(11) DEFAULT NULL, `stusex` varchar(2) DEFAULT NULL, PRIMARY KEY (`stuid`) ) ENGINE=InnoDB AUTO_INCREMENT=1006 DEFAULT CHARSET=utf8; /*Data for the table `student` */ insert into `student`(`stuid`,`stuname`,`stuage`,`stusex`) values (1001,‘xiaodaima‘,24,‘男‘),(1002,‘小叶子‘,25,‘女‘),(1003,‘老狼‘,34,‘男‘),(1004,‘龙女‘,43,‘女‘),(1005,‘天涯‘,18,‘男‘); /*insert into `student`(`stuid`,`stuname`,`stuage`,`stusex`) values (1001,‘小代码‘,24,‘男‘),(1002,‘小叶子‘,25,‘女‘),(1003,‘老狼‘,34,‘男‘),(1004,‘龙女‘,43,‘女‘),(1005,‘天涯‘,18,‘男‘);*/ /*!40101 SET [email protected]_SQL_MODE */; /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; /*!40014 SET [email protected]_UNIQUE_CHECKS */; /*!40111 SET [email protected]_SQL_NOTES */;
build.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="ant_web_hello"> <!-- java源代码目录 --> <property name="src.dir" location="src" /> <!-- 构建目录 --> <property name="build.dir" location="build" /> <!-- class文件目录 --> <property name="build.classes" location="${build.dir}/classes" /> <!-- 打包目录 --> <property name="build.war" location="${build.dir}/war" /> <!-- tomcat根目录 --> <property name="tomcat.home" location="D:\program\program\java\tomcat\tomcat" /> <!-- <property name="tomcat.lib" location="${tomcat.home}/lib" /> --> <!-- web 应用的名字,也是打包后war的名字 --> <property name="web.name" value="anthello2" /> <!-- web 根目录 --> <property name="web.root" value="webContent" /> <property name="web.WEB-INF" location="${web.root}/WEB-INF" /> <property name="web.lib" location="${web.WEB-INF}/lib" /> <property name="mysqldriver" location="${web.lib}/mysql-connector-java-5.1.28-bin.jar" /> <!-- 加载环境变量 --> <property environment="env" /> <!-- 定义编译时的classpath --> <path id="compile.path"> <fileset dir="${web.lib}" includes="*.lib"> </fileset> <fileset dir="${env.tomcat_home}/lib"> <include name="*.jar" /> </fileset> </path> <target name="init" description="初始化"> <mkdir dir="${build.dir}" /> <mkdir dir="${build.classes}" /> <mkdir dir="${build.war}" /> <echo>初始化工作结束!</echo> </target> <target name="compile" depends="init" description="编译"> <javac destdir="build/classes" srcdir="src" includeantruntime="false" fork="true"> <compilerarg line="-encoding UTF-8 " /> <classpath refid="compile.path" /> </javac> <echo message="编译完成!" /> </target> <target name="war" depends="compile" description="打包war文件"> <war destfile="${build.war}/${web.name}.war"> <fileset dir="${web.root}" includes="**/*.*" /> <lib dir="${web.lib}" /> <webinf dir="${web.WEB-INF}" /> <classes dir="${build.classes}" /> </war> <echo>打包完成!</echo> </target> <!-- 此处有问题,如果使用classpath refid="compile.path" 会提示 Class Not Found: JDBC driver com.mysql.jdbc.Driver could not be loaded <presetdef name="sql-admin"> <sql userid="root" password="root" url="jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8" driver="com.mysql.jdbc.Driver"> <classpath refid="compile.path"> </classpath> </sql> </presetdef> --> <presetdef name="mysql-admin"> <sql userid="root" password="root" url="jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8" driver="com.mysql.jdbc.Driver" classpath="${mysqldriver}" print="true" encoding="utf-8"> </sql> </presetdef> <target name="mysql-init" description="初始化数据库"> <mysql-admin> <transaction src="studentbak.sql" /> </mysql-admin> <echo>数据库初始化完成!</echo> </target> <target name="mysql-test" depends="mysql-init" description="数据库测试"> <mysql-admin> <transaction> use student; select database(); show tables; select * from student; </transaction> </mysql-admin> <echo>数据库测试完成!</echo> </target> <target name="testenv" description="测试环境变量"> <echo>JAVA_HOME:${env.JAVA_HOME}</echo> <echo>CLASSPATH:${env.CLASSPATH}</echo> <echo>tomcat_home:${env.tomcat_home}</echo> <echo>${web.lib}</echo> <echo>${mysqldriver}</echo> </target> <target name="deploy" depends="mysql-test,war" description="发布"> <copy todir="${env.tomcat_home}/webapps"> <fileset dir="${build.war}" includes="*.war" /> </copy> <echo>已发布到Tomcat!</echo> </target> <target name="clean" description="清理"> <delete dir="${build.dir}" /> <delete dir="${env.tomcat_home}/webapps/${web.name}" /> <delete file="${env.tomcat_home}/webapps/${web.name}.war" /> <echo>清理完成!</echo> </target> </project>
执行过程:
D:\code\kongee\ant_web_two>ant deploy Buildfile: D:\code\kongee\ant_web_two\build.xml mysql-init: [mysql-admin] Executing resource: D:\code\kongee\ant_web_two\studentbak.sql [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 1 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 5 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 0 rows affected [mysql-admin] 15 of 15 SQL statements executed successfully [echo] 数据库初始化完成! mysql-test: [mysql-admin] Executing commands [mysql-admin] 0 rows affected [mysql-admin] database() [mysql-admin] student [mysql-admin] [mysql-admin] 0 rows affected [mysql-admin] TABLE_NAME [mysql-admin] student [mysql-admin] [mysql-admin] 0 rows affected [mysql-admin] stuid,stuname,stuage,stusex [mysql-admin] 1001,xiaodaima,24,男 [mysql-admin] 1002,小叶子,25,女 [mysql-admin] 1003,老狼,34,男 [mysql-admin] 1004,龙女,43,女 [mysql-admin] 1005,天涯,18,男 [mysql-admin] [mysql-admin] 0 rows affected [mysql-admin] 4 of 4 SQL statements executed successfully [echo] 数据库测试完成! init: [mkdir] Created dir: D:\code\kongee\ant_web_two\build [mkdir] Created dir: D:\code\kongee\ant_web_two\build\classes [mkdir] Created dir: D:\code\kongee\ant_web_two\build\war [echo] 初始化工作结束! compile: [javac] Compiling 6 source files to D:\code\kongee\ant_web_two\build\classes [echo] 编译完成! war: [war] Building war: D:\code\kongee\ant_web_two\build\war\anthello.war [echo] 打包完成! deploy: [copy] Copying 1 file to D:\program\program\java\tomcat\tomcat\webapps [echo] 已发布到Tomcat! BUILD SUCCESSFUL Total time: 6 seconds D:\code\kongee\ant_web_two>
在firefox中的运行效果:
index.jsp
hello.do
show.do
修改studentbak.sql将xiaodaima修改为小代码
问题:
1、关于ant的构建目录和eclipse class的存放目录
由于使用ant时构建目录在build,而eclipse的class存放目录也是在build,所以每次使用ant进行部署时,必须在eclipse中进行project->clean操作才可以,否则出现下面的错误
我不理解这到底是为什么,如果说是由于eclipse自动编译的class文件的问题,那么为什么HelloServlet就没有问题?
PS:这里说的clean是指:在进行ant deploy之前,必须要clean,且clean后不能在eclipse中进行任何操作,否则要再次clean,不然还是会出现上图中的错误,我修改了ant的构建目录后,依然不行,这个问题让我很不解,有哪个高手指点下?
2、关于ant 中的sql
使用ant进行mysql操作的时候,不能使用path定义的classpath,也就是说在sql中不能使用classpathref,而应该使用property指向mysql的jar包的相对路径,再在sql中使用classpath引用 这个property,否则会出现Class Not Found: JDBC driver com.mysql.jdbc.Driver could not be loaded
如果想要显示sql的执行结果,可以将print指定为true
时间: 2024-11-03 21:00:40