【传智播客】Javaweb程序设计任务教程 黑马程序员 第7,8,9,10,11,12,13,14,15章 课后答案

it2023-09-04  311

所有章节答案合集——>传送门


第一部分是题目,向下翻, 第二部分是答案

第七章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、简述Javabean规范都有哪些?(至少写出2点)

2、简述定义EL标识符的规范。

3、请按要求编写一个c_ choose.jsp页面,使用<c:choose>、<c:when>和<c:otherwise>这三个标签完成多个条件选择的程序。 要求: 1)访问c_choose.jsp页面时不传递参数时,浏览器中显示的信息为unknown user 2)访问c_choose.jsp页面时传递一个参数username=itcast时,浏览器中显示的信息为itcast is a manager 3)访问c_choose.jsp页面时传递username参数为itcast以外的值时,浏览器中显示的信息为you are a manager

4、使用EL表达式和JSTL实现将文本框中的内容输出到页面的功能,在此页面的文本框中输入内容,单击页面提交按钮之后,输入框以及按钮消失,文本框中输入的内容显示到页面。

5、Person类为一个标准的JavaBean类,请设计一个程序,要求使用BeanUtils工具为Person对象赋值。 1)直接生成Person对象。 2)使用BeanUtils工具为name属性赋值”Tom”,age赋值为31。 3)使用BeanUtils工具取出属性值,并在控制台输出。


第八章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、简述过滤器的作用。

2、简述Servlet事件监听器的作用。(写出三点)

3、已知有一个名为MyServlet的程序,程序可向浏览器输出“Hello MyServlet”。请编写一个用于拦截MyServlet程序的MyFilter拦截器。

要求如下: 1)编写名为MyFilter的过滤器,过滤器可向浏览器输出“Hello MyFilter”。 2)编写web.xml文件,配置MyFilter对MyServlet的拦截。

4、如何对ServletContext、HttpSession和ServletRequest这三个域对象属性的变更进行监听?请用代码展示。


第九章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、请简述什么是JDBC。

2、简述JDBC的实现步骤。

3、请编写一个用于读取数据库中users表信息的JDBC程序,要求分别获取字段id、name、password和email字段的值。

4、请按照以下要求设计实现PreparedStatement对象的相关批处理操作。

要求如下: 1)指定所要执行的SQL语句如下: String sql = “INSERT INTO users(name,password) VALUES(?,?)”; 2) 编写JDBCUtils工具类,类中要包含获取连接和释放资源的方法。 3)编写Example02类,要求在类中使用JDBCUtils工具类获取连接和释放资源,并使用PreparedStatement对象批量添加5条记录。


第十章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、请思考数据库连接池的工作机制是什么? 2、简述DriverManager和DataSource中的getConnection()方法的区别。 3、请按照以下要求设计一个程序,用于将表中的第一条记录相关数据封装到对象数组中。 要求如下: 1)首先向user表中插入一条记录:INSERT INTO user(id,name,password) VALUES(1,‘zhangsan’,‘123456’); 2)已知存在BaseDao 类,且类中存在查询的query(String sql, ResultSetHandler<?> rsh, Object… params)方法。 3)编写ResultSetTest类,使用ResultSetHandler的相关实现类将查询结果封装到对象数组,并在控制台输出结果。 4、请按照以下要求设计一个程序,用于将表中的所有数据封装到对象数组中。 要求如下: 1)已知表中的相关记录

mysql> SELECT * FROM user; +----+----------+----------+ | id | name | password | +----+----------+----------+ | 1 | zhangsan | 123456 | | 2 | lisi | 123456 | | 3 | wangwu | 123456 | +----+----------+----------+

2)已知BaseDao 类中存在查询的query(String sql, ResultSetHandler<?> rsh, Object… params)方法。 3)编写ResultSetTest2类,使用ResultSetHandler的相关实现类将表中的所有记录封装到对象数组,并在控制台输出结果。


第十一章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、简述什么是MVC设计模式。

