- 浏览: 89556 次
文章分类
最新评论
struts2自带项目showcase的fileupload功能学习笔记
学习Struts2的自带项目showcase的fileupload功能。把我认为的一些疑问点写下来。
第一、我们先理解下struts-xml中的package的namespace属性,这个属性自然是为了在不同的命名空间中可以使用同名的action。我们先看下面的代码:
<package name ="upload" extends="struts-default" namespace ="/fileupload">
<action name ="upload" class = "fileupload.FileuploadAction" method ="input">
<result name ="success">upload.jsp</result>
</action>
</package>这个意思就是针对所有的/fileupload/upload.do的请求,我们使用fileupload.FileuploadAction去处理它,如果针对SUCCESS的返回,我们使用/fileupload/upload.jsp去响应它。这里的/fileupload/upload.do虽然是绝对路径,但是这里的绝对路径是针对应用的根而不是服务器的根。即/fileupload/upload.jsp都是根据你的项目名,如果你的项目名为MyStruts的话那么实际上就为http://localhost:端口号//MyStruts/fileupload/upload.jsp 同样web.xml中的
其中的url-pattern中的/test也是根据你的项目为根目录,而不是整个服务器为根目录
注意这里就要区别于
比如在我们的主也页面http://localhost:8080/MyWebAssignment/上有
http://localhost:8080/MyWebAssignment/test
如果为
学习Struts2的自带项目showcase的fileupload功能。把我认为的一些疑问点写下来。
第一、我们先理解下struts-xml中的package的namespace属性,这个属性自然是为了在不同的命名空间中可以使用同名的action。我们先看下面的代码:
<package name ="upload" extends="struts-default" namespace ="/fileupload">
<action name ="upload" class = "fileupload.FileuploadAction" method ="input">
<result name ="success">upload.jsp</result>
</action>
</package>这个意思就是针对所有的/fileupload/upload.do的请求,我们使用fileupload.FileuploadAction去处理它,如果针对SUCCESS的返回,我们使用/fileupload/upload.jsp去响应它。这里的/fileupload/upload.do虽然是绝对路径,但是这里的绝对路径是针对应用的根而不是服务器的根。即/fileupload/upload.jsp都是根据你的项目名,如果你的项目名为MyStruts的话那么实际上就为http://localhost:端口号//MyStruts/fileupload/upload.jsp 同样web.xml中的
<servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>
其中的url-pattern中的/test也是根据你的项目为根目录,而不是整个服务器为根目录
注意这里就要区别于
<a href ="value">的用法了。比如绝对 URL href="http://www.example.com/index.htm"),绝对URL,就是在前面不加上工程名。直接就是主机名,而相对 URL - 指向站点内的某个文件(href="index.htm")也就是以当前的页面前缀为前缀。即浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白,
比如在我们的主也页面http://localhost:8080/MyWebAssignment/上有
<form action = "test"></form>那么这个form就是发往
http://localhost:8080/MyWebAssignment/test
如果为
<form action = "/test"></form>[/code http://localhost:8080/test 还要注意basePath的问题<base href="<%=basePath%>">也就是使用basePath来填写相对路径的空白引用<base> 标签为页面上的所有链接规定默认地址或默认目标。比如
通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。
使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL (就是basePath)来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。<a href = "ui/test4.jsp">test4</a>就是使用basePath加在ui/test4.jsp前面,这里就是http://localhost:8080/MyServletTest1/ui/test4.jsp,而如果我们去除jsp页面中的base标签,那么这个url就为http://localhost:8080/MyServletTest1/test/ui/test4.jsp
此外还要注意:如果是这样的:<result>/empmanager/listEmployees.jsp</result>就不需要使用namspace所设置的路径为前缀了,因为它本身就是相对于项目名的绝对路径。
此外还有一个东西需要注意,就是我们的请求也必须加上namespace="fileupload"。比如在form标签中加上namespace属性,或是在一个struts的url标签中加上namespace属性。<s:url action = "upload" var ="upload" namespace ="/fileupload"/>
1.如果在请求中不写namespace的话类似:<a href="<s:url action="edit"><s:param name="skillName" value="name"/></s:url>"><s:property value="name"/></a>就会使用默认路径
引用namespace from where tag is used即就会产生一个把当前的action请求替换为这个新的这个action请求的目录。比如在点击之前,这个目录为:
http://localhost:8080/MyStrutsShowcase/skill/list.action,而点击这后就变为:http://localhost:8080/MyStrutsShowcase/skill/edit.action?skillName=WW-JUN即把list.action替换为新的edit.action再加上相应的参数。
2.如果在struts.xml中不写namespace的话,默认就为/,即主机名:端口号/项目名/ 为默认初始的路径。引用The default namespace is "" - an empty string. The default namespace is used as a "catch-all" namespace.
第二、action的相应属性如何得到页面字段对应的属性。这是通过拦截器把Action的属性值设置进去的。在“defaultStack”interceptor-stack中有个“param”拦截器:com.opensymphony.xwork2.interceptor.ParametersInterceptor,在这个拦截器的方法:public String doIntercept(ActionInvocation invocation) throws Exception { Object action = invocation.getAction(); if (!(action instanceof NoParameters)) { ActionContext ac = invocation.getInvocationContext(); final Map<String, Object> parameters = retrieveParameters(ac); if (LOG.isDebugEnabled()) { LOG.debug("Setting params " + getParameterLogMap(parameters)); } if (parameters != null) { Map<String, Object> contextMap = ac.getContextMap(); try { ReflectionContextState.setCreatingNullObjects(contextMap, true); ReflectionContextState.setDenyMethodExecution(contextMap, true); ReflectionContextState.setReportingConversionErrors(contextMap, true); ValueStack stack = ac.getValueStack(); setParameters(action, stack, parameters); } finally { ReflectionContextState.setCreatingNullObjects(contextMap, false); ReflectionContextState.setDenyMethodExecution(contextMap, false); ReflectionContextState.setReportingConversionErrors(contextMap, false); } } } return invocation.invoke(); }
在setParameters方法里有具体设置属性的操作,你可以看到这么一段:... try { newStack.setValue(name, value); } catch (RuntimeException e) { ... } ...
struts2自带项目showcase的filedownload功能学习笔记
链接到filedownload的相应页面和上传功能类似,这里不再赘述,但是相应的配置文件需要分析下:<package name ="download" extends="struts-default" namespace="/filedownload"> <default-action-ref name ="download"/> <action name ="download" class ="filedownload.FiledownloadAction" > <param name="inputPath">/images/struts.gif</param> <result name ="success" type ="stream"> <param name ="contentType">image/gif</param> <param name ="inputName">inputStream</param> <param name ="contentDisposition">filename ="struts.gif"</param> <param name ="bufferSize">4096</param> </result> </action> </package>这里要注意:<param name="inputPath">/images/struts.gif</param>这个我的理解就是对于download的请求,我们在调用FiledownloadAction这个类时传入inputPath=/images/struts.gif这个参数.
第二、我们要注意,如果我们使用stream这种一般用于文件下载的返回类型的话,我们要在相应的Action类中增加getInputSteam方法:public InputStream getInputStream(){ return ServletActionContext.getServletContext().getResourceAsStream(inputPath); }这里我们再来看下:引用getServletContext
public static javax.servlet.ServletContext getServletContext()
Gets the servlet context.
Returns:
the servlet context.
而getResourceAsStream:引用Returns the resource located at the named path as an InputStream object.引用Parameters:
path - a String specifying the path to the resource
第三、我们注意下这个stream的返回类型及其所需的参数
stream:直接向响应中发送原始数据,通常在用户下载时使 用,contentType指定流的类型,默认为text/plain,contentLength以byte计算流的长 度,contentDisposition指定文件的位置,通常为filename=”文件的位置”,input指定InputStream的名字,例 如:imageStream,bufferSize指定缓冲区大小,默认为1024字节;发表评论
-
开发者突击的配套Struts2SpringHibernate集成项目学习笔记2
2012-09-20 20:23 899开发者突击SSH2OA项目学习笔记,这里的登陆注册界面和之前学 ... -
struts2数据类型转换器
2012-09-19 15:31 818数据类型转换器 一为什么要使用转换器 首先struts2通过r ... -
用SSH2简单实现了用户注册登录删除功能
2012-09-08 22:19 3156第一次尝试把SSH2整合起来,这里记下编写当中遇到的问题和自己 ... -
开发者突击的配套Struts2SpringHibernate集成项目学习笔记1
2012-08-29 10:35 1173学习开发者突击的配套Struts2SpringHibernat ... -
struts2项目无法正确启动Tomcat的问题学习笔记
2012-07-28 20:59 947struts2项目无法正确启动Tomcat的问题学习笔记 第 ... -
struts2自带项目showcase的Action Chaining学习笔记
2012-07-26 20:40 0struts2自带项目showcase的A ... -
struts2自带项目showcase的tags学习笔记
2012-07-26 20:31 728struts2自带项目showcase的tags学习笔记 第 ... -
struts2自带项目showcase的CRUD功能学习笔记
2012-07-23 17:00 0struts2自带项目showcase的CRUD功能学习笔记 ... -
struts2框架自带项目struts2-mailreader学习笔记
2012-07-17 21:24 1286struts2框架自带项目struts2-mailreader ... -
【转】Struts2的Action配置的各项默认值
2012-07-09 18:54 8241、Action配置的各项默认值 如果没有为action指 ... -
【转】Struts2中的OGNL表达式
2012-07-09 16:22 0转自http://blog.csdn.net/jady ... -
十步走完一个小的Struts2实例
2012-07-07 20:31 718初学Struts2,先实践一个小的例子。 一、先建立一个工程, ...
相关推荐
Struts2-showcase是一个用于演示和学习Apache Struts2框架功能的开源项目。这个压缩包“struts2-showcase.rar”包含了完整的源代码,旨在帮助开发者深入理解Struts2框架的工作原理及其各种特性。以下是对Struts2和...
struts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.war
这个"struts2 的showcase"项目是Struts2官方提供的一个示例应用,它展示了Struts2框架的各种功能和特性,非常适合初学者学习和开发者参考。 首先,让我们深入了解Struts2的核心概念和主要特点: 1. **Action与...
在这个"struts2-jquery-plug ShowCase"项目中,开发者展示了如何在Struts2应用中集成jQuery插件,以增强用户界面和交互体验。FHP(Full Hibernate Plug)是针对Hibernate的一个插件,用于简化数据持久化操作,将...
struts2.0官方项目之四(showcase) <br>=================================================== Struts2.0官方项目共4个,名字如下: <br>blank mailreader portlet showcase <br>这4个官方...
在本文中,我们将深入探讨如何使用Struts2的`ModelDriven`接口以及如何控制URL,以实现`struts2-rest-showcase-2.1.8.war`项目中的功能。 首先,`ModelDriven`接口是Struts2提供的一种设计模式,用于将Action类与...
struts2.0自带,不错的例子哦.
Struts2是一个非常知名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了Java Web应用程序的开发过程,提供了强大的功能和可扩展性。在标题和描述中提到的...
"struts2-bootstrap-showcase-1.5.2.zip"是一个整合了Struts2和Bootstrap的示例项目,它展示了如何在Struts2框架中使用Bootstrap库来创建具有现代界面的应用。 首先,Struts2标签库是Struts2框架的核心特性之一,它...
struts2-showcase.war
Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...
该工具的打开路径为:\Struts2VulsTools-2.3....增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.actio
Struts2是一个基于MVC(Model-View-Controller)架构模式的Java框架,它极大地简化了Java Servlet的开发,提供了丰富的功能来构建可维护、可扩展的Web应用程序。REST(Representational State Transfer)是一种网络...
`struts2-showcase-2.0.1.war` 是一个全面的演示应用,展示了Struts2框架的各种功能和特性。这个例子包括了Action、Interceptor、Result类型、国际化、动态方法调用、ognl表达式等的使用。通过这个实例,开发者可以...
为了搭建S2-057漏洞的演示环境,你需要先解压这两个文件,然后按照Struts 2的官方文档配置项目。通常,这涉及到创建一个Struts配置文件(如struts.xml),定义Action和Result,以及设置相关的OGNL表达式。在配置完成...
Struts2漏洞检查工具2019版 警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! ==漏洞编号==============影响版本=========================官方公告==========================================影响范围====...
在Struts2的showcase应用中,JSON插件通过FreeMarker模板来展示如何输出JSON结果,虽然这种方式有一定的灵活性,但不如直接使用JSON插件方便。 以下是一个使用JSON插件的例子: 首先,你需要从Google Code项目...
增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2...
struts2.0官方项目之一(blank) <br>=================================================== Struts2.0官方项目共4个,名字如下: <br>blank mailreader portlet showcase <br>这4个官方项目...
增加S2-048 Struts 2.3.X,支持检查官方示例struts2-showcase应用的代码执行漏洞。增加安恒信息研究员nike.zheng发现的S2-045。jakatar处理复杂数据类型时,异常处理不当,导致OGNL代码执行,通过在请求的Content-...