欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

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

    • 资源ID:5022357       资源大小:250.50KB        全文页数:23页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    开发基于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)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程序,是在服务器端运行以处理客户端请求并作出响应的程序。创建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 Servlet的部署与配置:web文件 <servlet> <servlet-name>AddServlet</servlet-name><servlet-class>servlet.AddServlet</servlet-class></servlet> <servlet-mapping> <servlet-name>AddServlet</servlet-name> <url-pattern>/AddServlet</url-pattern> </servlet-mapping> 5 Servlet处理Get/Post请求(1)HttpServletRequest request对象常用方法 Request.getParameter(“param”)获取客户请求的数据 Request.setCharacterEncoding(“GBK”);将输入内容转化成中文 Request.setAttribute(“loginname”,user);在request作用域存储数据(2)HttpServletResponse response对象常用方法 Response.setContentType(“text/html;charset=GBK”);设置输出中文,解决中文乱码问题 Response.sendRedirect(“URL”);让浏览器重定向到指定的资源(3)转发 RequestDispatcher dispatcher=request.getRequestDispatcher("url");首选定义转发器dispatcher.forward(request, response); 然后实现转发的功能第三章 基于Servlet的会话跟踪(一) 1 会话的创建 HttpSession session = request.getSession(Boolean value);HttpSession session = request.getSession();在第一种方法中,布尔值为true时,如果存在与当前请求关联的会话,就返回该会话。否则创建一个新会话,并把会话返回。布尔值为false时,如果存在与当前请求关联的会话,就返回该会话。否则返回null,不创建会话。 2 会话的使用 Session.setAttribute(String name,Object value); Session.getAttribute(String name); 值得注意的是:Session.getAttribute(String name);方法返回的是Object对象,所以在取出数据是需要进行数据类型转化,是与存入的一致。 3 HttpSession对象的结束 (1)关闭浏览器,关闭Session (2)调用HttpSession的invalidate()方法,删除HttpSession对象和数据。 (3)两次访问的时间间隔大于Session定义的非活动时间间隔第四章 基于Servlet的会话跟踪(二)1 购物车的设计分析HttpSession session = request.getSession(false);RequestDispatcher dispatcher;/ 如果session不存在,转向 /ch04/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();/ 将购物车存入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显示购物车response.sendRedirect("/Y2JavaEE/cho4/viewCart.jsp"); 实现购物车列表 <% Map cart = (Map) session.getAttribute("cart");double total = 0;if (cart = null | cart.size() = 0)out.println("<p>购物车当前为空。</p>");out.println("<p><a href = '/store/ch04/books.jsp'>继续购物</a> </p>"); else / 创建用于显示内容的变量Set cartItems = cart.keySet();Object isbn = cartItems.toArray();BookBean book;CartItemBean cartItem;int quantity;double price, subtotal;%><% / continue scriptlet int i = 0;while (i < isbn.length) / 计算总和cartItem = (CartItemBean) cart.get(isbni);book = cartItem.getBook();quantity = cartItem.getQuantity();price = book.getPrice();subtotal = quantity * price;total += subtotal;i+;%> 我们通过Map接口的keySet()方法,可以把Map中的key建以set形式返回,在通过toArray()方法,将Set对象转换为Object类型数组,之后我们遍历数组,以数组元素为key值,取出map中所存储的数据 2 格式化问题 在处理数字格式方面,Java API为我们提供了DecimalFormat类,为我们解决十进制数字的格式化问题。<%=new DecimalFormat( "0.00" ).format( subtotal ) %> 3 常用集合类,接口 (1)List接口(List接口与Set接口都继承自Collection接口) ArrayList是以Array方式实现的List,允许快速随机存取,相对与LinkedList不适合进行插入和移除元素操作 LinkedList提供最佳顺序存取,适合插入和移除元素(2)Set接口(set是一种不包含重复元素的Collection,也就是说在Set中最多只能有一个null元素) HashSet能够快速定位一个元素,但是它要存入HashSet的对象必须实现HashCode()方法 TreeSet将放入其中的元素按顺序存取(3)Map接口(Map是一种把键对象与值对象进行关联的容器,像Set一样,一个map容器中的键对象不允许重复,这是保证查找结果的一致性) HashMap类是Map类的实现类,实现一个键到值映射的哈希表,通过键取得值对象。 Properties类一般是把属性文件读入流中后,以键-值的形式进行保存,以方便程序员读取其中的数据第五章 基于Servlet的MVC设计模式 MVC是一种流行的软件设计模式 (1)模型(Modle):对应的组件是JavaBean(Java类)(2)视图(View):对应的组件是JSP或HTML文件(3)控制器(Controller):对应的组件是ServletMVC设计模式的好处1各司其职,互不干涉2有利于开发中的分工3有利于组建的重用第六章 Model层开发:高级JDBC 1 数据库连池 (1)数据连接池 在JDBC 2.0 中提供了javax.sql.DateSoure(数据源)接口,它负责建立与数据库的连接,在应用程序中访问数据据库不必编写连接数据库的代码,可直接从数据源获得数据库连接。 数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接,以避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术明显的提高了对数据库的操作性能。 数据库连接池在初始时将创建一定的数据库连接放到连接池中,这些数据库连接的数量是有最小数据库连接数来确定的。无论这些数据库连接是否被使用,连接都一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个链接池能占用的最大连接数量,当应用程序向连接池请求的连接数量超过最大连接数量时,这些请求将被加入到等待列中。 (2)数据源与JNDI资源 DataSoure对象是由Web容器(Tomcat)提供的,因此不能在程序中采用创建一个实例的方法来生成DataSource对象,而需要采用Java的另一个技术JNDI,来获得DataSource对象 可以简单的把JNDI理解为一种将对象和名字绑定的技术,容器产生出对象,这些对象都和唯一的名字绑定。外部程序可以通过名字来访问该对象。 Javax.naming,Context提供了查找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(String name)返回与指定的名字绑定的对象Tomcat把DataSource作为一种可配置的JNDI资源来处理。生成DataSource对象的工厂为org.apache.commons.dbcp.BasicDataSourceFactory.配置多个DataSource,可以通过lookup(String name)自动查找连接。 (3)JNDI的配置 <1>context.xml文件的配置 在Tomcat根目录confcontext.xml文件中<Context>节点中添加<Resource>信息,内容添加如下:<Resource name="jdbc/books" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="hafei" password="513810" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver:/localhost:1433;DatabaseName=books"/><Resource>的属性属性说明Name指定Resource的JNDI名字Auth指定管理Resource的Manager,他有两个值可选:Container和Application.Container表示有容器来创建Resource,Application表示有Web来创建和管理ResourceType指定Resource所属的Java类名maxActive指定数据库连接池中的数据库连接处于活动状态的最大数目,取值为0表示不受限制maxIdle指定数据库连接池中的数据库连接处于空闲状态的最大数目,取值为0表示不受限制maxWait指定数据库连接池中的数据库连接处于空闲状态的最长时间(以毫秒为单位),超出这一时间会抛出异常。取值为-1可以无限制等待Username制定连接数据库的用户名Password指定连接数据库的口令driverClassName指定连接数据库的JDBC驱动程序url指定连接数据库的URl<2>web.xml文件的配置 <resource-ref> <description>E-Books DataSource</description> <res-ref-name>jdbc/books</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth></resource-ref><resource-ref>的属性属性说明description对所引用资源的说明res-ref-name指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应res-type指定所引用资源的类名字,与<Resource>元素中的type属性对应res-auth指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应3 基于数据库文件的数据库配置(1)数据配置信息private static final String DRIVER_CLASS="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=jdbc:sqlserver:/localhost:1433;databaseName=ownHomeuser=hafeipassword=513810在Java中提供了Properties类,来读取.properties(属性)文件。在程序调用Properties类的load()方法时,系统把db.properties文件的内容加载到内存中。因为Properties继承类Hashtable, Properties类把“=”之前的内容添加到Hashtable对象的key值,并同时添加key值对应的value.所以在编写.properties文件时一定要使用=号把名称与值分隔开(3)读取属性文件import 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;/* * 同步的创建实例方法 * */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("错误:没有读取属性文件,请确认db.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");在读取配置信息时,使用单列模型创建,获得对象实例,并调用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类型参数指定的文件到系统内存中,以方便获得系统信息,如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与当前对象是否相等。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 DBAccessException(String message, Throwable throwable) super(message);this.throwable = throwable;/* * 返回底层异常原因 * * return Throwable */public Throwable getCause() return throwable;用户自定义异常类要继承Exception类,虽然Exception类中没有定义自己的任何方法,但从Throwable类继承了所有的方法。创建的用户自定义异常类都将具有Throwable类的所有方法。(2)使用自定义异常类/数据库连接public static synchronized 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=null;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 java.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"private 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 ClassNotFoundException, 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 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)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(PreparedStatement pstmt,List values)throws SQLException/循环将SQL语句参数列表中 的值一次付给执行语句for(int i=0;i<values.size();i+)Object v = values.get(i);/注意,setObject()的索引是从1开始的pstmt.setObject(i+1, v);/执行查询public Result executeQuery() throws SQLExceptionResult result=null;ResultSet rs=null;PreparedStatement pstmt=null;Statement stmt =null;tryif(values!=null && values.size()>0)/使用预处理语句,并设定所有的SQL语句的所有参数值pstmt=conn.prepareStatement(sqlvalue);setValues(pstmt,values);/执行查询返回查询结果集rs =pstmt.executeQuery();elsestmt=conn.createStatement();rs=stmt.executeQuery(sqlvalue);/将ResultSet转化为Resultresult=ResultSupport.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.prepareStatement(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<Users> search(Users condition) List<Users> list =new ArrayList<Users>();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

    注意事项

    本文(开发基于JSP_Servlet_JavaBean的网上交易系统.doc)为本站会员(椰子壳)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开