struts2要点总结

struts2要点总结
struts2要点总结

struts2要点总结

struts2配置文件

-------------------------------------------

*站位符{1}、{2}是分别取出通配符的值

***常用配置方式:

1)驼峰式:

/{1}UserSuc.jsp

2)下划线式:

/{1}_{2}.jsp

或:

/{0}.jsp

//{0}表示action定义中的name值:*_*

***Result

1)服务器跳转 type="chain"

test

2)客户端跳转

test

注意:

1)有通配符时,是按顺序来访问

2)如果没有通配符时,优先级最高

3)ACTION文件启名要以Action结尾

////////////////////////////////

***OGNL应用:

-------------------------------

OGNL和EL区别

EL在JSP中使用加${xxx},在STRUTS标签中使用OGNL表达式时不用加${xxx}直接写表达式即可

标签获取request中的值如:

调用值栈中的普通方法如://action中的属性会放到值栈中

调用ACTION中的静态方法如:

value="@com.cyjch.action.LoginAction@get()"/>

调用JDK中类的静态方法如:

value="@https://www.360docs.net/doc/158606410.html,ng.Math@floor(4.6)"/>

调用静态属性如:

value="com.cyjch.action.LoginAction@USERNAME"/>//静态属性应该为

public的

调用普通的构造方法如: //结果为:

['list1','list2','list3']

获取List集合中某一个元素: //结果为:list1

获取Map集合中某一个元素: //结果为:map1

获取Map集合中所有元素的键:

获取Map集合中所有元素的值:

获取List集合中的所有对象: //students 为List,需要set和get方法

用投影获取List集合中所有对象的属性:

value="students.{username}"/>//从集合中取出来一个子集合

用投影(子集合)获取List集合中某一个对象的属性:

value="students.{username}[0]"/>

选择:? ^(开始) $(结束)

用选择?(有条件)获取List集合中的成绩极格的对象:

value="students.{?#this.grade>=60}"/>//#this为循环的当前对象

用选择?(有条件)获取List集合中的成绩极格的第一个对象的username:

value="students.{?#this.grade>=60}.{username}[0]"/>//#this为循环的当前对象

用选择^(有条件)获取List集合中的成绩极格的第一个对象的username:

value="students.{^#this.grade>=60}.{username}[0]"/>//#this为循环的当

前对象

用选择$(有条件)获取List集合中的成绩极格的最后一个对象的username:

value="students.{$#this.grade>=60}.{username}[0]"/>//#this为循环的当

前对象

***OGNL中的#的使用(可以取出堆栈上下文中的存放的对象,以下匀在

中使用)

-------------------------------

1)parameters 例:#parameters.id[0] <==> request.getParameter("id")

2)request 例:#https://www.360docs.net/doc/158606410.html,erName <==> request.getAttribute("userName")

3)session 例:#https://www.360docs.net/doc/158606410.html,erName <==> session.getAttribute("userName")

4)application 例:#https://www.360docs.net/doc/158606410.html,erName <==>

application.getAttribute("userName")

5)attr(默认按顺序去读取context/request/session/application四种中的值) 例:https://www.360docs.net/doc/158606410.html,ername

***OGNL中%{}的使用(可以取出存在值栈中的Action对象,直接调用它的方法)------------------------------------

例:ACTION如继承了ActionSupport那么可以用

value="%{getText('key')}"/>的方式拿出国际化的信息

***OGNL中的$使用

------------------------------------

1)用于国际化资源文件中

2)用于配置文件中

***valueStack为根对象,可以省写#

---------------------------------

***服务器跳转时共用一个值栈

***使用top获取值栈中的第二个对象://[1]代表第二个对象

***使用N获取值栈中的第二个对象属性:

value="[1].username"/>//[1]代表第二个对象

***使用@调用静态方法//其中vs1代表第一个,vs2代表第二个栈中的Action

***自定义拦截器栈

-------------------------

class="com.cyjch.inteceptor.TestInteceptor"/>

/loginSuc.jsp

/loginFail.jsp

代码:TestInteceptor.java