2、简述MVC设计模式中模型(Model)模块的作用。


第十二章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、请编写一个用于实现文件下载的程序,并且保证下载文件的文件名不能出现中文乱码问题。

2、请按照以下要求设计一个实现文件上传的类UploadServlet。 要求如下: 1)已知form.html文件中form表单内定义了一个名为name的文本框及名为myfile的文件域,具备文件上传的前提条件。 2)在doPost()方法中,写出文件上传的相关代码。 3)上传的文件保存在当前应用程序的upload文件夹下。

3、 实现文件上传的表单页面都需要哪些配置?

4、简述文件下载的实现原理。


第十三章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、请描述传智书城项目的开发环境。

2、请写出传智书城项目搭建所需要导入的jar包。

3、请按照以下要求写出c3p0-config.xml文件的配置。 信息如下: 1)数据库名itcaststore。 2)用户名root。 3)密码itcast。

4、请按照要求写出数据源工具类。 要求如下: 1)工具类名为DataSourceUtils。 2)工具类提供获取Connection对象、开启事务、提交事务、回滚事务。


第十四章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、请简要描述注册功能的设计思路。

2、请简要描述购物车模块的设计思路。

第十五章

【测一测】 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1、请简要描述一下商品管理模块的设计思路和实现流程。 2、请简要描述一下销量榜单下载功能的设计思路和实现流程。



答案

第七章

【答案】 1、Javabean规范如下: 1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的缺省构造方法。 2)它提供公共的setter方法和getter方法让外部程序设置和获取JavaBean的属性。 3)它是一个公有类。 4)通常需要实现java.io.Serializable,用于序列化。

2、EL标识符的规范如下: 1)可以由任意顺序的大小写字母、数字和下划线组成 2)不能以数字开头 3)不能是EL中的保留字,如and、or、gt; 4)不能是EL隐式对象,如pageContext; 5)不能包含单引号(’)、双引号(")、减号(-)和正斜线等特殊字符

3、c_ choose.jsp页面代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head></head> <body> <c:choose> <c:when test="${empty param.username}"> unKnown user. </c:when> <c:when test="${param.username=='itcast' }"> ${ param.username} is manager. </c:when> <c:otherwise> you are a employee. </c:otherwise> </c:choose> </body> </html>

4、页面代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>welcome</title> </head> <body> <form action="${pageContext.request.contextPath}/welcome.jsp"> <c:if test="${empty param.num1}"> name:<input type="text" name="num1"> <input type="submit" value="submit" /><br /> </c:if> <c:if test="${not empty param.num1}"> ${param.num1} welcome!!<br /> </c:if> </form> </body> </html>

5、该功能的实现步骤如下: 1)直接生成Person对象。 2)使用BeanUtils工具为name属性赋值”Tom”,age赋值为31。 3)使用BeanUtils工具取出属性值,并在控制台输出。 (1)Person类如下:

public class Person { private String name; private int age; 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; } }

(2)BeanUtilsDemo01类如下:

public class BeanUtilsDemo01 { public static void main(String[] args) throws Exception { Person p = new Person(); // 使用BeanUtils为属性赋值 BeanUtils.setProperty(p, "name", "Tom"); BeanUtils.setProperty(p, "age", 31); // 使用BeanUtils获取属性值 String name = BeanUtils.getProperty(p, "name"); String age = BeanUtils.getProperty(p, "age"); System.out.println("名字是" + name + ",今年" + age + "岁"); } }

第八章

【答案】 1、Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。

2、Servlet事件监听器的作用有如下几点: 1)监听Web应用程序中ServletContext、HttpSession和ServletRequest等域对象的创建和销毁过程。 2)监听ServletContext、HttpSession和ServletRequest等域对象属性的修改。 3)感知绑定到HttpSession域中某个对象的状态。

3、该功能的实现步骤如下: (1)创建MyServlet程序类。

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.getWriter().write("Hello MyServlet "); } public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doGet(request, response); } }

