开发基于JSP_Servlet_JavaBean的网上交易系统.doc

上传人:椰子壳 文档编号:5022357 上传时间:2020-01-29 格式:DOC 页数:23 大小:250.50KB
返回 下载 相关 举报
开发基于JSP_Servlet_JavaBean的网上交易系统.doc_第1页
第1页 / 共23页
开发基于JSP_Servlet_JavaBean的网上交易系统.doc_第2页
第2页 / 共23页
开发基于JSP_Servlet_JavaBean的网上交易系统.doc_第3页
第3页 / 共23页
开发基于JSP_Servlet_JavaBean的网上交易系统.doc_第4页
第4页 / 共23页
开发基于JSP_Servlet_JavaBean的网上交易系统.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《开发基于JSP_Servlet_JavaBean的网上交易系统.doc》由会员分享,可在线阅读,更多相关《开发基于JSP_Servlet_JavaBean的网上交易系统.doc(23页珍藏版)》请在三一文库上搜索。

1、开发基于JSP Servlet JavaBean的网上交易系统第一章 JavaEE的概述1 了解性知识(jsp的弊端,什么是JavaEE,什么是框架,javaEE的结构体系) 表示层技术(HTML JavaScript Ajax) 中间层技术(JSP Servlet JSTL JavaBean Strusts) 数据库技术(JDBC技术 数据层框架技术Hibernate) 系统集成技术(JAX-WS技术 JNDI)2 HTTP协议 http是一个无状态协议,默认输出端口为803 Post与Get提交数据方法的差别(Get方法是浏览器默认的提交方法) (1)Post请求数组在地址栏不可见,相对比

2、较安全 (2)Post请求提交的数据在理论上没有长度的限制 (3)Get请求将字符串添加到URL中,是页面可以被设置成书签或使用电子邮件发送,Post请求则不能4 为Eclipse添加数据监控工具TCP/IP Monitor进行数据监控(1)单击“窗口”-“首选项”命令,弹出“首选项”窗口(2)展开左侧的“运行/调试”节点,选择TCP/IP Monitor选项,并选中Show the.复选框(3)添加监视窗口,单击add按钮后,弹出对话框,按图添加内容(4)启动监控,运行程序,把地址内的端口号8080改为8088查看监控结果第二章 Servlet基础1 Servlet是一个java程序,是在服

3、务器端运行以处理客户端请求并作出响应的程序。创建Servlet类必须继承HttpServlet类,实现doGet()或者doPost()方法2 单击右建选择新建Servlet命令,在弹出的窗口中输入Servlet名称,选择超类为javax.servlet.http.HttpServlet,并选中Create doGet和doPost两个复选框,单击完成按钮3 Servlet的生命周期(1)实例化 Servlet容器创建Servlet的实例(2)初始化 该容器调用Init()方法(3)服务 如果请求Servlet,则容器调用service()方法(4)销毁 销毁实例之前调用destory()方法

4、4 Servlet的部署与配置:web文件 AddServletservlet.AddServlet AddServlet /AddServlet 5 Servlet处理Get/Post请求(1)HttpServletRequest request对象常用方法 Request.getParameter(“param”)获取客户请求的数据 Request.setCharacterEncoding(“GBK”);将输入内容转化成中文 Request.setAttribute(“loginname”,user);在request作用域存储数据(2)HttpServletResponse respon

5、se对象常用方法 Response.setContentType(“text/html;charset=GBK”);设置输出中文,解决中文乱码问题 Response.sendRedirect(“URL”);让浏览器重定向到指定的资源(3)转发 RequestDispatcher dispatcher=request.getRequestDispatcher(url);首选定义转发器dispatcher.forward(request, response); 然后实现转发的功能第三章 基于Servlet的会话跟踪(一) 1 会话的创建 HttpSession session = request.

6、getSession(Boolean value);HttpSession session = request.getSession();在第一种方法中,布尔值为true时,如果存在与当前请求关联的会话,就返回该会话。否则创建一个新会话,并把会话返回。布尔值为false时,如果存在与当前请求关联的会话,就返回该会话。否则返回null,不创建会话。 2 会话的使用 Session.setAttribute(String name,Object value); Session.getAttribute(String name); 值得注意的是:Session.getAttribute(String

7、 name);方法返回的是Object对象,所以在取出数据是需要进行数据类型转化,是与存入的一致。 3 HttpSession对象的结束 (1)关闭浏览器,关闭Session (2)调用HttpSession的invalidate()方法,删除HttpSession对象和数据。 (3)两次访问的时间间隔大于Session定义的非活动时间间隔第四章 基于Servlet的会话跟踪(二)1 购物车的设计分析HttpSession session = request.getSession(false);RequestDispatcher dispatcher;/ 如果session不存在,转向 /ch