public class TestInteceptor extends AbstractInterceptor{

public String intercept(ActionInvocation invocation)throws Exception{

System.out.println("TestInterceptor--begin");

long startTime = System.currentTimeMillis();

String result = invocation.invoke();

long endTime = System.currentTimeMillis();

long time = endTime- startTime;//共执行多少时间

System.out.println("执行全部--end");

System.out.println("TestInterceptor--end");

return result;

}

}

***等待的拦截器(execAndWaitIntercept)-- 一般的拦截器在API文档中都有案例

wait.jsp

/loginSuc.jsp

3000

wait.jsp

---------------

<%

response.setHeader("refresh", "3;URL=login.action");

%>

数据已经提交,正在等服务返回信息,请耐心等待。。。

***令牌 : 用来防止重复提交信息

服务器产生令牌并放置到客户端一份,客户端提交信息后

和服务器端令牌比较,如一致则正常跳转并清空令牌;

客户端再后退提交则和服务器端令牌不一致,显示错误提示

loginSuc.jsp /login.jsp

/repeaSubmitError.jsp

loginSuc.jsp /login.jsp

/repeaSubmitError.jsp

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

***自定义拦截器(以下的案例在登录时并不使用,只作演示,正常时应用过滤器实现,对整个目录过滤)

AuthInterceptor.java//登录拦截器

-----------------------

public class AuthInterceptor extends AbstractInterceptor{ public String intercept(ActionInvocation invocation) throws Exception{

//Map session=invocation.getInvocationContext().getSession(); Map session = ActionContext.getContext().getSession();

//如果SESSION为空,则跳转到登录页面

if(session.get("login" == null){

retrun Action.LOGIN;

}else{

invocation.invoke();//如果有session,则表示用户已经登录,

那么直接执行下一步

}

}

}

struts.xml中配置

-----------------------

/login.jsp

class="com.cyjch.interceptor.AuthInterceptor"/>

/loginSuc.jsp /login.jsp

/admin/main.jsp

-----------------------

***类型转换

自动转换类型

--------------

String - String

String - age

String - Date

String - double

绝大多数情况下,数据的类型转换不需要关注

***上传下载需要再看

Struts2框架工作原理及应用体会

2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342·

Strurts2

阐述struts2的执行流程。 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action 和用户实现的企业业务逻辑组件。 核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理 机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2 是WebWork的升级版本。 基本简要流程如下: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被FilterDispatcher接收。 3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。 4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到 相应页面。 6、返回HTTP响应到客户端浏览器。 工作原理 在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否 需要调用某个Action 4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action 类 6 ActionProxy创建一个ActionInvocation的实例。 7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP

strusts2课堂总结

一、 1、struts2 struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性 2、struts2和struts1的区别 struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。 struts2的action是原型,安全的,struts2的action是单例,非安全 3、步骤: 1、导入包 2、在web.xml文件中,加入struts2的核心拦截器 3、在src下放入struts2的xml struts.xml 4、url http://localhost:8080/Struts2_01_HelloWorld/demo/hello.action 二、 1、默认值 2、转发和重定向的区别 转发:url显示的依然是上一个的url,共享上一次的请求 重定向:url显示的是下一个的url,不共享 3、url http://localhost:8080/Struts2_02_Default/demo/hello.action 4、路径 http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action 1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action 2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action 3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action 3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action 三、 11、自定义action

struts2 实验报告

1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程

1.3 数据库设计 相关的映射文件: 一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。 2.系统实现与测试 2.1 系统采用的关键技术 MVC 框架采用了Struts2框架,Struts2框架的易用性,极好的简化了系统的MVC 层的实现;本系统使用了Struts2的JSON 插件来完成Ajax 功能,除此之外本系统为了避免进行底层的Ajax 交互,还是用了一个简单Prototype.js 函数库,用以简化Ajax 编程。Struts2框架的稳定性,为系统的稳定运行提供了保证。

Struts2的介绍及总结

Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。 Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。 线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。Action属性能够通过web页面上的taglibs访问。 表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。Struts2不仅支持JSTL, Struts2 还可使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验:Struts2支持通过validate方法和XWork校验框架来进行校验。XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。

java 问题汇总(总结,重点)

在用到spring框架中时,场景如下 post 请求过去,对象接收不到参数的值(解决办法:考虑到在参数上加个@RequestBody 注解即可,有些没加的是框架帮忙处理了后默认接收的是json串) http://localhost:8080/xxxxxxxxxxx-xxxxxxx-api/xxxxxx/xxxxx/xxxxxxxxx/sugges t/add.sgt ================================================== ==================================== mapper.xml->@Repository{存储数据层}->@Service{业务层}->@Controller{展示层} (spring注解可以理解为这样的线性,任其项目结构怎么变这样的线性结构是不会变的,万变不 离其宗) @Repository @Service @Controller均是注册在spring上下文中 @Autowired 在spring上下文中找bean @Qualifier 配合@Autowired使用当找到多个同一类型的bean,则会抛异常,此时可以使用@Qualifier("beanName"),明确指定bean的名称进行注入 @RequestMapping 配置连接 @Required 注册在sett方法上,检查有没有被调用 @RequestParam 绑定参数 @RequestBody读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上

Struts2知识点总结

Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径

1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解:

Struts2配置

1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。

struts2面试题(自己总结)

Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,

包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。

Struts1学习笔记总结

Struts1 (1) Struts1和Servlet的关系 (1) 创建第一个Struts1项目 (1) 例子1: (3) 总结重点:struts1的工作流程(基于MVC模式的) (7) 一.普通的Servlet的工作流程 (7) 二.Structs1的工作流程(和上面的对比记忆) (8) Struts标签 (9) Bean标签 (9) html标签 (10) logic标签(逻辑标记) (12) i18n(国际化) (13) Struts1 Struts1和Servlet的关系 Jsp+Servlet+Javabean ActionForm和VO的区别: 一样的内容,不一样的作用 ActionForm只接收前台表单传来的数据 VO是conga后台提取的数据向前台传递 创建第一个Struts1项目 新建一个web项目,选择1.4即可 右键----MyEclipse----Add Struts Capacity

---------------Struts控制文件的路径 TLD(标签) 1) 2):显示信息 3):逻辑标签 struts-config.xml