(2)创建过滤器MyFilter类。

import java.io.*; import javax.servlet.Filter; import javax.servlet.*; public class MyFilter implements Filter { public void destroy() { // 过滤器对象在销毁时自动调用,释放资源 } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用 PrintWriter out=response.getWriter(); out.write("Hello MyFilter"); } public void init(FilterConfig fConfig) throws ServletException { // 过滤器对象在初始化时调用,可以配置一些初始化参数 } }

(3)编写web.xml文件,设置对MyServlet的拦截

<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>cn.itcast.chapter08.servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> <filter> <display-name>MyFilter</display-name> <filter-name>MyFilter</filter-name> <filter-class>cn.itcast.chapter08.filter.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/MyServlet</url-pattern> </filter-mapping>

(4)启动服务器后,访问MyServlet,即可查看拦截效果。

4、该功能的实现步骤如下: (1)编写一个testattribute.jsp页面,以观察各个域对象属性事件监听器的作用。

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <title>Insert title here</title> </head> <body> <h3>这是一个测试对象属性信息监听器的页面</h3> <% getServletContext().setAttribute("username", "itcast"); getServletContext().setAttribute("username", "itheima"); getServletContext().removeAttribute("username"); session.setAttribute("username", "itcast"); session.setAttribute("username", "itheima"); session.removeAttribute("username"); request.setAttribute("username", "itcast"); request.setAttribute("username", "itheima"); request.removeAttribute("username"); %> </body> </html>

(2)编写一个MyAttributeListener类,该类实现了

ServletContextAttributeListener、HttpSessionAttributeListener和ServletRequestAttributeListener接口,并实现该接口中的所有方法。 public class MyAttributeListener implements ServletContextAttributeListener, HttpSessionAttributeListener, ServletRequestAttributeListener { public void attributeAdded(ServletContextAttributeEvent sae) { String name = sae.getName(); System.out.println("ServletContext添加属性:" + name + "=" + sae.getServletContext().getAttribute(name)); } public void attributeRemoved(ServletContextAttributeEvent sae) { String name = sae.getName(); System.out.println("ServletContext移除属性: " + name); } public void attributeReplaced(ServletContextAttributeEvent sae) { String name = sae.getName(); System.out.println("ServletContext替换属性:" + name + "=" + sae.getServletContext().getAttribute(name)); } public void attributeAdded(HttpSessionBindingEvent hbe) { String name = hbe.getName(); System.out.println("HttpSession添加属性:" + name + "=" + hbe.getSession().getAttribute(name)); } public void attributeRemoved(HttpSessionBindingEvent hbe) { String name = hbe.getName(); System.out.println("HttpSession移除属性: " + name); } public void attributeReplaced(HttpSessionBindingEvent hbe) { String name = hbe.getName(); System.out.println("HttpSession替换属性:" + name + "=" + hbe.getSession().getAttribute(name)); } public void attributeAdded(ServletRequestAttributeEvent sra) { String name = sra.getName(); System.out.println("ServletRequest添加属性:" + name + "=" + sra.getServletRequest().getAttribute(name)); } public void attributeRemoved(ServletRequestAttributeEvent sra) { String name = sra.getName(); System.out.println("ServletRequest移除属性: " + name); } public void attributeReplaced(ServletRequestAttributeEvent sra) { String name = sra.getName(); System.out.println("ServletRequest替换属性:" + name + "=" + sra.getServletRequest().getAttribute(name)); } }

(3)在web.xml文件中,部署 MyAttributeListener事件监听器。

<listener> <listener-class> cn.itcast.chapter08.listener.MyAttributeListener </listener-class> </listener>

(4)访问testattribute.jsp页面,查看控制台窗口的显示结果。


第九章

【答案】 1、JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等处理。

2、JDBC的实现步骤如下: 1)加载并注册数据库驱动 2)通过DriverManager获取数据库连接 3)通过Connection对象获取Statement对象 4)使用Statement执行SQL语句 5)操作ResultSet结果集 6)关闭连接,释放资源

