说明书(项目搭建)_第1页
说明书(项目搭建)_第2页
说明书(项目搭建)_第3页
说明书(项目搭建)_第4页
说明书(项目搭建)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、小工具2JdbcUtilsJdbcUtils用来获取Connection对象,以及开启和关闭事务。l Connection getConnection():从c3p0连接池获取Connection对象,所以需要提供c3p0-config.xml配置文件;l beginTransaction():为当前线程开启事务;l commitTransaction():提交当前线程的事务;l rollbackTransaction():回滚当前线程的事务;l releaseConnection(Connection):如果参数连接对象不是当前事务的连接对象,那么关闭它,否则什么都不做;c3p0-confi

2、g.xml<?xml version="1.0" encoding="UTF-8" ?><c3p0-config><default-config> <property name="jdbcUrl">jdbc:mysql:/localhost:3306/mydb1</property><property name="driverClass">com.mysql.jdbc.Driver</property><property na

3、me="user">root</property><property name="password">123</property><property name="acquireIncrement">3</property><property name="initialPoolSize">10</property><property name="minPoolSize">2</propert

4、y><property name="maxPoolSize">10</property></default-config></c3p0-config>JdbcUtilsTest.java/* * 测试JdbcUtils类 * author qdmmy6 * */工欲善其事,必先利其器。下面我们来介绍一下在项目中要使用的小工具(itcast-tools-1.4.jar)。这个小工具底层使用了:l c3p0数据库连接池;l common-beanutils;l common-dbutils;l javaMail;1Commo

5、nUtilsCommonUtils类就两个方法:l String uuid():生成长度32的随机字符,通常用来做实体类的ID。底层使用了UUID类完成;l T toBean(Map, Class<T>):把Map转换成指定类型的Bean对象。通常用来获取表单数据(request.getParameterMap())封装到JavaBean中,底层使用了common-beanutils。注意,本方法要求map中键的名称要与Bean的属性名称相同才能完成映射,否则不能完成映射。/* * 随机生成32位长的字符串,通常用来做实体类的ID */Testpublic void testUui

6、d() String s = CommonUtils.uuid();/生成随机32位长的字符串System.out.println(s);/* * 把Map类型映射成Bean类型。 * 要求map中键的名称与Person类的属性名称相同。 * 即map的key分别为:pid、name、age、birthday,person的属性名称也是pid、name、age、birthday */Testpublic void testToBean() Map<String,String> map = new HashMap<String,String>();/* * map的key

7、:pid、age、birthday、myname * person的属性:pid、age、birthday、name * map中没有名为name的键值,而多出一个名为myname的键值,所以映射后的person对象Person p = CommonUtils.toBean(map, Person.class);System.out.println(p);public class JdbcUtilsTest /* * 通过C3P0连接池获取连接对象 * throws SQLException */Testpublic void testGetConnection() throws SQLExc

8、eption Connection con = JdbcUtils.getConnection();/获取连接System.out.println(con);JdbcUtils.releaseConnection(con);/如果参数con不是当前线程的连接对象,那么关闭之/* * 当开始事务后,调用getConnection()会为当前线程创建Connection,而且多次调用getConnection()返回的是同一个对象 * throws SQLException */Testpublic void testTansaction() throws SQLException JdbcUti

9、ls.beginTransaction();/开启事务Connection c1 = JdbcUtils.getConnection();/第一次获取当前线程的事务连接对象Connection c2 = JdbcUtils.getConnection();/第二次获取当前线程的事务连接对象Assert.assertEquals(true, c1 = c2);/比较两次是否相同JdbcUmitTransaction();/提交事务3TxQueryRunnerTxQueryRunner类是common-dbutils下QueryRunner类的子类,用来简化JDBC操作。TxQueryRunner