Struts2的拦截器总结

Struts2 中的拦截器和servelt 中的过滤器是非常的相似的。如果学过过滤器的话,肯定能够感觉的到,尽管有些微的不同。可是struts2的拦截器到底如何使用呢,为什么会有这些配置呢?接下来一一来看。 过滤器和拦截器是非常相似的,过滤器public interface Filter 接口里面有三个方法: ?init(FilterConfig filterConfig), ?destroy(), ?doFilter(ServletRequest request, ServletResponse response, FilterChain chain), 这里面的doFilter() 方法是最重要的,在struts2 中String intercept(ActionInvocation invocation)就相当于此方法。 如何完成一个拦截器呢?在struts2 中要实现一个接口这个接口是什么呢?在哪呢?,是否在哪听说过?是webwork 是我们以前听的最多的关于拦截器的框架,struts2 用了其中一个核心的东西,这个东西在是什么呢?是xwork 。恩,有了它才可以拦截,好了我们在哪找呢?在com.opensymphony.xwork2.interceptor 中找,里面有个Interceptor 这是个接口,里面也有三个方法,有init,destroy 和intercept 三个方法,而在struts2 里面的所有的拦截器都继承这个接口!

为了看这些是怎么实现的,加入了一些打印! 将上面的配置整合起来就是:

这样就可以让Aciton 被拦截了,到此,好了,可以运行程序了: 输出结果是:启动服务器init 被打出 运行后提交action 输出intercept 这个就是初步的一个拦截器。 ======= 在此可能出现一个问题,是什么呢?如果就我们做的注册程序而言,可以想一下,有数据转换,有数据校验,以前当转换和校验不符合的时候,点击提交,会提示相关错误信息,然而,此时当转换和校验依然不符合要求时,点击提交,却不会提示错误信息,为什么呢? ==== 当然你答对了,这些功能都包含在struts2的默认拦截器中,这里没执行是被添加的拦截器myinterceptor取代了。 为了查明原因可以查看一下struts2-core-2.xx.jar中的struts-default.xml 这个文件 这里定义的很多的东西,和我们的程序相关的非常紧密 首先这里有个 ... 和struts.xml 里面的 ...有什么关系呢?很明显可以猜到struts.xml 继承的就是struts-default.xml中的包struts-default。 这个里面还看到标签,这个是定义拦截器栈的,仔细看可以发现里面有个validation 如此可以猜想,validation 也是定义的一个拦截器,猜想当注册信息出错后没有提示信息呢?肯定是相关的验证功能没有执行,以前的执行了,现在没执行,

