struts 学习笔记
Struts笔记

Struts2Struts2 (1)1 1、环境搭建 (2)2 2、Struts中的action (2)2.1 2.1、访问不同的方法 (3)2.2 2.2、一些常量的配置 (4)2.3 2.4、参数的传递 (4)3 3、OGNL (5)3.1 3.1、OGNL基础 (5)3.2 3.2、ValueStack (7)3.3 3.3、Struts2的常用标签 (8)4 4、Struts2的其他知识 (9)4.1 4.1、ModelDriven (9)4.2 4.2、类型转换 (9)4.3 4.3、文件上传 (11)4.4 4.4、拦截器 (11)4.5 4.5、国际化(I18N) (13)4.6 4.6、struts2的常用标签 (14)1 1、环境搭建1、导入相应的jar包(可以参考blank项目)2、设置web.xml开启struts2的过滤器4、编写struts.xml文件(在类路径中创建struts.xml)特别注意以上的extends中的值应该是struts-default。
2 2、Struts中的actionStruts2中的Action是一个纯java对象默认的action会执行execute方法2.1 2.1、访问不同的方法1、可以为action设置多个method,之后在struts.xml文件中配置这些action所对应的方法2、只是写一个action,通过一些特殊的方法来进行访问以上操作问题是:需要为不同的方法设定不同的返回值。
这个名称不好统一3、使用通配符的方式在开发中一般都使用通配符的方式(这样可以大大减少action的配置)2.2 2.2、一些常量的配置可以通过<constant>标签来设置一些常量的配置,这些常量可以通过struts的jar包来查询2.3 2.4、参数的传递1、对于servlet而言传递参数是通过request或session等Servlet作用域进行传递的2、对于struts2而言,传递参数非常简单方式一3、3方式二方式三(使用Servlet API)一般不推荐使用3、在action中接受参数只要定义相应的属性,会自动完成传值。
Struts1学习笔记总结

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

Struts概念4、struts是一个开源的框架1、为什么有Struts?2、Struts的好处为什么是Web层框架Struts原理手写一个Struts//定义属性【这里有一个规范:就是我们定义属性的时候,//应该和jsp页面的控件属性一样。
如果有人提出疑问:说表单的属性名是不是一定和控件名一样?//只要保证set 和get 方法与属性名存在关联】4.Action5.Filter处理中文乱码public class MyFilter1 extends HttpServlet implements Filter {public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubarg0.setCharacterEncoding("utf-8");//设置接受的编码arg2.doFilter(arg0, arg1);//}public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub}}<!-- 配置过滤器 --><filter><filter-name>MyFilter1</filter-name><filter-class>com.mhy.filters.MyFilter1</filter-class> </filter><filter-mapping><filter-name>MyFilter1</filter-name><url-pattern>/*</url-pattern></filter-mapping>使用工具开发struts完全使用工具开发5.创建表单截图创建ActionMysqlJava EE 中三种标签标签的选择Struts jstl标签技术为什么有?Jstl标签的好处常用标签引入标签<% taglib %>Java EE 5 Libraries->jstl-1.2.jar->META-INF->c.tld案例讲解c标签c:out标签<%//这句话本应放在控制器中//如果我们的域对象中有相同的属性名,c:out 优先级是pageContext>request>session>applicationrequest.setAttribute("abc","你好1<a href=''>百度</a>") ;//session.setAttribute("abc","你好2") ;//application.setAttribute("abc","你好3") ;//pageContext.setAttribute("abc","你好4") ;User u=new User();u.setName("马海燕");u.setAge(30);request.setAttribute("user",u);%><c:out value="hello world"></c:out><h1>如何输出request/session/application/pageContext域对象的数据</h1><!-- escapeXml 用于指定按照html样式显示,默认为true【表示文本】false【html样式】 --><c:out value="${abc}" default="没有值" escapeXml="false"></c:out><h1>如何输出对象</h1><c:out value="${}"></c:out> ||<c:out value="${user.age}"></c:out><br/>${} @@ ${user.age*20}c:set 标签<body><c:set var="abc" value="你好!" scope="request"></c:set><%//上面的标签等价于//request.setAttribute("abc","你好!");%><c:out value="${abc}"></c:out></body>c:remove<body><%request.setAttribute("a","你好!中国。
struts1学习笔记

struts1开发学习笔记使用一个简单的例子记录struts1开发过程。
0、 描述主要功能描述:index 界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。
newProduct.jsp 是录入的界面,searchProduct.jsp 是查询列表的界面。
ProductAction.java 是处理逻辑的action简单描述流程图:1、 构建环境在Myeclipse 中,新建一个工程StrutsTest ,选择该工程,右键Myeclipse->add srutscapapibality ,弹出界面,选择struts1.2支持。
如下图所示:添加完struts 支持后,lib 目录下会增添struts 的jar 包、增添struts 的配置文件:/WEB-INF/struts-config.xml 、同时在web.xml 中增添了struts 的配置。
2、 代码编写2)创建工具类Util.java,从数据库连接池中获得连接。
需要两个步骤第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源,第二步:在util类中读取配置获得连接,util.java如下:3)创建工具类EncodingFilter.java,自定义过滤器,并在web.xml中配置,参考web.xml配置中内容。
EncodingFilter.java的内容如下:4)修改web.xml,指定首页为index.jsp。
文件内容如下:最后定义了一个fileld 的过滤器,是用来过滤字符编码的,后面会提到。
6)index.jsp中提到productAction.action?method=viewAddForm,需要在在配置文件中配置了action的实现类,以及作为上传数据时用来保存数据的form:productForm10)searchProduct.jsp是查询结果界面,代码如下:http://localhost:8080/StrutsTest即可访问。
struts2学习笔记(部分)

