struts1笔记
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即可访问。
[计算机软件及应用]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视图层,返回给浏览器,那样用户可以看到结果。
Struts1[1].X学习笔记
![Struts1[1].X学习笔记](https://img.taocdn.com/s3/m/0d846f1c59eef8c75fbfb3ed.png)
Struts基本原理1、Action什么时候初始化?Action请求时初始化,不是在读取配置时初始化。
2、每个Action共用一个实例,只初始化一次,所有请求共享一个action实例。
3、Struts1.2中Action是线程不安全,Struts2线程安全。
4、怎么实现Action的安全性编程?●注意不要用实例变量或类变量共享只是针对某个请求的数据●注意资源操作的同步性。
5、应用:统计action的访问次数。
设计一个实例变量,在调用action时该变量加1。
Integer count = 0;synchronized(count){ // 安全锁count++;}6、ActionForward:Redirect属性:false|no RequestDispatcher.forward跳转(默认)。
ture|yes HttpServletResponse.sendRedirect跳转。
为ture时路为绝对路径,网站外跳转要加协议名。
7、Attribute:用来存取form的关键字,缺省值与name一样8、validate是用于控制是否校验表单,true(缺省值):校验,false:不校验9、input 如果表单验证失败,则跳转到该值指定的位置(容器内跳转)。
Validate为true时才生效。
10、全局跳转:<global-forwards><forward name=”error” path=”/Error.jsp” /></global-forwards>11、ActionForm工作原理1) 检查Action的映射,确定Action中已经配置了对ActionForm的映射。
2)根据name属性,查找form bean的配置信息。
3)检查Action的formbean的使用范围,确定在此范围下(request,sess),是否已经有此formbean的实例4)假如当前范围下,已经存在了些formbean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。
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的概念。
Struts1几个知识点