STRUTS2实验报告

1. 系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于struts2、spring、 hibernate三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用 户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按 钮来重复注册多个用户。 系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名 不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果 系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重 新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登 录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生 成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符 串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程 1.3 数据库设计 相关的映射文件: <hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/> <propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping> 一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关 系。 2.系统实现与测试 2.1 系统采用的关键技术 mvc框架采用了struts2框架,struts2框架的易用性,极好的简化了系统的mvc层的实 现;本系统使用了struts2的json插件来完成ajax功能,除此之外本系统为了避免进行底 层的ajax交互,还是用了一个简单prototype.js函数库,用以简化ajax编程。struts2框 架的稳定性,为系统的稳定运行提供了保证。 spring容器作为系统的ioc容器,将系统中所有组件都放在spring容器中进行管理, 并且充分利用了spring ioc容器的功能,采用依赖注入来管理系统中各组件的依赖关系,避 免了各组件之间的硬编码耦合,提高了系统的可扩展性。 借助hibernate orm框架实现系统的持久化,通过hibernate的框架帮助,允许上层程 序采用面向对象的方式编程,二hibernate负责把面向对象的持久化操作转换成jdbc操作, 但hibernate的底层操作对开发者完全透明,从而让用户从具体的jdbc访问中释放出来,无 需理会底层的jdbc数据库访问,而是以面向对象的方式进行持久化操作。 2.2 关键程序流程

struts2学习心得

一. 配置问题: 最新的struts2为GA版2.2.1 其中必须类库为https://www.360docs.net/doc/158606410.html,mons-fileupload-1.2.1.jar 2. commons-io-1. 3.2.jar 3. freemarker-2.3.16.jar 4. javassist-3.7.ga.jar 5. ognl-3.0.jar 6. struts2-core-2.2.1.jar 7. xwork-core-2.2.1.jar 之前的版本使用ognl时不需要javassist这个类库现在这个版本则需要。。 二. EL表达式(JSP EL) 目的是为了使JSP写起来更加简单。 A、语法结构 ${expression} B、[ ]与.运算符 EL 提供“.“和“[ ]“两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如: ${user.My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:${https://www.360docs.net/doc/158606410.html,er[data]}中data 是一个变量 C、变量 EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。 因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。 假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。 属性范围在EL中的名称 Page PageScope Request RequestScope Session SessionScope Application ApplicationScope D、特别强调: 1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的pageContext 属性包含某些其他值,${pageContext} 也返回PageContext 对象。 2、注意<%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE 表示不禁止.JSP2.0中默认的启用EL语言。 3、在web中用EL表达式时${name}其意思是调用其getName方法,而不是name这个属性 例如:

Struts2总结

第一章MiniStruts 的制作 不使用Servlet,也不使用request.getParameter()获取参数;是用户能够直接访问Dao中的查询方法? 1、可以使用filter过滤器,用来拦截用户的表单提交(请求的路径、请求的参数)。 2、根据路径分析出,应该调用哪个类的哪个方法。 3、根据请求的参数,动态的将参数的值,设置到类的属性中去。 4、执行完成之后,需要跳转的页面(创建xml配置文件,配置用户跳转的路径信息)。 一、s truts的实现步骤 手动导入: 1.创建Web项目。 2.导入Strutrs的几个必须包(7个jar)。 3.在src目录下,创建struts.xml配置文件(名字和路径都不能改)。 4.在web.xml配置文件中,添加Struts的支持(配置一个filter过滤器)。 自动导入(Myeclipse8.0以上的版本): 第二章深入Struts Struts2运行原理: 请求--- >自定义过滤器----> filterdispatcher ------> ActionProxy(代理,读取struts.xml的配置文件)---->ActionInvocation(action的调用者,调用具体的Action;在调用之前经过一系列的拦截器)——>执行完Action之后,跳转到对应的页面。 注意:struts中的所有编码处理都是i18n拦截器处理,所有的表单数据处理都是在系统默认拦截器中获取。 Struts.xml配置文件详解:

