zoukankan      html  css  js  c++  java
  • JSP Website (maven webapp) using Apache Derby (embedded) Hibernate JPA JUnit Tomcat7

    JSP/Servlet实验总结

    使用的技术 Apache Derby 10.6 & Hibernate 3 & JPA. Test with JUnit with log4j & Run on Apache Tomcat 7

    MediaVault-pantynopants-github

    Mark一下内容以防忘记:
    实验一为静态页
    实验二为使用xml(.nfo)格式存储媒体信息,将此信息(meta-data)文件和源文件一起上传,解析
    实验三为使用database替换xml,并继续完善

    结构图与开发流程图

    Created with Raphaël 2.1.0Design the DBDesign the DBcreate model classcreate model classimplement DAOimplement DAOunit test modelunit test model
    Created with Raphaël 2.1.0Create htmlCreate htmlchange to jspchange to jspdesign service/servlet according to neededdesign service/servlet according to neededSeparate out header/footer/...form to entity
    Show Pages:
    jsp(TVshow.jsp)
    |
    servlet(UploadTVServlet)
    |
    getAlbum/addAlbum(TVDAO)
    |
    module class(TVshow)
    

    DB得到的数据直接作为bean的属性,可在jsp页面直接调用,显示

    Upload*.jsp:

    jsp->createAlbum(servlet) 写入类的属性中
            ->createMedia 文件的链接写入类的属性中
                ->DAO(Media location and metaData)类写入DB

    !!!上传文件后, 实际存储位置是eclipse的工程目录

    代码说明

    package myapp.model中为数据库表结构
    为方便管理,抽象出了AllResource作为媒体库进行管理
    package myapp.service中的InitResource.java为初始数据

    代码使用

    1. project -> R click -> add external jars. Then add jdom.jar/smartupload.jar/…, which is in /WenContent/WEB-INF/lib , to it.

    2. maven update. If error occurred, delete local maven folder and retry.

    3. Run as -> run configurations -> tomcat7 -> classpath -> add projects. Then add this project. It can ensure the entitymanager can be used in our project.

    TODO:

    清理css 修改样式
    修改上传路径, 实现上传至服务器
    修改upload页使之针对不种类的upload反应不同(session实现)
    404页面

    (em 指entitymanager)

    配置说明:

    1. project->r click->add external jars Then add jdom/smartupload/… to it
    2. run config -> tomcat7运行时配置本工程为依赖库(添加maven的jar包,才能在servlet上使用em
    3. maven刷新。若 失败:删除c盘默认全局jar包存放地址并重新刷新
      以上之后一般即可运行. 不能运行时
    4. .classpath .project 与原文件进行对比-》class即为build path
    5. presist.xml web.xml可以一直不动
      更详细配置见github
      MediaVault-pantynopants-github

    难(keng)点:

    • Derby embedded配置
    • pom.xml 错误的id会导致eclipse一直报错无法启动
    • 不要使用eclipse的自带浏览器,每次运行都有缓存,即为上一次的页面。需啊刷新才行
    • em可以传递全局,即指entitymanagerfactory的持有对象会在运行后一直存在
    • web.xml中:<load-on-startup>1 </load-on-startup>的servlet的默认调用方法是无参构造方法
      <load-on-startup>是servlet标签的属性,避免错误使用
    • web.xml的位置不需要再.classpath .project中指定。应该与tomcat配置有关。未遇到问题
    • 注意实体的状态。manager.getTransaction().begin();之后不能出现第二个begin

    对JPA的理解:

    将对象映射到表里,@OneToMany等annotation表示外键关系,主键由@Id @GeneratedValue(strategy=GenerationType.IDENTITY)生成
    更新表通过DAO类来进行。可以把em看成一个set来理解,每次通过主键从这个set中取得表(实体)(entity)

    未解决的问题,使用了略麻烦的方式解决:

    • jsp中<jsp:include page="/loadalbum?<%=aaa %>"></jsp:include> 失败的问题: 此处不能使用parameter,对于servlet的parameter应用不同的方式?
      这里使用session避免
      但会有session滥用和清空不及时的隐患

    • 泛型和反射没有写好,如可以把参数定为object类型,传入album track时调用不同的DAO
      以至于servlet过多

    两种存储方式的对比:

    nfo因为是对xml文件进行解析,因为对xml结构的不了解,这种方式更容易出现数组越界这类错误,且每一种model类需要不同的,而且是较复杂的XML解析文件(如xmlreader)
    nfo文件较为固定,无法通过主键唯一标识一个实体,无法通过外键链接实体,只能通过链接/相对路径方式
    优点是数据的储存结果可以直接从文件看到,但同时不利于保密

    ORM因为直接对类model操作,更加直接方便
    缺点是数据库中数据检查需要通过数据库管理软件,不太直观清楚,不方便调试

    从meta-data change to database的迁移过程:

    因为从新设计了数据结构,采用了不同的model类,因此基本是完全重构,较为困难
    首先抛弃所有XML对应工具类,保留并更改了jsp作为view
    对于文件上传部分保留
    重构全部servlet, util(工具)类,model类

    引用:

    bootstrap
    dropzone.js
    Java Persistence (JPA) Tutorial With Hibernate
    using hibernate with embedded derby
    Hibernate basic example with Apache Derby and Maven
    JAVA DERBY AND HIBERNATE 3.X CONFIGURATION USING ANNOTATIONS

  • 相关阅读:
    营山护照办理
    非北京人员 办理护照
    护照填写注意事项
    美国会议签证——我是正当理由去美国,我能支付(或有人为我支付)我在美国期间的所有费用,办完事我肯定回来, 邀请信,行程表这些材料齐全即可
    urllib2使用2
    python 异常
    python urllib和urllib2 区别
    python类继承
    gcc编译4个阶段
    Vim中如何全选并复制?
  • 原文地址:https://www.cnblogs.com/bishi/p/5699002.html
Copyright © 2011-2022 走看看