8、04/books.jspif (session = null) dispatcher = request.getRequestDispatcher(/cho4/books.jsp);dispatcher.forward(request, response);/ 取出购物车和添加的书籍Map cart = (Map)session.getAttribute(cart);BookBean book = (BookBean) session.getAttribute(bookToAdd);/ 如果购物车不存在,创建购物车if (cart = null) cart = new HashMap();/

9、将购物车存入session之中session.setAttribute(cart, cart);/ 判断书籍是否在购物车中CartItemBean cartItem = (CartItemBean) cart.get(book.getISBN();/ 如果书籍在购物车中,更新其数量./ 否则,创建一个条目到Map中.if (cartItem != null)cartItem.setQuantity(cartItem.getQuantity() + 1);elsecart.put(book.getISBN(), new CartItemBean(book, 1);/ 转向viewCart.jsp

10、显示购物车response.sendRedirect(/Y2JavaEE/cho4/viewCart.jsp); 实现购物车列表 % Map cart = (Map) session.getAttribute(cart);double total = 0;if (cart = null | cart.size() = 0)out.println(购物车当前为空。);out.println(继续购物 ); else / 创建用于显示内容的变量Set cartItems = cart.keySet();Object isbn = cartItems.toArray();BookBean book;

11、CartItemBean cartItem;int quantity;double price, subtotal;% / continue scriptlet int i = 0;while (i 我们通过Map接口的keySet()方法,可以把Map中的key建以set形式返回,在通过toArray()方法,将Set对象转换为Object类型数组,之后我们遍历数组,以数组元素为key值,取出map中所存储的数据 2 格式化问题 在处理数字格式方面,Java API为我们提供了DecimalFormat类,为我们解决十进制数字的格式化问题。 3 常用集合类,接口 (1)List接口(List

12、接口与Set接口都继承自Collection接口) ArrayList是以Array方式实现的List,允许快速随机存取,相对与LinkedList不适合进行插入和移除元素操作 LinkedList提供最佳顺序存取,适合插入和移除元素(2)Set接口(set是一种不包含重复元素的Collection,也就是说在Set中最多只能有一个null元素) HashSet能够快速定位一个元素,但是它要存入HashSet的对象必须实现HashCode()方法 TreeSet将放入其中的元素按顺序存取(3)Map接口(Map是一种把键对象与值对象进行关联的容器,像Set一样,一个map容器中的键对象不允许重

13、复,这是保证查找结果的一致性) HashMap类是Map类的实现类,实现一个键到值映射的哈希表,通过键取得值对象。 Properties类一般是把属性文件读入流中后,以键-值的形式进行保存,以方便程序员读取其中的数据第五章 基于Servlet的MVC设计模式 MVC是一种流行的软件设计模式 (1)模型(Modle):对应的组件是JavaBean(Java类)(2)视图(View):对应的组件是JSP或HTML文件(3)控制器(Controller):对应的组件是ServletMVC设计模式的好处1各司其职,互不干涉2有利于开发中的分工3有利于组建的重用第六章 Model层开发:高级JDBC 1

14、 数据库连池 (1)数据连接池 在JDBC 2.0 中提供了javax.sql.DateSoure(数据源)接口,它负责建立与数据库的连接,在应用程序中访问数据据库不必编写连接数据库的代码,可直接从数据源获得数据库连接。 数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接,以避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术明显的提高了对数据库的操作性能。 数据库连接池在初始时将创建一定的数据库连接放到连接池中,这些数据库连接的数量是有最小数据库连接数来确定的。无论这些数据库连接是否被使用

15、,连接都一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个链接池能占用的最大连接数量,当应用程序向连接池请求的连接数量超过最大连接数量时,这些请求将被加入到等待列中。 (2)数据源与JNDI资源 DataSoure对象是由Web容器(Tomcat)提供的,因此不能在程序中采用创建一个实例的方法来生成DataSource对象,而需要采用Java的另一个技术JNDI,来获得DataSource对象 可以简单的把JNDI理解为一种将对象和名字绑定的技术,容器产生出对象,这些对象都和唯一的名字绑定。外部程序可以通过名字来访问该对象。 Javax.naming,Context提供了查

16、找JNDI Resource的接口,例如,可以通过以下的代码获得jdbc/books的数据源的引用:Context ic = new InitialContext();DataSource source = (DataSource)ic.lookup(java:comp/env/jdbc/books);conn=source.getConnection(); /获取数据库连接当程序结束数据库访问后,应该调用Connection的close()方法,及时将Connection返回给数据库连接,是Connection恢复空闲状态。Context接口的lookup()方法方法说明lookup(Str

17、ing name)返回与指定的名字绑定的对象Tomcat把DataSource作为一种可配置的JNDI资源来处理。生成DataSource对象的工厂为mons.dbcp.BasicDataSourceFactory.配置多个DataSource,可以通过lookup(String name)自动查找连接。 (3)JNDI的配置 context.xml文件的配置 在Tomcat根目录confcontext.xml文件中节点中添加信息,内容添加如下:的属性属性说明Name指定Resource的JNDI名字Auth指定管理Resource的Manager,他有两个值可选:Container和Appl

18、ication.Container表示有容器来创建Resource,Application表示有Web来创建和管理ResourceType指定Resource所属的Java类名maxActive指定数据库连接池中的数据库连接处于活动状态的最大数目,取值为0表示不受限制maxIdle指定数据库连接池中的数据库连接处于空闲状态的最大数目,取值为0表示不受限制maxWait指定数据库连接池中的数据库连接处于空闲状态的最长时间(以毫秒为单位),超出这一时间会抛出异常。取值为-1可以无限制等待Username制定连接数据库的用户名Password指定连接数据库的口令driverClassName指定连接

19、数据库的JDBC驱动程序url指定连接数据库的URlweb.xml文件的配置 E-Books DataSource jdbc/books javax.sql.DataSource Container的属性属性说明description对所引用资源的说明res-ref-name指定所引用资源的JNDI名字,与元素中的name属性对应res-type指定所引用资源的类名字,与元素中的type属性对应res-auth指定管理所引用资源的Manager,与元素中的auth属性对应3 基于数据库文件的数据库配置(1)数据配置信息private static final String DRIVER_CLA

20、SS=com.microsoft.sqlserver.jdbc.SQLServerDriver;private static final String DATABASE_URL=jdbc:sqlserver:/localhost:1433;databaseName=news;private static final String DRIVER_USER=hafei;private static final String DRIVER_PASSWORD=513810;(2)属性文件driver=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdb

21、c:sqlserver:/localhost:1433;databaseName=ownHomeuser=hafeipassword=513810在Java中提供了Properties类,来读取.properties(属性)文件。在程序调用Properties类的load()方法时,系统把db.properties文件的内容加载到内存中。因为Properties继承类Hashtable, Properties类把“=”之前的内容添加到Hashtable对象的key值,并同时添加key值对应的value.所以在编写.properties文件时一定要使用=号把名称与值分隔开(3)读取属性文件imp

22、ort java.io.InputStream;import java.util.Properties;public class ProReader extends Properties/定义静态对象private static ProReader instance;/* * 公有的获取实例的方法 * return Env 实例 */public static ProReader getInstance() if (instance != null) return instance; else makeInstance();return instance;/* * 同步的创建实例方法 * */

23、private static synchronized void makeInstance() if (instance = null) instance = new ProReader();/* * 私有的构造方法,确保实例的唯一性 * */private ProReader() InputStream is = (InputStream) getClass().getResourceAsStream(/common/dbInfo.properties);try load(is); catch (Exception e) System.err.println(错误:没有读取属性文件,请确认d

24、b.property文件是否存在。);return;读取配置信息String driverClassName = ProReader.getInstance().getProperty(driver);String url = ProReader.getInstance().getProperty(url);String user = ProReader.getInstance().getProperty(user);String password = ProReader.getInstance().getProperty(password);在读取配置信息时,使用单列模型创建,获得对象实例,

25、并调用Properties类提供的方法getProperty(“key”)方法获得HashTable的value值,进行创建数据库连接类的操作。4 Class与Object小结(1)Class类 Class.forName(String className):该方法生成以一个String类型参数指定的classname的class对象,如Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); InputStrean getResourceAsStream(String name):该方法是打开并读取一个String类型参数指定的文件到系统内存中,以方便获得

26、系统信息,如InputStream is = (InputStream) getClass().getResourceAsStream(/common/dbInfo.properties);Properties p = new Properties();P.Load(in);(2)Object类 Object类是所有类的根类,我们自定义的类都默认的继承于这个类,所以所有的类包括数组都具有这个类的方法。 getClass():返回一个对象的运行时类 toString():返回该对象的字符串表示,在Object类中是返回对象的地址信息 equals(Object obj):判断obj与当前对象是否

27、相等。5 自定义异常(1)定义异常类public class DBAccessException extends Exception private static final long serialVersionUID = 1L;protected Throwable throwable;/* * 构造方法 * * param message */public DBAccessException(String message) super(message);/* * 构造方法 * * param message * param throwable */public DBAccessExcept

28、ion(String message, Throwable throwable) super(message);this.throwable = throwable;/* * 返回底层异常原因 * * return Throwable */public Throwable getCause() return throwable;用户自定义异常类要继承Exception类,虽然Exception类中没有定义自己的任何方法,但从Throwable类继承了所有的方法。创建的用户自定义异常类都将具有Throwable类的所有方法。(2)使用自定义异常类/数据库连接public static synch

29、ronized Connection getConn() throws DBAccessException / 读出配置信息String driverClassName = Env.getInstance().getProperty(driver);String url = Env.getInstance().getProperty(url);String user = Env.getInstance().getProperty(user);String password = Env.getInstance().getProperty(password);Connection conn=nul

30、l;try Class.forName(driverClassName); conn = DriverManager.getConnection(url,user,password);catch(Exception ex)throw new DBAccessException(不能获得数据库连接!);return conn;6通用的DAO类(1)通用的DAO类的实现package dao.impl;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import j

31、ava.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.List;import javax.servlet.jsp.jstl.sql.Result;import javax.servlet.jsp.jstl.sql.ResultSupport;public class DBConnection private static final String DRIVER_CLASS=com.microsoft.sqlserver.jdbc.SQLServerDriver;priv

32、ate static final String DATABASE_URL=jdbc:sqlserver:/localhost:1433;databaseName=e_pai;private static final String DRIVER_USER=hafei;private static final String DRIVER_PASSWORD=513810;private Connection conn;private String sqlvalue;private List values; /设定数据库连接public void setConn() throws ClassNotFo

33、undException, SQLException Class.forName(DRIVER_CLASS); conn = DriverManager.getConnection(DATABASE_URL,DRIVER_USER,DRIVER_PASSWORD);/设定SQl语句public void setSqlvalue(String sqlvalue) this.sqlvalue = sqlvalue;/设定语句参数public void setValues(List values) this.values = values;/数据库连接public static Connection

34、 getConn() throws ClassNotFoundException,SQLException Class.forName(DRIVER_CLASS);Connection conn = DriverManager.getConnection(DATABASE_URL,DRIVER_USER,DRIVER_PASSWORD);return conn;/释放资源 一个方法关闭三个public static void closeAll(Connection conn,PreparedStatement pStatement,ResultSet res)tryif(res !=null)

35、res.close();res=null;catch(SQLException ex)ex.printStackTrace();tryif(pStatement !=null)pStatement.close();pStatement=null;catch(SQLException ex)ex.printStackTrace();tryif(conn!=null &(!conn.isClosed()conn.close();catch(SQLException ex)ex.printStackTrace();/设定语句的参数private void setValues(PreparedStat

36、ement pstmt,List values)throws SQLException/循环将SQL语句参数列表中 的值一次付给执行语句for(int i=0;i0)/使用预处理语句,并设定所有的SQL语句的所有参数值pstmt=conn.prepareStatement(sqlvalue);setValues(pstmt,values);/执行查询返回查询结果集rs =pstmt.executeQuery();elsestmt=conn.createStatement();rs=stmt.executeQuery(sqlvalue);/将ResultSet转化为Resultresult=Re

37、sultSupport.toResult(rs);finallythis.closeAll(conn, pstmt, rs);return result;/执行sqL语句实现增删改但 不能执行查询public int executeUpdate() throws SQLException int noOfRows=0;PreparedStatement pstmt=null;Statement stmt =null;/*处理SQL执行SQL*/tryif(values!=null & values.size()0)/使用预处理语句,并设定所有的SQL语句的所有参数值pstmt=conn.pre

38、pareStatement(sqlvalue);setValues(pstmt,values);/执行更新语句,返回受影响的行数noOfRows =pstmt.executeUpdate();elsestmt=conn.createStatement();noOfRows=stmt.executeUpdate(sqlvalue);finallythis.closeAll(conn, pstmt, null);return noOfRows;(2)通用DAO类的使用public List search(Users condition) List list =new ArrayList();String sql= select * from users where 1=1;if(condition!=null)if(condition.getUserId()!=0)sql+=and userId=+condition.getUserId();if(condition.getUserName()!=null & !co

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1