强可读性)。
总之,要保证代码的清晰、简洁、可读。
详细设计TODO 详见每一个模块对应的文档环境与工程配置主要配置开发工具、MyEclipse 工程、数据库。
1,新建 Web 工程,名称为:ItcastOA。
2,使用数据库名为:itcastoa_当前日期。
3,工程编码使用 UTF-8。
不要改 workspace 编码,因为他会影响里面的所有工程。
配置工具配置快捷键 1, 把 Content Assist 设为 Alt/ 2, 把 Word Completion 设为 Alt.3,其他常用快捷键说明: Alt/ Content Assist 代码提示 CtrlT 显示类的继承结构 CtrlO 列出类中的成员(成员变量、方法等) Ctrl/ 注释/取消注释 CtrlShiftO 导入要使用的包、并去除不使用的包 CtrlShiftF 格式化当前文件中的代码/格式化选中的代码 CtrlAltUp 复制当前行到下面 CtrlAltDown 复制当前行到上面 CtrlD 删除当前行/删除选中文本占的所有行 ShiftEnter 相当于按 End 后再按 Enter AltLeft AltRight CtrlShiftX 变为大写 CtrlShiftY 变为小写配置文件的默认编码1, 配置
JSP 的默认编码为 utf-82, 配置 JavaScript 的默认编码为 utf-8说明:在 MyEclipse7.x 不用修改,配置格式化的代码样式1, 使用 CtrlShiftF 可以格式化代码。
2, 在 WindowPreferencesJavaCode StyleFormatter 中可以设置代码样 式。
要把 Java 代码与注释的行宽设为 130。
(其他使用默认样式)3, 搜索 XML Sources,修改 xml 的行宽为 130。
(不考虑打印的情况)MyEclipse 工具使用说明1, 导入工程时可以直接选择一个 zip 文档:FileImportExisting Projects into Workspace--gtSelect archive file。
2, 工程改名后,发果发布到 Tomcat 下,对应的应用的名称不一定改变。
这个名 称是在 MyEclipse Web 中的 Web Context-root 中配置的。
创建数据库使用 MySql 数据库。
创建数据库时,要注意编码要支持中文。
建表语句如下:create database itcastoa default character set utf8show create database itcastoa新建 Web 工程并准备环境新建一个 Web Project,并设置工程的编码为 UTF-8。
添加框架环境1, 添加 Junit4 的 Jar 包。
2, 添加 Struts1.3.8 环境: a jar 包 b 配置文件(struts-config.xml、修改 web.xml)、国际化资源文件、自定义 标签库的 TLD 文件。
配为.do 拦截的请求。
3, 添加 Hibernate 环境: a jar 包(含 JDBC 驱动的 jar 包) b 配置文件(hibernate.cfg.xml)。
4, 添加 jBPM 环境(Jbpm 的 jar 包中已包含 Hibernate 的 jar 包)。
说明:1, JSTL 已包含在 JavaEE5.0 中,所以不用配置。
2, 不要引用外面的 Jar 包,应全部拷贝到工程中。
配置数据库 修改 Hibernate.cfg.xml 中的数据库连接信息。
并在 hibernate.cfg.xml 中做如下配置: lt-- 显示 sql 语句 --gt ltproperty namequotshow_sqlquotgttruelt/propertygt lt-- 自动更新表结构 --gt ltproperty namequothbm2ddl.autoquotgtupdatelt/propertygt目录结构
源码文件夹 src 项目源代码 config 配置文件 test 单元测试 WebRoot 文件夹下 script JavaScript 脚本文件 style CSS 样式文件 WEB-INF/
jsp jsp 页面文件(再创建子文件夹分类存放)包结构使用三层:显示层(View),业务层(Service),数据访问层(Dao) 包名 说明cn.itcast.oa.domain 实体(Domain)cn.itcast.oa.dao Dao 接口cn.itcast.oa.dao.impl Dao 的实现类cn.itcast.oa.service Service 接口cn.itcast.oa.service.impl Service 的实现类cn.itcast.oa.web.struts Struts 有关的类cn.itcast.oa.web.struts.action Struts 的 Actioncn.itcast.oa.web.struts.formbean Struts 的 FormBean(ActionForm)cn.itcast.oa.util 一些工具类cn.itcast.oa.cfgcn.itcast.oa.web.filter基础功能BaseDao 与 BaseDaoImpl 的设计每个实体都应有一个对应的 Dao,他封装了对这个实体的数据库操作。
例实体 Dao 接口 实现类User --gt UserDao --gt UserDaoImplRole --gt RoleDao --gt RoleDaoImplDepartment --gt DepartmentDao --gt DepartmentDaoImplArticle --gt ArticleDao --gt ArticleDaoImpl...说明: 1, 实体的 Dao 接口要继承 BaseDao 接口。
2, Dao 的实现类要继承 DaoImplBase 类。
3, 也可以不继承指定的接口或类,这样就要自己写相应的方法。
4, T getByIdLong id与 ListltTgt getByIdListLong idList不 要合并为 List getByIdLong... ids,因为获取一个对象时也是返回 List,不 方便。
问题:1, 有了 DaoBase 与 DaoImplBase,还要用 UserDao、RoleDao 吗? 答:要用。
因为 UserDao 或 RoleDao 中的方法可以分为有公有的方法与特有的方法两部分。
公有的方法是通过继承 BaseDao 得到的,特有的方法要写在自己里面(BaseDao中是没有的)。
2, UserDaoImpl 已经继承了 BaseDaoImpl,就不实现 UserDao 可以吗? 答:不可以。
否则 UserDao userDao new UserDaoImpl 就不成立。
使用反射获取类型参数的真实类型的代码如下: public DaoBaseImpl Type type this.getClass.getGenericSuperclass ParameterizedType pt ParameterizedType type this.clazz ClassltTgt pt.getActualTypeArguments0 说明:1, 使用 Session 时,不要自己创建,也不要管理事务,直接调用 getSession即可。
2, 暂时不实现 getSession方法,在后面的事务管理中实现: protected Session getSession throw new UnsupportedOperationException 事务管理(Session 管理)事务边界。
1,一个事务的范围是一个业务操作。
转帐 A - 100 // update // throw exception B 100 // update 2,在 Dao 中只是使用 Session,而不管理 Session 与事务3,一次请求的执行过程 1,在 Action 中要做什么? 1,获取用户输入 2,进行业务处理(调用业务方法) 3,给用户反馈(转到一个显示页面)1, 事务说明:事务的范围是一个业务方法,而不是一个数据库操作。
可以用银行转账的 例子来说明。
2, 事务管理就是要解决两个问题: a 在同一个请求中怎么使用同一个 Session? b 怎么才能不重复写业务方法中的开关 Session 与管理事务的模板代码?3, 解决思路: a 第一个问题:使用 SessionFactory.getCurrentSession b 第二个问题:使用过滤器,拦截的地址为“.do”。
4, 说明: a 每个请求使用一个线程来执行。
b 同时执行的多个请求是多个不同的线程。
c 先后的两次请求,有可能使用的是同一个线程(Web 容器有线程池)。
要使用 SessionFactory.getCurrentSession方法,需要先在 hibernate 配置文件中做如下配置,否则不能使用(会报错):“ltpropertynamequothibernate.current_session_context_classquotgtthreadlt/propertygt”配置后影响的行为如下:SessionFactory.getCurrentSession 获取当前线程对应的 Session,如果没 有(一个线程中的第一次调用),就会创 建一个 Session 并关联到当前线程后返 回。
Transaction.commit 提交事务,在提交后会自动关闭 SessionTransaction.rollback 回滚事务,在回滚后会自动关闭 Session 说明:如果配置了 currentSessionContext,在提交或回滚事务后会自 动关闭Session。
使用时就不要再调用关闭的代码了。
在关闭的时候就会出现异常了。
注意:SessionFactory.openSession后,本次打开的 Session 不会与当前线程绑定,也就是说用 SessionFactory.getCurrentSession是拿不到的!对象管理(BeanFactory) 使用工厂模式完解决对实现类依赖的问题,并使用配置文件配置要使用的实现类。
需要一个工具类,名为 BeanFactory,其中有一个获取实现类的方法,可以定义为:Object BeanFactory.getBean clazz 或ltTgt T BeanFactory.getBeanClassltTgt clazz 在实现时,所使用的实现类应是在配置文件(BeanFactory.properties)中配置的。
解决提交的表单内容的中文乱码 因为所有的页面都将使用 utf-8 编码,所以提交的表单也是 utf-8 编码。
在过滤器中设置 request 的编码为 utf-8 就可以解决 POST 方式提交表单的中文乱码问题:public void doFilterServletRequest request ServletResponseresponse FilterChain chain request.setCharacterEncodingquotutf-8quot chain.doFilterrequest response对于 GET 方式乱码不做处理。
如做处理,可使用包装或代理的方式。
出现问题了,怎么办?解决异常的方法1, 先看一下是什么异常。
比如 NullPointerException,是说明某行代码中的“.”前 面的对象为 null;或是异常 java.langClassNotFoundException,是找不到类 异常。
这时还要看异常的类型与后面的简单信息,如 java.lang.ClassNotFoundException: java.lang.String。
说明是 java.lang.String 这个类找不到。
在这一步要搞清楚是什么错误。
2, 找到出错的代码位置。
a 在异常信息中会显示出错时执行的代码是在哪一行,并且有超链接,点击就可以 了。
b 错 误 不 在 Java 代 码 中 , 如 异 常 javax.servlet.ServletException: org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.就是说访问的.do 地址 没有进行 Action 配置,这时就知道应该打 struts-config.xml。
3, 根据异常类型进行推测,一般的异常就可以解决了。
如 NullPointerException, 就找这一行中的“.”然后看是不是为 null,如果是,找出某对象为 null 的原因,问 题就解决了。
说明:1, 调试代码时,最好关闭所有其他的工程,在有多个工程代码相近的情况下尤其要这样 做,比如有两个工程分别为 ItcastOA_1、ItcastOA_2。
否则可能会出现代码写错 地方的情况,或是点击异常信息中的超链接,转到的是另外一个工程中的相同名称的 类中。
2, 异常要看最下面的,即最后一个“Caused by:”,因为他是最里层的。
上面的异常都 是捕获某异常后包装后再次抛出的。
一些的异常的解决办法java.lang.IllegalArgumentException: node to traverse cannot be nulljava.lang.IllegalArgumentException: node to traverse cannot be nullorg.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirstNodeTraverser.java:31org.hibernate.hql.ast.QueryTranslatorImpl.parseQueryTranslatorImpl.java:254org.hibernate.hql.ast.QueryTranslatorImpl.doCompileQueryTranslatorImpl.java:157org.hibernate.hql.ast.QueryTranslatorImpl.compileQueryTranslatorImpl.java:111org.hibernate.engine.query.HQLQueryPlan.ltinitgtHQLQueryPlan.java:77org.hibernate.engine.query.HQLQueryPlan.ltinitgtHQLQueryPlan.java:56原因 1: HQL 语顺的词法有错误,这时应找到出错的代码在哪一行,找出 HQL 中的语法错误。
java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.r ecoverLantlr/RecognitionExceptionL.
上一篇:
指纹识别系统目录
下一篇:
法律专业开题报告范文