3、该程序代码如下所示:

public class Example01 { public static void main(String[] args) throws SQLException { // 1. 注册数据库的驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); // 2.通过DriverManager获取数据库连接 String url = "jdbc:mysql://localhost:3306/jdbc"; String username = "root"; String password = "itcast"; Connection conn = DriverManager.getConnection(url, username, password); // 3.通过Connection对象获取Statement对象 Statement stmt = conn.createStatement(); // 4.使用Statement执行SQL语句。 String sql = "select * from users"; ResultSet rs = stmt.executeQuery(sql); // 5. 操作ResultSet结果集 System.out.println("id | name | password | email |"); while (rs.next()) { int id = rs.getInt("id"); // 通过列名获取指定字段的值 String name = rs.getString("name"); String psw = rs.getString("password"); String email = rs.getString("email"); System.out.println(id + " | " + name + " | " + psw + " | " + email); } // 6.回收数据库资源 rs.close(); stmt.close(); conn.close(); } }

4、该功能的实现步骤如下: (1)JDBCUtils工具类的代码如下所示:

import java.sql.*; public class JDBCUtils { // 加载驱动,并建立数据库连接 public static Connection getConnection() throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/jdbc"; String username = "root"; String password = "itcast"; Connection conn = DriverManager.getConnection(url, username, password); return conn; } // 关闭数据库连接,释放资源 public static void release(Statement stmt, Connection conn) { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } public static void release(ResultSet rs, Statement stmt, Connection conn){ if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } release(stmt, conn); } } (2)Example02的代码如下所示: public class Example02{ public static void main(String[] args) { Connection conn = null; PreparedStatement preStmt = null; try { // 加载并注册数据库驱动 conn=JDBCUtils.getConnection(); String sql = "INSERT INTO users(name,password)VALUES(?,?)"; preStmt = conn.prepareStatement(sql); for (int i = 0; i < 5; i++) { preStmt.setString(1, "name" + i); preStmt.setString(2, "password" + i); preStmt.addBatch(); } preStmt.executeBatch(); } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 JDBCUtils.release(null, preStmt, conn); } } }

第十章

【答案】 1、数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是直接创建Connection,而是向连接池“申请”一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。

2、DriverManager和DataSource中的getConnection()方法的区别如下: 1)DriverManager每次调用getConnection方法都会初始化一个新的连接,而DataSource的getConnection只是从池中取出一个已存在的连接 2)DriverManager的close()是释放Connection,而DataSource的close()只会把Connection归还给连接池。

3、ResultSetTest类的实现代码如下:

public class ResultSetTest { public static void testArrayHandler() throws SQLException { BaseDao basedao = new BaseDao(); String sql = "select * from user where id=?"; Object[] arr = (Object[]) basedao.query(sql, new ArrayHandler(), new Object[] { 1 }); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ", "); } } public static void main(String[] args) throws SQLException { testArrayHandler(); } }

4、ResultSetTest2类的实现代码如下:

public class ResultSetTest2 { public static void testArrayListHandler() throws SQLException { BaseDao basedao = new BaseDao(); String sql = "select * from user"; List list = (List) basedao.query(sql, new ArrayListHandler()); Object[] arr = (Object[]) list.get(0); Object[] arr1 = (Object[]) list.get(1); Object[] arr2 = (Object[]) list.get(2); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ", "); } for (int i = 0; i < arr1.length; i++) { System.out.print(arr1[i] + ", "); } for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + ", "); } } public static void main(String[] args) throws SQLException { testArrayListHandler(); } }

第十一章

【答案】 1、MVC设计模式是编程语言的一种软件设计模式,提供了一种按功能对软件进行模块划分的方法。MVC设计模式将软件程序分为三个核心模块:模型(Model)、视图(View)和控制器(Controller)。

2、MVC设计模式中模型(Model)模块的作用如下: 1)管理应用程序的业务数据。 2)定义访问控制和修改这些数据的业务规则。 3)当模型的状态发生改变时,它会通知视图发生改变,并为视图提供查询模型状态的方法。


