首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2学习笔记

2012-09-16 
Struts2学习笔记!Struts原理简介:http://blog.csdn.net/wfdmd/article/details/367675 struts1:全局forwar

Struts2学习笔记!
Struts原理简介:http://blog.csdn.net/wfdmd/article/details/367675

struts1:

全局forward是都可以访问的,但是当需要使用forward时,strues自动安就近原则来选择。当局部也有定义时,就按照局部的来转。

Struts(草稿)

http://fatedgar.iteye.com/blog/1489255


Struts1.x教程:配置文件总结

http://jc-dreaming.iteye.com/blog/963784


struts1.X配置文件详解

http://www.cnblogs.com/Fskjb/archive/2010/07/04/1771001.html


struts-config.xml 参数解释

http://woshixushigang.iteye.com/blog/1153768


ActionForward是做什么的?

http://hi.baidu.com/baiduba/item/c0446ee1506a8d18585dd8ff


Struts中的URL传递的问题(forward标签的redirect属性)

http://www.binghe.org/2010/10/struts-forward-and-redirect/

?

?

?

?

3.Struts2还提供了一些命名对象,这些对象没有保存在值栈中,而是保存在ActionContext中,因此访问这些对象需要使用“#”标记。这些命名对象都是Map类型,如下:
parameters
??? 例如#parameters.userName或者#parameters['userName'],相当于调用request.getParameter("username")。
request
??? 用来访问HttpServletRequest属性(attribute)的Map,例如#request.userName或者#request['userName'],相当于调用request.get力Attribute ("userName")。
session
???? 用来访问HttpSession,例如#session.userName或者#session['userName'],相当于调用session.getAttribute("userName")。
application:#application.userName或者#application['userName']
attr:用于按page-request-session-application顺序访问其属性

?

4.%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值


<s:set name="foobar" value="#{'foo1':'bar','foo2':'bar2'}" />
不使用%:<s:url value="#foobar['foo1']" /></p>???

?????????????? 结果: #foobar['foo1']
使用%:<s:url value="%{#foobar['foo1']}" /></p>?

或:????? <s:url value="%{#foobar.foo1}" />

?????????????? 结果:bar

?

5.详见:

http://www.blogjava.net/max/archive/2006/12/06/85925.html

?

所有的Struts 2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor 。除此之外,大家可能更喜欢继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor 。

import java.util.Map;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class AuthorizationInterceptor extends AbstractInterceptor {   @Override    public String intercept(ActionInvocation ai) throws Exception {       Map session = ai.getInvocationContext().getSession();       String role = (String) session.get( " ROLE " );        if ( null != role) {           Object o = ai.getAction();            if (o instanceof RoleAware) {               RoleAware action = (RoleAware) o;               action.setRole(role);           }            return ai.invoke();       } else {            return Action.LOGIN;       }           }} 

6.文件上传:

详细见:http://tmsoft.lsxy.com/index.php?load=read&id=514

multipart/form-data:
这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。

Struts2并未提供自己的请求解析器,也就是Struts2不会自己去处理multipart/form-data的请求,它需要调用其他请求解析器,将HTTP请求中的表单域解析出来。但Struts2在原有的上传解析器基础上做了进一步封装,简化了文件上传的代码实现,取消了不同上传框架上的编程差异,更进一步简化了文件上传。
Struts2默认使用的是Jakarta的Common-FileUpload框架 来上传文件,因此,要在web应用中增加两个Jar文件:commons- fileupload-1.2.jar和commons-io-1.3.1.jar。如果要改成其它的文件上传框架,可以修改struts.multipart.parser常量的值为cos/pell,默认值是jakata。并在classpath中增加相应上传组件的类库。

?

 <s:form action="fileUpload" method="post" enctype="multipart/form-data">         <s:file name="doc" label="File"/>         <s:submit/>    <s:form>   

?

        private File image;               / /上传文件域对象   private String imageFileName;               / /文件名       private String imageContentType;...get.set方法@Overridepublic String execute() throws Exception {String path=ServletActionContext.getServletContext().getRealPath("/upload");      if(image!=null){          File uploadPath=new File(new File(path),imageFileName);         FileUtils.copyFile(image,uploadPath);        ActionContext.getContext().put("message", "上传成功");         }else{               ActionContext.getContext().put("message", "上传失败");        }  return "success";}

?此外,可以在struts.xml中配置上传文件的大小
??? <constant name="struts.multipart.maxSize" value="10701096"/> //最大上传配置成10M
??? 默认的上传大小为2M

?

限制文件上传类型(max单位为K):

<action name="upload" name="code">int type = fileName.lastIndexOf(".");     //返回指定字符在此字符串中最后一次出现处的索引String index= fileName.substring(type);   //subString(int beginIndex) 

?

在success.jsp页中通过<s:property>获得文件的属性:

<s:property value="imageFileName"/><s:property value="imageContentType"/>

?

//自己封装的一个把源文件对象复制成目标文件对象

  private void copy(File src, File dec)  {    InputStream in = null;    OutputStream out = null;      in = new BufferedInputStream(new FileInputStream(src));      out = new BufferedOutputStream(new FileOutputStream(dec));      byte[] buff = new byte[1024];      while (in.read(buff) > 0)//文件是01字节码,read读到文件末尾返回-1,没读到末尾返回1      {        out.write(buff);      }    }

?


思维拓展:如果要上传的文件非常大,如上传的是电影,好几百M ,用web上传一般是不可能难上传成功的,这时候要安装一个插件,类似于应用程序socket ,通过网络通讯上传。

?

文件下载:

http://hi.baidu.com/annleecn/blog/item/e14165074a2c117d0308816e.html

http://wenku.baidu.com/view/69b07c38376baf1ffc4fad78.html

?

判断文件是否是允许上传文件:

?

public static boolean isAllowUp(String logoFileName) {String allowTYpe = "gif,jpg,bmp,swf";if (!logoFileName.trim().equals("") && logoFileName.length() > 0) {String ex = logoFileName.substring(logoFileName.lastIndexOf(".") + 1, logoFileName.length());return allowTYpe.toString().indexOf(ex) >= 0;} else {return false;}}

?1

热点排行