动态方法调用: 注意:1. 在配置的时候,不用指定具体的方法(不用写method=“XXX”); 2. 在请求action的路径指定需要执行的方法名即可。(格式:action名!方法名.action)使用通配符进行模糊匹配: Struts2对返回结果页面进行配置:

struts2复习总结计划题.docx

Struts2 复习题 1.以下属于 struts2 的控制器组件是: 2.以下属于 struts2 的体系结构的是: ( 多选 ) 控制器组件配置文件 3.以下属于 struts2 配置文件中的配置元素是: ( 多选 ) A. B. C. D. 4.关于 struts1 和 struts2 对比的说法正确的是: 要求 Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类 中的 Action不是线程安全的,而struts2中的Action是线程安全的 和 struts2 中都使用 ActionForm 对象封装用户的请求数据 使用 OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于 ValueStack 说法正确的是: ( 多选 ) A. 每个 Action 对象实例拥有一个 ValueStack 对象 B. 每个 Action对象实例拥有多个ValueStack对象 中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 会在请求开始时被创建,请求结束时消亡 6. 关于 struts2配置文件说法正确的是: A. 必须在 WEB-INF/classes目录下 B. 名字必须为 C.配置 Action时,必须配置包信息 D. 使用 元素配置转发 7.在 struts2 配置中用()元素来配置常量 : A. B. C. D. 8.关于 struts2 包的说法正确的是:框 架使用包来管理常量 框架定义包时必须指定 name属性 框架中配置包时,必须继承自struts-default包,否则会报错 框架中使用包来管理Action 9. struts2 中获取Servlet API 的方法正确的是: ( 多选 ) A. 使用 ActionContext对象以解耦合的方法访问Servlet API B. 使用 ServletActionContext对象以解耦合的方式访问Servlet API C.使用 ActionContext对象以耦合的方式访问Servlet API D.使用 ServletActionContext对象以耦合的方式访问Servlet API 10.struts2 动态调用的格式为: ? ! 11.如果要实现 struts2 的数据校验功能 A. 普通 Action类可以实现 B. 继承自 Action接口可以实现 C.继承自 ActionSupport类可以实现 D.继承自 ActionValidate类可以实现

struts2课程知识点总结-01

struts2课程知识点总结 by wanggc 1.action a) struts2环境配置 包括5个基本jar包,web.xml中配置过滤器、struts.xml文件配置、 编写action b) 得到表单数据(接受参数) 两种方法:1、get set 方法2、对象 c) 动态方法配置 action中定义方法名称,strust.xml文件action中配置如: method=”add” d) action通配符的配置 * 与{ } 或*_* e) 默认action的配置 f) session等jsp内置对象的应用 两种方法1、普通 2 、map g) 简单数据验证 应用addFieldError() (了解) 2.result Result四种返回类型: 1、dispatcher 2、redirect 3、chain 4、redirectAction

/r1.jsp /r2.jsp r1 r2

Struts2开发总结

Struts2项目开发总结 (注:Struts2版本:Struts2.1.6,数据库:Oracle9i) 所须架包: commons-logging-1.0.4.jar、commons-fileupload-1.2.1.jar 、freemarker-2.3.13.jar ognl-2.6.11.jar、struts2-core-2.1.6.jar 、xwork-2.1.2.jar 1、若在前台页面使用orgl表达式: 必须定义:<%@ page isELIgnored = "false" %> 使用:${requestScope.count}来获取session中的值 2、在jsp页面中显示action中的数据,不需要点击链接到action再返回页面中显示数据 第一步,写一个action类 第二步:配置struts.xml文件,如: /sort1.jsp /error.jsp 第三步:在sort1.jsp中遍历action方法为sort5list的结果集: "> 第四步:在index.jsp中调用action为sort5list的方法 3、Struts2超链接传参方式: 第一种: "> 第二种: Newsquerynew 最新文章 第三种: 直接使用即可 注意:Struts2超链接标签中的href属性是必选参数,否则在项目整合中可能会出现不明的标签异常。 4、使用Struts2标签循环遍历结果集: ">

相关主题
相关文档
最新文档