OA项目概要设计说明书.docx

上传人:b****8 文档编号:9284503 上传时间:2023-02-04 格式:DOCX 页数:19 大小:95.99KB
下载 相关 举报
OA项目概要设计说明书.docx_第1页
第1页 / 共19页
OA项目概要设计说明书.docx_第2页
第2页 / 共19页
OA项目概要设计说明书.docx_第3页
第3页 / 共19页
OA项目概要设计说明书.docx_第4页
第4页 / 共19页
OA项目概要设计说明书.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

OA项目概要设计说明书.docx

《OA项目概要设计说明书.docx》由会员分享,可在线阅读,更多相关《OA项目概要设计说明书.docx(19页珍藏版)》请在冰豆网上搜索。

OA项目概要设计说明书.docx

OA项目概要设计说明书

Struts2中的验证逻辑编写在Action中.

Struts2中任何一个POJO都可以是一个Action类.

5、Struts2在页面里使用OGNL来显示各种对象模型

一个请求在Struts2框架中的处理大概分为以下几个步骤

(1)客户端初始化一个指向Web容器的请求。

(2)请求经过一系列过滤器(Filter)的过滤并传递给FilterDispatcher。

(3)FilterDispatcher接收到请求信息后,会根据URL在ActionMapper中搜索指定Action的映射信息。

(4)如果找到符合的映射信息,ActionProxy通过ConfigurationManager在配置文件struts.xml中搜索被请求的Action类。

(5)ActionProxy创建一个被请求Action的实例,该实例用来处理请求信息。

(6)如果在配置文件struts.xml中存在与请求Action相关的拦截器配置,那么该Action的实例被调用的前后,这些拦截器也会先被执行。

(7)Action对请求处理完毕后返回一个逻辑视图,此逻辑视图寻找对应的物理视图,并返回给客户端。

Struts2比较重要的类

org.apache.struts2.dispatcher.Dispatcher

该类有两个作用:

 

  1、初始化

  2、调用指定的Action的execute()方法。

org.apache.struts2.dispatcher.FilterDispatcher

这是一个过滤器。