第十二章

【答案】 1、该功能的实现步骤如下: (1)创建下载页面download.jsp。

<%@ page language="java" import="java.util.*" 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>文件下载</title> </head> <body> <a href="${pagContext.request.contextPath}/chapter06/DownloadServlet"}> 文件下载 </a> <br /> </body> </html>

(2)编写DownloadServlet类,该类主要用于设置所要下载的文件以及文件在浏览器中的打开方式,并使用encode(String s, String enc)方法,将URL中的字符串以指定的编码形式输出,防止文件名出现中文乱码问题。

import java.io.*; import java.net.URLEncoder; import javax.servlet.*; import javax.servlet.http.*; public class DownloadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); // 获得绝对路径创建文件对象 String path=getServletContext().getRealPath("/download/人物.jpg"); File file=new File(path); // 通知浏览器以下载的方式打开文件 response.addHeader("Content-Type", "application/octet-stream"); response.addHeader("Content-Disposition","attachment;filename=" +URLEncoder.encode(file.getName(),"utf-8")); // 通过文件对象获取文件相关的输入流 InputStream in=new FileInputStream(file); // 获取response对象的输出流 OutputStream out = response.getOutputStream(); byte [] buffer=new byte[1024]; int len; while((len=in.read(buffer))!=-1){ out.write(buffer,0,len); } } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

(3)使用IE浏览器访问该download.jsp,单击页面中的文件下载链接后,即可保存下载该文件。

2、UploadServlet代码如下:

public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); try { // 创建工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File("e:\\Target")); // 创建 fileupload 组件 ServletFileUpload fileupload = new ServletFileUpload(factory); fileupload.setHeaderEncoding("utf-8"); // 解析 request List<FileItem> fileitems = fileupload.parseRequest(request); PrintWriter writer = response.getWriter(); // 遍历集合 for (FileItem fileitem : fileitems) { // 判断是否为普通字段 if (fileitem.isFormField()) { // 获得字段名和字段值 String name = fileitem.getFieldName(); String value = fileitem.getString("utf-8"); } else { // 上传的文件路径 String filename = fileitem.getName(); writer.print("文件来源:" + filename + "<br>"); // 截取出文件名 filename = filename .substring(filename.lastIndexOf("\\") + 1); writer.print("成功上传的文件:" + filename + "<br>"); // 文件名需要唯一 filename = UUID.randomUUID().toString() + "_" + filename; // 在服务器创建同名文件 String webPath = "/upload/" + filename; String path = getServletContext().getRealPath(webPath); // 创建文件 File file = new File(path); file.getParentFile().mkdirs(); file.createNewFile(); // 获得上传文件流 InputStream in = fileitem.getInputStream(); // 获得写入文件流 OutputStream out = new FileOutputStream(file); // 流的对拷 byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) out.write(buffer, 0, len); // 关流 in.close(); out.close(); // 删除临时文件 fileitem.delete(); } } } catch (Exception e) { throw new RuntimeException(e); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

3、实现文件上传的表单页面需要配置如下: 1)首先要创建一个用于提交上传文件的表单页面。 2)在页面中,需要使用标签在Web页面中添加文件上传输入项。 3)必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。 4)必须把将表单页面的method属性设置为post方式,enctype属性设置为“multipart/form-data”类型。

4、首先获取下载文件的地址,并根据该地址创建文件字节输入流,然后通过该流读取下载文件内容,最后将读取的内容通过输出流写到目标文件中。


第十三章

【答案】 1、传智书城项目的开发环境如下: 1)操作系统:Windows XP、Windows 7或更高的Windows版本。 2)Web服务器:Tomcat7.0。 3)Java开发包:JDK1.7。 4)数据库:MySQL5.5。 5)开发工具:Eclipse Java EE IDE for Web Developers。 6)浏览器:IE8.0或更高版本。