10、类内部使用了JdbcUtils.getConnection()类来获取连接对象,以及使用JdbcUtils.releaseConnection()关闭连接的name属性值为null。 * map中的age和birthday都是字符串类型,而person的age是int类型、birthday是Date类型,但toBean()方法会自动对Map中值进行类型转换。 */map.put("pid", CommonUtils.uuid();map.put("age", "23");map.put("birthday", &q

11、uot;2014-01-30");map.put("myname", "张三");。l int batch(String sql, Object params):执行批处理,参数sql是SQL语句模板,params为参数;l T query(String sql, ResultSetHandler<T> rh):执行查询,执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果;l T query(String sql, ResultSetHandler<T> rh, Object p

12、arams):执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果,params是sql语句的参数;l int update(String sql):执行增、删、改语句,参数sql是要执行的SQL语句;l int update(Stringsql, Object param)l 字段说明pid主键name姓名age年龄birthday生日Person.javapublic class Person private String pid;private String name;private int age;private Date birthday;Pe

13、rsonDao.java/* * 测试TxQueryRunner * author qdmmy6 * */public class PersonDao private QueryRunner qr = new TxQueryRunner();public void add(Person person) throws SQLException String sql = "insert into t_person values(?,?,?,?)"Object params = person.getPid(), person.getName(), person.getAge(),

14、 new java.sql.Date(person.getBirthday().getTime();qr.update(sql, params);public void edit(Person person) throws SQLException String sql = "update t_person set name=?,age=?,birthday=? where pid=?"Object params = person.getName(), person.getAge(), new java.sql.Date(person.getBirthday().getTi

15、me(),person.getPid();qr.update(sql, params);public void delete(String pid) throws SQLException String sql = "delete from t_person where pid=?"qr.update(sql, pid);public Person load(String pid) throws SQLException String sql = "select * from t_person where pid=?"return qr.query(sq

16、l, new BeanHandler<Person>(Person.class), pid);public List<Person> findAll() throws SQLException String sql = "select * from t_person"return qr.query(sql, new BeanListHandler<Person>(Person.class);l :执行增、删、改语句,参数sql是要执行的SQL语句,参数param是参数(一个参数);l int update(String sql, Obje

17、ct params):执行增、删、改语句,参数sql是要执行的SQL语句,参数params是参数(多个参数);为了测试TxQueryRunner,我们在mydb1数据库下创建t_person表,然后再创建Person实体类,以及PersonDao类,最后测试PersonDao类中的方法。t_personPersonDaoTest.javapublic class PersonDaoTest Testpublic void testAdd() throws SQLException Person p1 = new Person(CommonUtils.uuid(), "张三"

18、, 18, new Date();Person p2 = new Person(CommonUtils.uuid(), "李四", 81, new Date();Person p3 = new Person(CommonUtils.uuid(), "王五", 66, new Date();PersonDao dao = new PersonDao();dao.add(p1);dao.add(p2);dao.add(p3);Testpublic void testEdit() throws SQLException PersonDao dao = new

19、PersonDao();Person person = dao.load("2F371BE415984DE89781CCCA7B8734CB");person.setAge(88);dao.edit(person);Testpublic void testDelete() throws SQLException PersonDao dao = new PersonDao();dao.delete("2F371BE415984DE89781CCCA7B8734CB");Testpublic void testFindAll() throws SQLExce

20、ption PersonDao dao = new PersonDao();List<Person> list = dao.findAll();System.out.println(list);标页面。例如:l f:/index.jsp:其中f:表示转发,即forward的意思,/index.jsp表示转发到/index.jsp页面;l r:/index.jsp:其中r:表示重定向,即redirect的意思,/index.jsp表示重定向到/index.jsp页面。l null:表示不转发也不重定向;因为BaseServlet中可以有多个请求处理方法,所以在访问BaseServle

21、t时一定要给出名为method的参数来指定要请求的方法名称。AServlet.javapublic class AServlet extends BaseServlet /* * 请求处理方法的参数都与doGet()和doPost()相同,即request和response * 但请求处理4MailUtilsMailUtils是用来发邮件的小工具,底层使用JavaMail完成,所以它这件事mail.jar和activaion.jar。MailUtilsTest.java/* * 测试发送普通邮件 * throws IOException * throws MessagingException

22、*/Testpublic void fun() throws MessagingException, IOException Session session = MailUtils.createSession("", "itcast_cxf", "itcastitcast");创建sessionMail mail = new Mail("itcast_cxf", "itcast_cxf", "测试MailUtils", "这是正文!");创建邮箱对象,参数

23、分别为:发件人、收件人、主题、正文MailUtils.send(session, mail);发送邮件5BaseServletBaseServlet是用来作为其它Servlet父类的,它有如下两个优点:一个Servlet多个处理方法BaseServlet的作用是用来简化Servlet。通过我们需要为每个功能编写一个Servlet,例如用户注册写一个RegistServlet,用户登录写一个LoginServlet。如果使用BaseServlet,那么我们可以只写一个UserServlet,然后让UserServlet去继承BaseServlet,然后在UserServlet给出两个请求处理方法

24、,一个方法叫regist(),一个叫login()。BaseServlet来简化了Servlet中请求转发和重定向的代码。简化了请求转发和重定向的代码BaseServlet中的请求处理方法有一个String类型的返回值,返回值表示转发或重定向的目方法有String类型的返回值,而doGet()和doPost()没有返回值。 * 在请求本方法时需要给出method=regist参数! */public String regist访问本方法的URL为http:/localhost:8080/day01/AServlet?method=regist(HttpServletRequest req, H

25、ttpServletResponse resp)throws ServletException, IOException System.out.println("AServlet regist().");return "f:/index.jsp"转发到/index.jsp页面/* * 在请求本方法时需要给出method=login参数! */public String login访问本方法的URL为http:/localhost:8080/day01/AServlet?method=login(HttpServletRequest req, HttpSe

26、rvletResponse resp)throws ServletException, IOException System.out.println("AServlet login().");return "r:/index.jsp"重定向到/index.jsp;6 EncodingServlet/* * 测试EncodingFilter * author qdmmy6 * */public class EncodingServlet 因为添加了EncodingFilter过滤器,那么所有的Servlet都不用再去处理请求编码的问题了。extends B

27、aseServlet /* * 可以使用POST和GET两种方式请求test()方法!查看输出是否为乱码! */public String test(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String name = request.getParameter("name");System.out.println(name);return null;7VerifyCodeServlet(一次性验证码)通过在表单中总是需要使用一次性

28、验证码,这一问题可以使用VerifyCodeServlet来处理。让<img>元素的src指向VerifyCodeServlet即可在页面中生成一次性验证码。而且VerifyCodeServlet还会把验证码保存到session中,名称为:vCode,也就是说,你可以通过session来获取验证码文本:session.getAttribute(“vCode”)。web.xml<servlet> <servlet-name>VerifyCodeServlet</servlet-name> <servlet-class>cn.itcast

29、.vcode.servlet.VerifyCodeServlet</servlet-class></servlet><servlet-mapping> <servlet-name>VerifyCodeServlet</servlet-name> <url-pattern>/VerifyCodeServlet</url-pattern></servlet-mapping>MyJsp.jsp<form action= EncodingFilterEncodingFilter用来处理请求编码问题。我

30、们知道,如果是POST请求,我们需要调用request.setCharacterEncoding(“utf-8”)方法来设计编码;如果是GET请求,我们需要自己手动来处理编码问题。如果我们使用了EncodingFilter,那么就处理了POST和GET请求的编码问题。web.xml<filter><filter-name>EncdoingFilter</filter-name><filter-class>cn.itcast.filter.EncodingFilter</filter-class></filter><f

31、ilter-mapping><filter-name>EncdoingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>index.jsp<a href="<c:url value='/EncodingServlet?method=test请求EncdoingServlet的test方法&name=张三'/>">点击这里发出GET请求</a><br/><

32、;form action="<c:url value='/EncodingServlet'/>" method="post"> <input type="hidden" name="method" value="test"/>请求EncodingServlet的test方法 <input type="text" name="name" value="李四"/> <input

33、 type="submit" value="请求这里发出POST请求"/></form>"<c:url value='/UserServlet'/>" method="post"><input type="hidden" name="method" value="regist"/>验证码:<input type="text" name="verifyCode

34、"/><img src="<c:url value='/VerifyCodeServlet'/>"让<img>的src指向VerifyCodeServlet即可生成一次性验证码 border="1"/><br/><input type="submit" value="注册"/></form>因为用户可能看不清楚图片上的文本,所以我们需要给用户提供一个“换一张”超链接。其实实现这一步很简单,只需要使用javascript让<img>元素src指向VerifyCodeServlet即可。但因为浏览器可能会缓存上一次生成的图片,所以我们还需要使用时间为参数“强迫”浏览器访问服务器,而不是使用缓存。MyJsp.jsp<script type="text/javascript

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论