文档中已明确说明,如果没有经验,配置时请将url-pattern的值设成/*。

 

  该类有四个作用:

  1、执行Action

  2、清理ActionContext,避免内存泄漏

  3、处理静态内容(Servingstaticcontent)

  4、为请求启动xwork’s的截拦器链。

com.opensymphony.xwork2.ActionProxy

Action的代理接口。

com.opensymphony.xwork2.ctionProxyFactory

生产ActionProxy的工厂。

com.opensymphony.xwork2.ActionInvocation

负责调用Action和截拦器。

com.opensymphony.xwork2.config.providers.XmlConfigurationProvider

负责Struts2的配置文件的解析。

在struts1.x中,struts框架是通过Servlet启动的。

在struts2中,struts框架是通过Filter启动的。

他在web.xml中的配置如下:

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

在web.xml文件中配置Struts2的过滤器

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

--自从Struts2.1.3以后,下面的FilterDispatcher已经标注为过时

org.apache.struts2.dispatcher.FilterDispatcher

-->

struts2

url-pattern>/*

publicclassHelloWorldActionextendsActionSupport{

privateStringmessage;

publicStringgetMessage(){

returnmessage;

}

publicvoidsetMessage(Stringmessage){

this.message=message;

}

publicStringexecute()throwsException{

this.message="我的第一个struts2应用";

return"success";

}

}

/WEB-INF/page/hello.jsp

package:

在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。

在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。

name:

配置包时必须指定name属性,如果其他包要继承该包,必须通过该属性进行引用。

extends="struts-default"通常每个包都应该继承struts-default包,struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型。

Struts2很多核心的功能都是通过这些内置的拦截器实现的。

如:

从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。

当包继承了struts-default包才能使用struts2提供的这些功能。

struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。

struts-default.xml也是Struts2默认配置文件。

Struts2每次都会自动加载struts-default.xml文件。

struts2中提供了多种结果类型,如:

dispatcher(默认值内部转发)、redirect(浏览器转发)、redirectAction、plainText(jsp源代码)。

下面是redirectAction结果类型的例子,如果重定向的action中同一个包下:

helloworld

如果重定向的action在别的命名空间下:

helloworld

/test

如果没有指定result的name属性,默认值为success。

在result中还可以使用${属性名}表达式,表达式里的属性名对应action中的属性。

如下:

view.jsp?

id=${id}

通过这种方式,我们就可以将Struts2的Action按模块配置在多个配置文件中

 

动态方法调用

如果Action中存在多个方法时,我们可以使用!

+方法名调用指定方法

/struts/test/helloworld.action

要访问action的other()方法,我们可以这样调用:

/struts/test/helloworld!

other.action

通常不建议大家使用动态方法调用,我们可以通过常量struts.enable.DynamicMethodInvocation关闭动态方法调用。

Struts2对象获取

方法一,通过ServletActionContext.类直接获取:

方法二,实现指定接口,由struts框架运行时注入

struts2手工编写实现(action中所有方法进行校验)

步骤1、在Action中重写validate()方法

publicvoidvalidate(){

if(this.username==null||"".equals(this.username.trim()))

{

this.addFieldError("username","用户名不能为空");

}

}//自动验证action中的所有方法,验证不通过自动返回“input”视图。

2、在要显示验证不通过的信息的网页上引入struts2标签库

<%@tagliburi="/struts-tags"prefix="s"%>

3、在网页上显示验证不同过的信息

fielderror>

fielderror>//显示所有的信息

fielderror>

param>username

param>

fielderror>

//显示需要的单个信息

publicvoidvalidateAdd(){

if(username==null&&"".equals(username.trim()))this.addFieldError("username","用户名不能为空");

}

<%@tagliburi="/struts-tags"prefix="s"%>

基于配置校验的举例

4、编写action类PersonAction.java

publicclassPersonActionextendsActionSupport{

privateStringusername;

privateStringmobile;;//省略了set、get方法

publicStringupdate()

{

ActionContext.getContext().put("message","更新成功!

");

return"success";

}

publicStringsave()

{

ActionContext.getContext().put("message","保存成功!

");

return"success";

}

Stringintercept(ActionInvocationinvocation):

执行截拦动作

publicStringintercept(ActionInvocationinvocation)throwsException{

System.out.println("进入拦截器");

ActionContext.getContext().getSession().put("user",getUsername());

ActionContext.getContext().getSession().put("pass",getPassword());

returnSUCCESS;

Objectuser=ActionContext.getContext().getSession().get("user");

if(user!

=null&&user.equals("sunli"))

使用上面的资源文件,在struts.xml中使用常量加载全局资源文件如下:

itclass为资源文件的基本名。

beanname="cn.itcast.bean.Person"var="myperson">

paramname="name"value="%{'zhang'}">

param>

paramname="age"value="34">

param>

bean>

propertyvalue="#myperson.name"/>

Hibernate接口分四类:

1、提供访问数据库的操作的接口:

Session、Transaction、Query接口;

2、用于配置Hibernate的接口

Configruation;

3、回调接口,使用应用程序接受Hibernate内部发生的事件,并做出相关的回应:

Interceptor、Lifecycle、Validatable接口;

4、用于扩展Hibernate的功能的口:

UserType;

其中Hibernate核心接口

1、Configuration接口

作用:

配置Hibernate,启动Hibernate和创建SessionFactory对象;

2、SessionFactory接口

作用:

初始化Hibernate,充当数据存储源的代理,创建Session对象;

3、Seission接口

作用:

负责保存,更新,删除,加载和查询对象;

4、Transaction

作用:

它是hibernate的数据事务接口,对地层的事务接口做了封装,底层事务接口JDBC、API、JTA、CORBAAPI;

5、Query和Criteria接口

作用:

执行数据库查询对象,以及控制执行查询过程;

2.SessionFactory接口

SessionFactory负责创建Session实例,可以通过Configuration实例构建SessionFactory。

Configurationconfig=newConfiguration().configure();

SessionFactorysessionFactory=config.buildSessionFactory();

Transaction是Hibernate中进行事务操作的接口

Transactionts=session.beginTransaction();

mit();

5.Query接口

Queryquery=session.createQuery("fromKcbwherekch=?

");

例如以下语句:

Queryquery=session.createQuery(“fromKcbwherekch=100”);

在后面设置其值:

query.setString(0,"要设置的值");

上面的方法是通过“?

”来设置参数,还可以用“:

”后跟变量的方法来设置参数,如上例可以改为:

Queryquery=session.createQuery("fromKcbwherekch=:

kchValue");

query.setString("kchValue","要设置的课程号值");

或者:

query.setParameter(0,"要设置的值");

Query还有一个list()方法,用于取得一个List集合的示例,此示例中包括可能是一个Object集合,也可能是Object数组集合。

例如:

Queryquery=session.createQuery("fromKcbwherekch=198");

Listlist=query.list();

xml version='1.0' encoding='UTF-8'?

>   

DOCTYPE hibernate-configuration    

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"    

"   

   

   

—JDBC驱动程序-->   

com.mysql.jdbc.Driver   

-- 连接数据库的URL-->   

     

jdbc:

mysql:

//localhost:

3306/schoolproject    

   

true   

UTF-8   

--连接的登录名-->   

root   

--登录密码-->   

   

     

-- C3P0连接池设定-->   

org.hibernate.connection.C3P0ConnectionProvider    

   

20   

5   

120   

100   

120   

2   

--是否将运行期生成的SQL输出到日志以供调试-->   

true   

--指定连接的语言-->   

org.hibernate.dialect.MySQLDialect   

--映射Student这个资源-->   

   

     

  

Queryquery=session.createQuery(hql);

query.setCacheable(true);//启用查询缓存

query.setCacheRegion(“queryCacheRegion”);//设置查询缓存区域(数据过期策略)

query.list();

HQL查询依赖于Query类,每个Query实例对应一个查询对象。

使用HQL查询可按如下步骤进行:

(1)获取HibernateSession对象;

(2)编写HQL语句;

(3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象;

(4)如果HQL语句包含参数,调用Query的setXxx方法为参数赋值;

(5)调用Query对象的list等方法遍历查询结果

Queryquery=session.createQuery(

"fromPersonaspwherep.namelike'李%'");

Listusers=query.list();

Hibernate中的关联映射主要有3种:

一对一关联(one-to-one)

一对多(或多对一)关联(many-to-one)

多对多关联。

(many-to-many)

双向关联单向关联

 

由于Hibernate只是对JDBC进行了轻量级的封装,因此完全可以绕过Hibernate直接调用JDBC进行批量插入。

因此上例可以改成如下代码:

Sessionsession=HibernateSessionFactory.getSession();

Transactionts=session.beginTransaction();

Connectionconn=session.connection();

try{

PreparedStatementstmt=conn.prepareStatement("insertintoKCB(KCH)values(?

)");

for(inti=0;i<500;i++){

stmt.setString(1,i+"");

stmt.addBatch();//添加到批处理命令中

}

stmt.executeBatch();//执行批处理任务

}catch(SQLExceptione){

e.printStackTrace();

}

mit();

HibernateSessionFactory.closeSession();

(2)绕过Hibernate调用JDBC进行批量更新

由于这里是直接操作数据库,故要操作对应表,而不是类。

 

●Spring是什么

●面向切面编程(AOP---aspectorientedprogramming)

●控制反转(loc):

控制权的转移对象的控制权转交给spring容器。

●建立Spring项目

HelloWorld.java

●applicationC

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

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1