Struts1几个知识点1:struts1的请求流程答:当视图中有表单提交时,通过表单的action属性传递提交的路径,一般以XXX.do结尾。
(1)当表单提交后容器(tomcat为例)会判断路径是否以.do结尾,如果是则转到中央控制器ActionServlet。
(2)再由web.xml中config找到struts1的struts-config.xml文件,在该文件中的action属性中查找path对应的值是否有前面视图中的请求路径(去掉.do),(3)如果有则判断此action中是否有name属性.(4)有则在struts-config.xml查找<form-beans>中有与name的属性值对应的FormBean类.(5)有则将视图提交的表单中的数据封装到该FormBean类中。
(6)此后在查找该action中是否有attribute键值,有则将封装好的FormBean对象放到以attribute的值为键,以该对象为值的键值对中,请求范围默认为session,但可以通过scope属性设置。
(7)之后,通过该action的type属性找到对应的类,再通过反射得到该类的对象并放到内存中。
(8)执行该类的execute方法,该方法中有四种参数,分别为:ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse,其中ActionMapping对象执行程序运行结束后反向问题,通过findForward(String name)方法去到struts-config.xml 中查找上述action中的forward属性中键name对应的文件,返回到该文件。
该方法中的ActionForm参数对象保存的即为上述经过封装的表单数据。
至此,struts1请求流程完毕。
2:解释为什么用formbean(ActionForm),如何用?答:当通过表单提交数据过多,获取就会变得繁琐和重复,在对应的应用控制器的execute方法中就得多次通过request.getParameter()方法获取表单中的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
沈阅斌
Struts
Mvc model1
Jsp+ javabean
Mvc model2
Jsp+Servlet+javabean
Web应用框架
Jsf
M work
Spring
Hibernate
……..
提供
1.分层工作
2.改进控制器(Action代替Servlet)
a)自动获得客户端提交的参数
b)数据类型转换,格式验证
c)数据传递和请求转发
d)………………
3.试图
标签库和表达式语言
Struts2中mvc的组成:
1.模型:
Javabean,ejb
2.试图:
Jsp,…..
3.控制器
FilterDispatcher,Interceptors(拦截器),Actions
Struts1
主控制器ActionServlet 处理*.do结尾的请求|
V
Struts-config.xml核心配置文件
|
v
业务控制器Action
ActionForm(????在struts2里有没有是个争议,把actionform和action合成action了) 模型用来接收客户端提交的参数
Struts1的mvc组成
1.模型
Javabean,ejb,ActionForm
2.试图
Jsp
3.控制器
ActionServlet,RequestProcessor,Actions
写的东西
以前
Servlet, jsp, javabean, web.xml
Struts2
Action jsp javabean struts.xml
Struts1
Action jsp javabean和actionForm struts-config.xml
控制器的几个基本的工作
1.接收数据
Struts2 增加属性和为属性提供setter方法
Struts1 提供ActionForm,在ActionForm中属性和getter setter方法
2.传递数据
Struts2 提供属性,并且把属性保存到属性中,以及为属性提供getter方法
Struts1 跟Servlet相同,通过Request传递
3.转发请求
Struts2 返回字符串,配置
Struts1 返回一个ActionForward对象
Action元素的属性说明:
Path: action的访问路径,以”/”开头
Type: action的类型
Name: action使用的actionForm的名字.与form-bean元素的name属性取值相同. Scope: action使用的actionform存在的范围,取值为Request或session;
Attribute: a ction使用的actionform存在于某个范围内的key.如果不指定此属性,则key为Name属性的值.
Validate: action使用的actionform的validate方法是否被调用true为调用,false则不调用Input: struts1框架验证客户端提交的数据格式,如果验证不正确,则把请求转发到此属性所指定的页面上;
Forward元素的属性说明:
Name: Forward的名字,与mapping.findForward方法传入的值相同.
Path: 请求转发的页面路径
Redirect: 请求转发方式.,false是服务器内部跳转,true是客户端重定向
ActionForm
Reset 用actionform是把数据恢复到初始状态
Getter/setter
Validate 验证
Struts1的执行流程:
1.客户端发送*.do请求,由主控制器接收
2.主控制器将请求的处理工作委托给RequestProcessor
3.请求处理器根据访问路径寻找一个对应的ActionMapping对象.如果找到,继续执行.找不
到则返回404错误.
4.根据ActionMapping的信息,查找或者创建一个ActionForm对象.
5.请求处理器调用ActionForm对象的reset方法.
6.请求处理器调用ActionForm对象的setter方法.
7.请求处理器调用ActionForm对象的validate方法.如果返回一个ActionError对象,并且包
含错误信息,则将请求转发到action元素input属性指定的页面,反之,继续执行.
8.查找或创建一个Action对象.
9.调用Action对象的execute方法,执行action.
10.请求处理器处理action返回的ActionForward结果.
11.响应
I18n
为一个软件提供多种语言版本.
国际化的处理步骤:
1.创建资源文件,存放多种语言类型的内容.
BaseName_Language.properties
简体中文:zh
英文:en
如:
Messages.properties 默认资源文件
Messages_zh.properties
Message_en.properties
BaseName相同的叫做同一组资源文件
2.注册资源文件
<message-resources rameter="com.briup.struts.Message" />
3.使用资源文件
<bean:message/>
4.切换资源文件
1)切换浏览器的设置
2)要么就在页面上设置一个按钮
Native2ascii 源文件目标文件
如何确定资源文件?
1.如果当前session中存放了Globals.LOCALE_KEY,那么根据session中存放的语言类型寻找
一个对应的资源文件.
Session.setAttribute(Globals.LOCALE_KEY,Locale.CHINESE);
1)访问了struts框架,如果当前session中没有存放语言类型的话,struts框架会把客户端
提交上来的语言类型放到session里面.
2)通过程序去往session中存放一个语言类型
2.如果session里面没有存放语言类型的话,根据客户端的语言类型寻找一个对应的资源文
件.
Request.getLocale();返回客户端语言类型
ActionForm的子类型
DynaActionForm: 动态的ActionForm
Action
DispatchAction: Action的子类
解决问题:
多个表单提交给同一个action的不同方法处理
实现步骤:
1.Action类继承DspatchAction,提供多个处理请求的方法.方法名自定义,参数列表和返回类
型与execute方法相同.
2.在struts-config.xml文件中,指定action元素的parameter属性,这个属性的取值为客户端
提交的一个用于表示访问方法的参数名.
3.客户端提交请求时,需要提交一个额外的参数,参数名为action元素的paramater属性的值.
参数值为action类中的方法名.
原理:
DispatchAction根据客户端提交的方法名,通过反射机制调用对应的方法.
LookupDispatchAction: DispatchAction的子类
解决的问题:
同一个表单多个提交按钮提交给同一个action的不同方法处理
实现步骤:
1.Action类继承LookupDispatchAction,实现getKeyMethodMap方法,这个方法返回一个
Map,Map中的key为资源文件中的key,Map中的value为action中的方法名.
2.描述action的时候指定action元素的paramater属性,其值为提交按钮的名字
3.将按钮的值存放到资源文件中,key跟map里面的key一样,value是方法名
4.表单提交按钮的值从资源文件获得.
5.解决乱码问题
原理:
客户端提交一个按钮的值,LookupDispatch根据这个值从资源文件中找到一个对应的key,再根据这个key从map中找到一个方法名,然后通过反射调用此方法.
MappingDispatchAction: DispatchAction的子类。