2、传智书城项目搭建所需要导入的jar包如下:

1)c3p0-0.9.1.2.jar 2)commons-beanutils-1.8.3.jar 3)commons-dbutils-1.4.jar 4)commons-fileupload-1.2.1.jar 5)commons-io-1.4.jar 6)commons-logging-1.1.1.jar 7)jstl.jar 8)mail.jar 9)mysql-connector-java-5.0.8-bin.jar 10)standard.jar

3、c3p0-config.xml文件的配置如下:

<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="user">root</property> <property name="password">itcast</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///itcaststore</property> </default-config> </c3p0-config>

4、数据源工具类DataSourceUtils实现代码如下:

package cn.itcast.itcaststore.utils; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DataSourceUtils { private static DataSource dataSource = new ComboPooledDataSource(); private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(); public static DataSource getDataSource() { return dataSource; } /** * 当DBUtils需要手动控制事务时,调用该方法获得一个连接 * * @return * @throws SQLException */ public static Connection getConnection() throws SQLException { Connection con = tl.get(); if (con == null) { con = dataSource.getConnection(); tl.set(con); } return con; } /** * 开启事务 * * @throws SQLException */ public static void startTransaction() throws SQLException { Connection con = getConnection(); if (con != null) con.setAutoCommit(false); } /** * 从ThreadLocal中释放并且关闭Connection,并结束事务 * * @throws SQLException */ public static void releaseAndCloseConnection() throws SQLException { Connection con = getConnection(); if (con != null) { con.commit(); tl.remove(); con.close(); } } /** * 事务回滚 * @throws SQLException */ public static void rollback() throws SQLException { Connection con = getConnection(); if (con != null) { con.rollback(); } } }

第十四章

【答案】 1、当新用户首次访问该网站时,需要先注册账号。在注册页面中新用户需要填写有邮箱、用户名、密码、重复密码、性别、联系电话、个人介绍以及验证码。首先对填写的注册信息进行校验,比如用户名和密码不能为空;密码和重复密码表单输入的内容必须一致;输入的邮箱地址应该是合法的等。然后查询数据库判断用户名是否存在。如果存在,则注册失败。如果不存在,则注册成功。

2、当用户选择商品时,首先需要校验此用户是否登陆,如果未登录则提示用户登录,如果已经登陆则将商品添加至购物车,此时购物车中如已经有此商品,则商品数量加一,否则创建此商品。商品添加后可选择是继续购物、清空购物车还是进行结算,如果进行结算则让用户填写订单信息,之后生成订单,让用户完成在线支付。


第十五章

【答案】 1、 商品管理模块主要的功能包括查询商品信息、添加商品信息、编辑商品信息和删除商品信息这4个功能。查询商品信息时可通过条件查询也可以查询所用商品。查询之后可进入商品列表页面,在此页面中提供了增加、修改和删除商品信息的功能。单击添加按钮,打开商品添加页面,填写商品信息之后,单击确定按钮后,新添加的商品信息即可在列表页面中显示出来。单击商品列表中修改按钮,页面会跳转到该商品的编辑页面,修改其中显示出商品的具体信息之后,单击保存按钮,商品管理首页将显示修改后的商品信息。单击列表页面中商品后面的删除按钮,会提示是否删除,确定删除后,系统会将此条商品信息删除,商品管理首页将不再显示此信息。

2、模块主要实现的功能是下载历史销售数据,将已销售商品的信息,按照商品销量从高到低排序后导出到扩展名为“.csv”的文件中(csv文件即逗号分隔值文件格式,通常是纯文本文件)。下载销售数据时可以填写年份和月份这两个查询条件,在年份输入框和月份下拉框中分别填写相应信息,然后单击“下载”按钮,会弹出文件下载提示框,在提示框中选择文件的下载目录,单击“确定”后就可以将指定年份和月份的销售历史数据下载到文件中。


整理不易, 如果喜欢的话,还请给博主一个赞哦,让更多的人看到这篇文章

最新回复(0)