1、namespaece(最好用模块的名字命名)Namespace 为空时,用于处理其他package不能处理的全部的action2、Package 用于区分重名的情况3、copy项目的方法及注意事项修改它的启动项引入别人的项目的方法4、action4`1修改文件的默认编码4`2每次访问action都重新new出一个新的对象,不存在同步的问题执行过程4`3Action 继承ActionSupport5、路径:获取系统绝对路径<% String context = request.getContextPath(); %><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>使用绝对路径6、ActionMethod动态调用方法7、ActionWildcard通配符使用通配符,将配置量减到最低约定优于配置8、数值传递ActionAttrParamInputDomainModelDrivenModel过程9、中文问题 2.1.6.的bug不能解决中文问题10、11、value stack值栈< s:property value=“Name”/>取值栈中的数值如:< s:property value=“error”/>< s:property value=“[0]Propertyvalue是一个map,name就是key name is error 就是value 13、访问页面元素访问Stack Context中的元素14、include,模块包含15、认Action (好处:访问不存在时自动跳转带默认页)Default-action-ref默认action引用16、result类型1)默认是dispatcher 常用服务器端跳转2)Rdiect 只能是视图不能是action 客户端跳转,最后显示jsp3)Chain ---forwordaction action前不可以加”/”action之间的跳转,最后显示action4)RedirectAction action跳转,最后显示jsp服务器断的跳转:17、Global_ResultExtends =“要继承的包名“Result name属性:18、取value stack中的值动态绑定的。
[计算机软件及应用]struts笔记
![[计算机软件及应用]struts笔记](https://img.taocdn.com/s3/m/86fb3752c950ad02de80d4d8d15abe23482f0323.png)
Struts学习笔记xml描述数据本身xsl修饰xmlDOMSAXstup 通过协议骨架远程对象典型的proxy代理struts:学j2ee应该朝domain model,FrameWork,Parttern,架构模式方向发展,才能深入了解掌握。
一、Domain Model领域模型:是对现实世界的对象模型是从现实世界抽取出来的一般是先把领域模型设计出来DDD领域驱动设计不像以前,上来先设计数据库,数据库是面向关系的,而java是面向对象的,先面向关系再面向对象,有点别扭ORM自动的把实例类自动转换成数据表实体对象概念,user就是实体概念,有标识值对象概念,属于实体对象的一部分,不是跟数据库的对应二、Parttern模式遇到什么事情用什么方案解决?1、设计模式,GOF设计模式,对象思维,就是把现实中的实体抽象成对象工厂,策略,代理很重要,掌握了设计模式,就有了对象的概念2、架构模式MVC架构模式3、分析模式RBAC(Roles Base Access Control)基于角色的访问控制,对权限设计的处理模型who谁用这些权限what针对哪些资源设计权限how授权给谁,怎么样授权三、FrameWork 框架框架不是一个成熟的产品,是个半成品,struts spring是给开发人员用的,是基础性的服务,就是提供基础组件,封装的是基础性的服务,才可以在各个行业通用。
是大师级的人物写出来的框架,如果我们不用框架,自己就得先写框架,然后再开发具体业务,那就太费时,用框架,我们就只考虑具体业务设计开发,struts就是一个mvc框架。
领域模型对象表现层-业务层-持久层struts spring hibernate以前:jsp -实体bean现在:jsp -采用DTO 或者VO宜于扩展:OCP,只增加相应的实现类,不用修改以前的类两层的一般是:C/S以前大量的存储都用存储过程,不适合跨平台思想B/S:呈现层,业务层,持久层,数据库层可以把界面交给界面组做业务层交给业务开发做数据库交给数据库开发做分层好处,jsp就是显示用的,不参与业务实现,javabean实现业务,分层可以复用,客户端可以是pc,也可以是手机,只是前端采用不同的html,wml实现,业务层不变JDO有收费的也有开源的,但是开源的不太好hibernate 是开源的,用的比较多springstruts 我们用struts1.2是非常经典的mvc框架webwork分析struts的源代码,深入了解mvc在javaProject下建struts目录切换 workspace 到struts建一个test_servlet项目servlet特性:前面必须有“/”<url-pattern>/servlet/TestServlet</url-pattern><url-pattern>/TestServlet</url-pattern><url-pattern>*.action</url-pattern>敲任意字符.action,如果有*了前面不用加“/”<url-pattern>*.do</url-pattern>敲任意字符.do,如果有*了前面不用加“/”<url-pattern>/servlet/*</url-pattern>servlet/后面跟什么都可以访问servlet充当一个控制的角色,mvc中的c角色配置成*.do,通过request.getRequestURI判断请求的user.do,item.do,与配置文件里配置的参数比较,通过策略模式,派发到相应的servlet类(UserServlet,ItemServlet)servlet根据请求转到对应的manager类处理,然后转到实体类,dao层统称为model层,处理的结果转到jsp页面显示MVC:jsp 充当一个显示的界面mvc中的V(view)servlet mvc中的C(control)业务逻辑层 mvc中的M(Model)structs就是实现mvc面向请求的驱动Struts1.x struts2.x webwork面向事件的驱动M2就是MVC模式drp采用的是M1,业务逻辑和表示逻辑混合,jsp充当的角色太重,不适合多于10人开发M2适合大型项目开发,MVC,jsp(v)+servlet(c)+model(m)分层的概念servlet:接受业务参数,调用model层完成操作,然后转到jsp显示结果UserManager就是一个模型,如果UserManager封装的好哪怕改成swing也可以照用,那样才体现分层的思想实体类:贫血模型,vo,pojo设置模型:UserManager就是模型层的概念,增删改查最主要区别:M1没有分层M2是细粒度分层M1适合小型项目开发M2适合大型项目开发M model ,业务逻辑view jsp,显示层,呈现层UI Layercontroller servletswing:也是分层概念,mvc观察者模式tree,model通过浏览器访问某一个servlet接受参数,把参数组织打包,形成用户对象,调用model层处理完成后,返回给servlet层,servlet传递给jsp视图层,返回给浏览器,那样用户可以看到结果。
Struts简单笔记

2014/11/24c/s 客户端服务器 b/s浏览器服务器 url地址定位tomcat web容器用于发布项目Jsp包含内容:小脚本表达式声明 page指令Jsp运行流程:请求发送到Web容器,如果是第一次请求,容器进行编译、运行,把结果进行html拼接,发送回客户端。
Jsp内置对象:out、request、response、session、application、config、page、pageContextRequest 对象方法:getParameter(String name),getParameterValues(String name),setCharacterEncoding(),RequestDispatcher get RequestDispatcher(string path), setAttribute(Stringkey,Object value),getAttribute(String key)Get提交的内容有大小限制、post没有限制Get能看到提交信息 post不能Get是显式显示 post是隐式显示Get方式的字符编码:String name=request.getParameter(“name”);name=new String(name.getBytes(“ISO-8859-1”),”utf-8”)request 处理客户端请求 response 响应客户端请求并向客户端输出信息一个会话是浏览器与服务器之间的一次对话,从浏览器打开网页开始,到关闭浏览器结束;session对象可以用来跟踪用户在一个会话过程中的状态;session对象存储在服务器。
Session对象的常用方法:Void setAttribute(Sting key,Object value)Object getAttribute(Sting key)Void invalidate()String getId()Void removeAttribute(Sting key)Page request session application的区别:简单说 page指当前页面。
Struts学习笔记

Struts工作原理与核心配置在使用JSP/Servlet时,原理为:JSP→web.xml中配置的servlet与servlet-mapping→Servlet(接收参数,验证,调用DAO操作)→然后跳转不同的页面。
使用Struts时,原理为:JSP→web.xml→ActionServlet(url-pattern:*.do)→struts-config.xml(根据path路径找到对应的Action与ActionForm)→ActionForm→validate方法验证,如果通过进入Action,否则返回input错误页)→Action→调用DAO进行判断→成功时跳转某个页面(Struts-config.xml:forward),失败时可以返回错误页(input)。
Struts-config.xml中的配置组成:所有的<form-bean>都要在<form-beans>里面包含<form-bean>包含两个属性:name:该bean的名称,为唯一标识Type:该bean的包类名。
这是Action的配置Action-mapping中包含多个ActionAction的属性:Name、Attribute表示该Action对应的ActionForm的名称,一个Action 只能对应一个ActionForm,一个ActionForm可以对应多个Action.Input:用来作为错误页的,当validate方法执行后有错误,则自动跳转到该页面。
”/”表示从WebRoot开始寻找页面。
Path:表示该Action的虚拟路径,必须加/,而且不需要加.do的后缀Scope=”request”:表示Action所保存的属性范围。
在Action中可以包含不同的forward路径Forward属性:Name:该forward的唯一标识,在Action中执行跳转时,需要通过该name 查找对应的路径。
struts笔记

ActionForm编程:为Form表单里面的每一个字段创建getter/setter方法。
此外还有一个validate方法用于验证表单数据的格式等的正确性,reset方法用于将数据还原默认值。
V alidate方法返回的是ActionErrors对象,如果返回的是null,或者不包含任何ActionMessage 对象,表示没有错误,验证通过。
如果ActionErrors中包含ActionMessage对象,表示验证错误。
如:errors.add(“…”,new ActionMessage(“…”))配置ActionForm<form-bean name=”” type=”” /><action path=”” type=””scope=”request/session” name=”必须是前面定义过的formbean名”validate=”true/false” input=””><forward name=”” path=”” /><forward name=”” path=”” /></action>访问ActionForm(1)使用struts的HTML标签库<html:form>标签可以和ActionForm交互,读取ActionForm的属性值,把它们赋值给表单中对应的字段。
12章(2)从request或session范围内取出ActionForm实例struts把ActionForm实例保存在HttpServletRequest或HttpSession中,保存时采用的属性key 为<form-bean>元素的name属性。
(3)在Action类的execute()方法中直接访问ActionForm动态ActionForm由于Form的变动,ActionForm也要跟着变动,使得开发变得紧耦合,因此提出动态ActionForm的概念。
struts2学习笔记

1.包头的设置name是struts的包,与Java的包名效果类似,但不是按项目中SRC中包名设置的。
namescape是该包的命名空间。
将作为访问该报Action的路径的一部分。
默认命名空间为namescape=””;假设form 表单提交给helloworld的action ,其action=”/test/helloworld”exctends是表示该包继承的其他包struts_default是任何包都必须继承的包。
否则无法使用struts的核心功能,比如参数上传到action,文件上传,数据校验等。
abstract=”true”定义为抽象包,不得包含Action。
2.action的查找顺序(1)寻找namespace为path1/path2/path3/的包,有这个包:寻找test的Action有这个action:执行没有这个action:寻找namespace为””的命名空间(默认命名空间)是否有这action,没有的话提示找不到action没有这个包:寻找namespace为path1/path2/的包重复(1)步骤。
3.action的默认属性4.Action中各种result的转发类型dispatcher(默认类型)redirect(重定向)redirectAction (重定向到新的Action)plainText (显示原始文件内容)result转发还可包含参数,该参数取自Action中的属性。
例:<action name=”login” class=”xxxx.xxx.xxx.sdsds”><result name=”sucess”> /aaa.jsp?username=${ssss}</result></action>其中ssss是login这个Action中所必须具有的属性redirect书写格式1.<result name=”sucess” type=”redirectAction”>login</result>该写法只能访问位于同一包中的Action;2. <result name=”sucess” type=”redirectAction”><parma name=”actionname”>login</parama><parma name=”namespace”>/xxxxx</parama></result>该写法可访问位于其他包的ActionplainText书写格式1.<result type=”plainText”>/login.jsp</result>2. <result type=” plainText”><parma name=”location”>/login.jsp</parama><parma name=”charSet”>UTF-8</parama></result>全局转发只能在包内定义全局转发。
struts学习笔记2011

建立一个Struts2 工程1 在MyEclipse 中新建web 工程2 在struts-2.2.1.1-all\struts-2.2.1.1 解压struts2-blank.war( 最基础的示例程序)3 进入struts-2.2.1.1\apps\struts2-blank\WEB-INF\classes 下把struts.xml 拷到web 工程的src 下面,因为工程编译完它默认就把src 下的文件放到class 文件下面。
、4.拷类库,在这个项目的lib 文件下面拷把jar 放入lib 后看不见jar 文件,是因为MyEc lipse 默认视图是package Explorer,如果要看硬盘上对应的视图,应该打开windows-Show V iew-other-navigatior4.配置web.xml, 参考struts 自带的web.xml ,把filter 的配置拷过来< filter ><filter-name >struts2 </ filter-name ><filter-class >org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</ filter-class ></ filter ><filter-mapping ><filter-name >struts2 </ filter-name ><url-pattern >/* </ url-pattern ></ filter-mapping >第一个示例程序Hello Struts< struts ><constant name="struts.devMode" value="true" />< package name = "default" namespace = "/" extends ="struts-default" > <action name ="hello" >< result >/hello.jsp </ result ></ action ></ package ></ struts >http://localhost:8080/strust2_0100_Introduction/http://localhost:8080/strust2_0100_Introduction/hello 或者http://localhost:8080/strust2_0100_Introduction/hello.action跳转到hello.jsp,第一个示例程序成功!Struts2读源码配置文件中的<filter-class >org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</ filter-class >一看就应该知道它是对应一个类,在jar文件中找到对应的源码编译完的class文件,查看源码: jar 文件点右键--- properties-- Java Source Attachment External Folder (外部文件)struts-2.2.1.1-all/struts-2.2.1.1/src/core/src/main/java点击class 文件可以查看源码了,假如想看它的doc 文档,同样的方法jar 文件点右键--- properties-- Javadoc Location- 导入doc 就可以在源码中右键或者F1 观察对应的文档了。
struts2学习笔记

7. Struts1 的配置文件只需 struts-config.xml;Struts2 的配置文件有 struts.xml 和 struts.properties。struts.properties 中有两个 struts.devMode = fase 和 struts.configuration.xml.reload = true 很可爱,分别设置当前是开发还是生产模式,以及 struts.xml 改变后是否自动重新加载,免去了改配置手工重启应用的必须步骤。
Struts2 学习笔记(四)
1. 按这个顺序加载 Struts2 的常量,struts-default.xml、struts-plugin.xml、struts.xml、web.xml;后加载的会覆盖前面的同名常量。强烈不推荐在 web.xml 中配置 Struts2 常量。
2. Struts1 中有一种 Action 类型是 ForwardAction,而在 Struts2 中相应的配置方式是 <action name="Showcase"><result>/showcase.jsp</result></action>,Showcase.action 直接映射到 /showcase.jsp。
3. Struts1 的 Action 须继承抽象 Action 类,侵入了 Servlet API;而 Struts2 的 Action 可以实现 ActionSupport,或者只要一个纯净的 POJO 来充当,完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强,可把 Struts TestCase 扔到一旁去了。
struts2课堂笔记(第一天)

八、 基于注解的struts2 开发
知识结构(原理及流程------>所有配置文件----->重点配置文件(struts.xml)----------->常量配置(还有Action)------>
Action类的编写------>action中方法调用-------->动态方法调用--------->ServletAPI获取三种方法
今天所学:
一、框架概述
二、Struts2开发快速入门
三、struts2 运行流程分析
四、 struts2 常见配置(配置文件加载顺序,struts.xml常用配置,常量配置)
五、 Action的访问(Action的三种编写方法,详细配置Action , 动态方法调用)
六、在Action中使用Servlet API
四、 struts2 常见配置
学习路径
1)、 struts.xml常量配置(配置文件顺序)、Action访问(Servlet API)、结果集 (使用Struts2 编写简单案例)
2)、 请求数据
3)、 响应页面生成
1、 struts2 配置文件的加载顺序
struts2 配置文件 由核心控制器加载 StrutsPrepareAndExecuteFilter (预处理init(),执行过滤)
init_DefaultProperties(); // [1] ---------- org/apache/struts2/default.properties
init_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,struts.xml
strust学习笔记(全)

struts21.struts简介:先导入struts-blank.war到eclipse中,这是一个空的工程,把它作为模板进行开发是不是用了struts就可以抛弃servlet? struts底层仍然是servlet,其实是用了一个Filter来进行分发(在web.xml中配置)。
2.strusts配置文件到底哪个请求分给给哪个类来处理,这个在struts.xml文件中进行配置<action name="hello" class="处理这个hello请求的类">3.处理类Action类的写法一、定义一个普通类,在其中定义一个public String execute()方法,在其中写上处理逻辑,这个方法会在对应的请求过来时自动回调。
二、除此之外还可以实现接口Action,但现在暂时没有必要三、继承ActionSupport,但现在暂时没有必要4.MVC的简介struts2中,XXXAction代表了C控制逻辑,xxx.jsp代表了V视图,另外还有模型Mstrut2完全可以不去理会HttpServletRequest和HttpServletResponse,让我们从这些繁杂的Servlet的api中解放出来。
如何取出请求中的参数呢?(原来是用req.getParameter("xxxx"))Struts中只需要将Action类的属性定义为和请求参数同名即可(框架会自动读取请求参数,并自动注入到同名的属性中去),我们只需要在execute方法中将属性的值(也就是参数的值)取出来用就可以了。
如何在Action中往后面的jsp传值呢?(原来是用req.setAttribute("xxx","xxxx"))struts只需要把要传给后面的值,放在Action类的属性中,需要定义getter方法;然后在后面的jsp中用el表达式就可以取出来了Action是MVC中的C,控制;Action中的那些接收参数的属性属于M,模型。
Struts2笔记

STRUTS(5天)一、MVC介绍:M:model---实现系统的业务逻辑,用javabean等来实现V:view---用于与用户的交互,通过用jsp或html展示C:controller--是M与V的桥梁,并且用于页面的跳转二、Struts2概述Struts1主要采用了servlet和jsp技术来实现,把servlet、jsp、标签库等技术整合到整个框架中;struts2是以webwork为核心开发的,更加类似于webwork框架,跟struts1相差甚远;2.1、struts2的核心包及目录介绍目录介绍:Lib:struts2的jar包;Docs:struts2的使用说明以及APISrc:源代码Apps:官方例子核心包:1、struts-core:核心包2、Xwork-core:XWork类库,Struts 2在其上构建3、commons-fileupload-....jar 文件上传组件4、commons-io-....jar,上传文件依赖的jar包5、ognl-2.7.3.jar :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性6、reemarker-....jar :Struts 2的UI标签的模板使用FreeMarker编写7、Javassist:三、struts的配置3.1、wex.xml过滤器:StrutsPrepareAndExecuteFilter如果url-pattern是/*时候,所有的请求都可以通过;如果*.xxx的时候,所有扩展名为.xxx的请求可以通过;3.2、struts.xml在src下面创建struts.xml(必须)。
-----在核心包struts-core.jar下的struts-default.xml文件作用:当请求是login的时候,调用class对应类中的login方法;并返回结果<result>,通过返回的参数与result中的name属性相匹配;注意:1、在result中,name可以省略(name=”success”)2、action中class也可以省略,默认执行ActionSupport类3、package中extends必去直接或间接继承“struts-default”--struts-default.xml文件4、在struts2中默认执行execute方法;参数无,public,返回String 3.3、jsp代码3.4、action代码四、struts的详解4.1、<package name="" extends="" namespace=””></package> Name:包名,可以通过包名来直接或间接的继承Extends:直接或间接的继承struts-defaultNamespace:包的命名空间abstract:定义包为抽象的4.2、<action name="" class="" method=””></action>Name:请求参数Class:对应请求类,如果无此参数,默任调用ActionSupport Method:制定的执行方法,如果无此参数,这默认执行action中的excute方法4.3、<result name="">url</result>Type:4.4、全局result作用:1、把共同部分,放到global-results,减少代码的重写次数4.5、默认的Action配置默认的Action,当请求的Action不存在时,那么执行默认的Action在default-action-ref中的name与action的name是一直的。
Structs学习笔记

Structs学习笔记1. Struts是什么?答:1) Struts是一个开源框架,用于构建MVC架构Web应用程序;2) Struts是Jakarta项目的部分, 由Apache软件基金赞助;3) 通过使用Struts,你可在程序中清晰地分隔表现层和业务逻辑层;4) 通过提供广泛JSP标签库,Struts也提高了开发效率。
标签库解析和验证用户输入、错误处理以及国际化支持。
5) 我们将会向您展现如何使用Struts开发工具构建Struts的Web应用程序。
2. Struts资源答:为了学习更多Struts框架有关知识,请关注Struts官方网站以及用户向导:. /struts. /struts/userGuide/introduction.html3. MVC(model-view-controller)架构模式答:1) MVC架构模式在1980年由Smalltalk-80的图形用户界面库的开发者提出;2) 从此它在面向对象的用户界面和应用程序控制工具包中得到了广泛地应用,例如Struts,以及经过改良去满足特定平台需求,例如J2EE。
3) 根据MVC模式,一个软件组件(一个应用程序、一个模块等)应该将它商业逻辑和它的表现层分离;4. MVC的理由答:1) 对于相同的model你有超过一个view;2) 假如商业逻辑和它的表现层构建在一块,增加额外的view会导致相当大的中断以及增加组件的复杂性;3) 一个model有二个view的一个好的例子是一个银行应用程序,它可以通过互联网以及手机访问;4) 改变view的时候,你不希望每次改变model;5) view依赖于model,它显示给用户model的特定方面;6) 将view和model构建在一块,每次当你对view进行细小改动的时候,你不得不改动model;5. MVC模式答:这种分离可通过将组件分成以下层达到:. model层,实现商业逻辑;. view层,实现一个特定客户端类型的用户界面;. 有了这二层,我们可实现商业逻辑并且将它呈现给用户。
Struts标签学习笔记

在网页上输出消息,属性为:
name:指定ActionMessages对象存放在request或session范围内的属性key的值
message:指定消息的属性,如为true,则从request或session范围内检索,如为false,则根据name属性来检索ActionMessages对象,如没有name,则采用Globals.Error_key
/htmltaglibs/htmlbasic.do
<html:img>
用于在HTML页中嵌入图片,还允许包含请求变量,以便动态控制图片的输出,具体属性和link相似
基本的表单标签
<html:form>
用来创建表单,属性有:name,method,action
<html:text>
在表单上创建html文本框字段。
<bean:header>
用于检索http请求中的header信息,属性为:
id:定义一个String类型的变量,这个变量存放在page范围内
<html:reset>
用于生成表单的复位按钮
检查框和单选按钮标签
<html:checkbox>
用于生成标准的html检查框如:
public Boolean checkbox1;
public Boolean getCheckbox1() {return this.checkbox1;}
public void setCheckbox1() { this.checkbox1 = checkbox1;}
与jsp文件中的<html:file property=”file”/>对应,在actionform bean中必须定义一个名为file的属性,这个属性必须为:org.apache.struts.upload.formfile类型,代码为
Struts笔记

目录一.Mvc的设计模式 (1)1.1 Dom4j的解析 (2)1.2实现mvc的思路 (3)二. Struts2的基础 (4)2.1 如何建立struts2的项目 (5)2.2struts2访问servletAPI的方式 (6)2.3struts2的标签的使用 (7)三.基于struts2的配置 (8)3.1 struts2的执行过程 (9)3.2action和result的配置 (10)3.3 默认action的使用 (11)四.拦截器的介绍和原理 (12)4.1 拦截器的原理 (13)4.2 拦截器的介绍 (14)五.文件上传和下载 (15)5.1文件上传 (16)5.2文件下载 (17)六.ognl在struts2中的应用 (18)6.1ognl的简介 (18)6.2自定义类型转换器 (19)七.struts2的数据校验 (20)7.validate()和validateXXX() (18)7.使用验证框架 (18)八.国际化的使用 (11)1.M vc的设计模式1.1 解析xml文档1.读取xml文档,获得docuemt对象SAXReader reader=new SAXReader();Document doc=reader.read(new File(“example.xml”));1.获取文档根元素Element rootElement=doc.getRootElement();2.取得某节点下的所有子节点List<Element> childElemts=rootElement.elements();3.获取单个子节点Element childElement =rootElement.element(“节点名”);获取到整个节点的所有元素4.取得节点的内容String content=childElement.getText();5.获得节点下的属性及属性值Attribute attr=rootElement.getAttribute(“属性名”);String attrValue=attr.getValue();1.2 反射机制1.获取Class 对象。
Struts2.1学习笔记

Struts2.1学习笔记1.搭建环境1与2的区别搭建步骤需要jar文件Web.xml配置Struts.xml配置注:(1)包名主要用于供其他包继承时使用。
(2)如果namespace为空时,表示默认命名空间(3)jsp文件放在WEB-INFO目录下时,不会被url直接访问到解决struts2配置文件无提示问题由于联不上互联网,找不到.dtd文件,解决方式是在首选项中加入如图所示的配置,将url 路径找到本地的一个.dtd文件中。
Action名称搜索顺序简单转发的action的配置如图中下面一个action:无需类名,方法名,视图名。
原因是其有默认值,见下面一项Action配置中的各项默认值Action中视图转向全局视图的定义如下图定义。
下面的定义只能在定义包中使用。
想要全局使用,可以定义一个全局包,然后其他包从该包继承。
为action中的属性注入值指定struts2的处理后缀常量定义位置及加载顺序文档建议常量定义在struts.xml中,不建议定义在struts.properties中。
常用的常量介绍Struts2的处理流程为应用指定多个struts配置文件一个action处理多个应用方法一:动态调用(已不推荐使用)方法二:使用通配符的方式(推荐使用)接收请求参考关于乱码在2.1.8中不存在乱码问题局部类型转换器定义时继承第一个。
(测试一二都可以,最好用第一个)全局类型转换器往requst ,session , application 中存放数据得到requst ,session , application对象的方法文件上传文件上传时大小限制可用前介绍的常量定义来改变.当要实现多文件上传时,页面用多个input 控件,名称都一样,后面用数据来接收相应的文件,文件件名等。
循环取出并保存。
自定义拦截器方法定义拦截器注册Action校验手工编写代码对action中的所有方法校验手工编写代码对action中的指定方法校验校验的流程基于xml配置对action中所有方法校验系统提供的校验器校验器使用例子基于xml配置对action中特定方法进行校验Xml校验的顺序全局化配置包范围配置Action范围配置无配置访问资源文件ognl介绍上下文结构上下文中对象的访问El可以访问值栈对象属性的原因创建List/Map集合对象实现原理判断对象是否存在集合内投影功能(过滤)Struts 标签引入Property标签Iterator标签If /else 标签url标签复选框标签单选框下拉列表框防重复提交标签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts+Spring+Hibernate第一个例子的过程分析:Jsp:逻辑更单一了,只负责显示。
Servlet:获取表单数据,调用业务逻辑,负责转向。
分层:分离了数据和显示。
(类似于显示器与主机)MVC又叫Model2,适合大型项目开发(使用了分层思想),依赖于相应框架(有了框架,就有了约束,会比较好维护)。
Model1:jsp负责显示,获取数据,调用业务逻辑(适合小型项目)MVC框架分为两种:面向请求驱动的较常用面向请求驱动的MVC(类图序列图)ActionServlet(前端控制器/中央控制器):负责截取URL,分发相应的请求ActionForm:收集表单数据ActionForward:转向(Action中的execute()的返回类型用ActionForward,它包含更多的返回信息)Struts-config.xmlk:通过此配置文件可以找到要分发的具体的Action类struts-config.xml的配置(配置文件修改之后,需要重启tomcat)<form-bean>:ActionForm的配置;<action-mappings>:Action的配置注意:ActionForm的配置必须放到Action的配置的前面,这是由下面这个dtd文件决定的,此文件规定了标签的写法第一个struts登陆例子创建过程:对第一个struts项目的执行流程分析项目启动时,将struts-config.xml配置文件中Action的相关信息放到ctionMapping 中将struts-config.xml配置文件中ActionForm的相关信息放到FormBeanConfig中ActionForm里的值要不放在session里,要不放在request里,默认为session。
可以配置ActionForm也可以不配置,因为有的小项目可能用不到ActionForm在将数据放到ActionForm之前,需要先调用reset()方法将数据恢复到默认值。
在提交数据时,ActionForm回调用validate()方法进行数据验证(表单验证),称之为:“服务器端验证”,JavaScript的验证称为:客户端验证。
关键的验证应该放在服务器端进行,因为客户端验证时可以跳过的。
若此方法的返回值为null则表明数据验证通过,否则返回ActionError对象Struts-configuration.xml文件中的action标签中的属性validate决定是否执行validate()方法,若validate=“true”则执行此方法,否则不执行,默认为true。
将请求表单中的数据放到ActionForm中:完成数据收集Request.getParameterNames():返回表单上所有的nameRequest.getParameterValues():返回对应name的值将name和其值放到hashMap中,最终将其放到ActionForm中内容回顾分层:职责单一,内聚性高。
一般大型项目进行那个分层,而小型项目不建议分层。
JSTL:Java的一套标签规范可以从request中获取ActionForm,在struts-config.xml文件中,因为action的scope设置为request,request.getAttribute()方法的参数为配置文件中name的值。
返回为object类型,需要将其转换为相应类型。
laf=(loginActionForm)request.getAttribute(“loginForm”);注:如果在action标签中配置了attribute属性的话,request.getAttribute(ActionForm 的名称)的参数应该写成attribute所配的名称,即:request.getAttribute(testForm)这样才能取到对应ActionForm。
如果不配置attribute属性则参数默认使用name 属性的值,即:request.getAttribute(calForm)Action:截取请求,分发请求,进行转发ActionForm:数据收集ActionMapping :一个请求对应一个ActionMapping实例对象ActionFoward:包装转向信息ActionForm会自动将表单上的数据转换成相应的数据类型,如果不用ActionForm 得到的都将是String型。
异常:声明式异常和运行时异常Struts标签:(在服务器端执行)是视图技术只能使用在jsp 中;封装性好;使界面开发简便;现在使用较少,因为它只适用于struts常用的几个标签:1、<bean:write name=”scope键值” filter=”ture/false” format=”格式串” Property=”对象的属性名”/>2、<logic:empty>:判断是否为空<logic:notEmpty>:判断是否不为空<logic:present>:判断是否存在<logic:notPresent>判断是否不存在(null为不存在)3、<logic:iterator>JSTL标签库(不依赖与struts)表示层的技术注意:要求容器是2.0以上EL需要2.4以上的规范包括:核心库,格式化库(国际化库),操作xml的库,操纵数据库的库(违背了分层原则,适用较少),函数库EL表达式的隐含对象:pageScope,requestScope,sessionScope,applicationScope 其默认搜索顺序如上,即从pageScope到applicationScope。
一般不指定ScopeEL表达式的使用方法:${ 键值}Eg: request.setAttribute(“hello”,”hello world”);${ hello }${ requestScope.hello }如下图:EL表达式对运算符的支持Empty函数JSTL重点掌握:条件分支,循环控制核心库:以C开头格式化库:fmt开头C:out标签1、value属性要使用EL表达式2、default属性可以为空变量设置默认值3、escapeXml属性默认为true,为TRUE时html文本照原样输出,为FALSE时会将html文本解释输出。
EL表达式会将html文本解释输出。
C:set标签:为变量设置值1、value属性表示为变量设的值2、var属性表示要设值的变量名3、scope值默认为page(还可以设为:request,session,application)C:remove标签:移除C:set标签为变量设置的值1、var属性表示变量名C:if标签:相当于if语句C:choose,c:when,c:otherwise标签:1、相当于if /else if / else 语句,只执行其中一个分支2、c:choose标签不能单独使用,必须配合其他两个标签使用3、c:when可以有一个或者多个4、c:otherwise可以没有或者只能有一个循环控制标签c:forEach(类似for循环)1、items属性:需要循环的集合名(scope值)2、var属性:循环用的变量名3、varStatus属性:循环状态(其属性count为第几次循环)4、begin属性:循环从哪开始5、end属性:循环到那结束6、step属性:循环步长C:forTokens标签1、items:scope值2、delims:分隔符3、var:变量名C:catch标签:异常处理(var:异常变量名)C:import标签:相当于includeC:url和c:param标签:构造字符串http://127.0.0.1:8088/struts_login/sysadm/user_add.jsp?username=Jack&age=15 c:redirect标签:相当于重定向JSTL格式化标签库----格式化日期dateStyle:日期格式(defaut与medium显示形式相同)pattern:日期显示的格式(eg:YYYY-MM-dd hh:mm:ss)var:将值放进变量中,以便后面使用(将值赋给变量后,在标签处不再显示)scope:var变量的生命周期-----格式化数字Type:number表示数字(默认),currency表示货币,percent表示百分比Pattern:显示格式currencyCode:货币代码currencySymbol:货币符号groupingUsed:用逗号分组(###,###.###),默认为TRUE,表示分组var:将值赋给变量scope:值的周期JSTL函数库JSTL函数库,函数调用必须在EL表达式中前缀+冒号+函数名Eg: ${fn:length(hello)}DispatchActionXMLMyEclipse快捷键大全存盘 Ctrl+s(肯定知道)注释代码 Ctrl+/取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了)代码辅助 Alt+/快速修复 Ctrl+1代码格式化 Ctrl+Shift+f整理导入 Ctrl+Shift+o切换窗口 Ctrl+f6 <可改为ctrl+tab方便>4. Alt-left arrow: 在导航历史记录(Navigation History)中后退。
就像Web 浏览器的后退按钮一样,在利用F3跳转之后,特别有用。
(用来返回原先编译的地方)5. Alt-right arrow: 导航历史记录中向前。
6. Control-Q: 回到最后依次编辑的地方。
这个快捷键也是当你在代码中跳转后用的。
特别是当你钻的过深,忘记你最初在做什么的时候。
7. Control-Shift-G: 在workspace中搜索引用(reference)。
这是重构的前提。
对于方法,这个热键的作用和F3恰好相反。
它使你在方法的栈中,向上找出一个方法的所有调用者。
一个与此相关的功能是开启“标记”功能(occurrence marking)。
选择Windows->Preferences->Java-> Editor-> Mark Occurrences,勾选选项。
这时,当你单击一个元素的时候,代码中所有该元素存在的地方都会被高亮显示。
我个人只使用“标记本地变量”(Mark Local Variables)。
注意:太多的高亮显示会拖慢Eclipse。
8. Control-Shift-F: 根据代码风格设定重新格式化代码。