GVKun编程网logo

Struts 2 Convention插件-上传2 MB以上的文件(struts2上传下载)

11

最近很多小伙伴都在问Struts2Convention插件-上传2MB以上的文件和struts2上传下载这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Convention插件-c

最近很多小伙伴都在问Struts 2 Convention插件-上传2 MB以上的文件struts2上传下载这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Convention插件-content、extjs 能与 struts2 的 convention-plugin 整合么?、iOS app中的Convention API、Events API(14.5以上版本)、Struts + GAE java.security.AccessControlException:拒绝访问struts2-core-2.3.15.3.jar等相关知识,下面开始了哦!

本文目录一览:

Struts 2 Convention插件-上传2 MB以上的文件(struts2上传下载)

Struts 2 Convention插件-上传2 MB以上的文件(struts2上传下载)

如果我尝试上传的文件大小超过2 MB,则会出现错误。

我在apache网站上发现“有两个单独的文件大小限制。首先是struts.multipart.maxSize,它来自Struts 2
default.properties文件。出于安全原因,存在此设置是为了禁止恶意用户上传非常大的文件来归档服务器磁盘空间。此设置默认约为2兆字节,应调整为您需要框架接收的最大文件大小(最大2兆)。

因此,我发现可以通过<constant name="struts.multipart.maxSize" value="1000000"/>在struts.xml文件中添加具有所需最大限制的标记来解决此问题。

我们正在使用struts2-convention-plugin,因此没有struts.xml。所以我不确定在哪里定义这个最大文件大小…

请让我知道您中是否有人遇到此问题。

感谢您的帮助。

答案1

小编典典
  1. 您可以在Struts.xml中定义一个最大大小(如您所说的 multipart.maxSize ),以限制每个多部分请求的 整体 传输。

  2. 您还可以为 FileUpload Interceptor 定义文件大小(默认为2MB),既可以全局定义到程序包,也可以为单个Action 定义文件大小(通过<action> struts.xml 中的标签中为该Interceptor配置该参数,或者在Action内对其进行注释使用 Convention插件时

    <interceptor-ref name="fileUpload"><param name="maximumSize">10485760</param>

这意味着,例如,如果您将整体分段大小配置为20 MB,每个文件的最大大小为4MB,则您将能够在单个请求中多次上传5个文件,每个文件大小为4MB。


也就是说,您的问题 不是问题

使用 Conventional插件 并不意味着您没有 struts.xml ; 代表着

  • 可以 在操作中使用注释
  • 避免使用 struts.xml的 ;
  • 当需要一些与动作无关的struts配置时,例如multipart.maxSize,全局映射(结果,异常,自定义拦截器堆栈等),您 绝对可以 使用 struts.xml (如果直到那时才存在,请创建它) )。

在Convention Plugin Documentation中,没有任何地方提到它与 struts.xml 是互斥的 (相反,如果尝试在该页面上搜索“ struts.xml
”,则会发现多次出现)

Convention插件-content

Convention插件-content

使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中配置例子:

<constant name=”struts.convention.default.parent.package” value=”crud-default” />
<constant name=”struts.convention.package.locators” value=”web,action” />
<constant name=”struts.convention.package.locators.basePackage” value=”com.cngba.gamemag” /> 
<constant name=”struts.convention.result.path” value=”/WEB-INF/pages” />
<constant name=”struts.convention.action.name.separator” value=”-” />

1. 默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。如:Xml代码

<constant name=”struts.convention.result.path” value=”/WEB-INF/page” />

则将路径配置到了WEB-INF/page 下。

2. 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置。如:

<constant name=”struts.convention.package.locators” value=”web,action” />

3. 接着,Convention从前一步找到的package以及其子package中寻找 com.opensymphony.xwork2.Action 的实现以及以Action结尾的类:

//Java代码
com.example.actions.MainAction
com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)
com.example.struts.company.details.ShowCompanyDetailsAction

4. 命名空间。从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子:

Com.ustb.web.user.userAction的命名空间是:”/user”。Com.ustb.web.user.detail.UserAction的命名空间是:”/user/detail”

5. Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator 如Xml代码

<constant name=”struts.convention.action.name.separator” value=”-” />

还是举个例子:

UserAction->user UserDetailAction ->user-detail。结合上面的。对于com.ustb.web.user.detail.UserDetailAction,映射的url就是/WEB-INF/content/user/detail/user-detail.jsp

当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。所幸,convention的零配置是非常灵活的。

通过@Action注释

对如下例子:

Java代码

package com.example.web;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
    @Action(“action1″)
    public String method1() {
        return SUCCESS;
    }
    @Action(“/user/action2″)
    public String method2() {
        return SUCCESS;
    }
}
方法名 默认调用路径 默认映射路径
method1 /hello!method1.action .  /WEB-INF/content/hello.jsp
method2 /hello!method2.action.   /WEB-INF/content/hello.jsp

通过@Action注释后

方法名 @Action注释后调用路径 @Action注释 后映射路径
method1    /action1!method1.action. /WEB-INF/content/action1.jsp
method1  /user/action2!method2.action /WEB-INF/content/user/action2.jsp

 

extjs 能与 struts2 的 convention-plugin 整合么?

extjs 能与 struts2 的 convention-plugin 整合么?

最近想整合 extjs 和 struts2 的 convention-plugin,在 jsp 文件里面通过 user!user.action 访问正常,但貌似通过在 extjs 的 js 文件里通过 user!user.action 是访问不到 action 类里面的。所以怀疑 extjs 能否支持 convention-plugin 插件,求高手解答!

iOS app中的Convention API、Events API(14.5以上版本)

iOS app中的Convention API、Events API(14.5以上版本)

如何解决iOS app中的Convention API、Events API(14.5以上版本)?

我读了这篇文章 (https://www.facebook.com/business/help/311705270326952) 并没有得到一点。第一个 - 除了客户端的 EventsAPI 之外,我还应该在服务器端使用 ConversionAPI 来改进转换吗? 其次,如果转化率发生变化,我如何捕捉(我想知道我在 iOS 应用中集成 FBEvents 的努力是否影响转化)?

此外,如果有人能给我正确的方法,我将不胜感激,因为我可以设置我的 iOS 应用程序以提高转化率。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Struts + GAE java.security.AccessControlException:拒绝访问struts2-core-2.3.15.3.jar

Struts + GAE java.security.AccessControlException:拒绝访问struts2-core-2.3.15.3.jar

我在GAE中使用支撑架。我正在使用GAE 1.8和struts 2.3.15 jar文件。

在我的应用程序中,我面临这个异常

java.security.AccessControlException: access denied ("java.io.FilePermission" "jar:file:\E:\eclipse\Shaun\Convergent\war\WEB-INF\lib\struts2-core-2.3.15.3.jar" "read")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
    at java.security.AccessController.checkPermission(AccessController.java:560)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:431)
    at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
    at java.util.zip.ZipFile.<init>(ZipFile.java:205)
    at java.util.zip.ZipFile.<init>(ZipFile.java:144)
    at java.util.jar.JarFile.<init>(JarFile.java:152)
    at java.util.jar.JarFile.<init>(JarFile.java:89)
    at com.opensymphony.xwork2.util.fs.JarEntryRevision.needsReloading(JarEntryRevision.java:76)
    at com.opensymphony.xwork2.util.fs.DefaultFileManager.fileNeedsReloading(DefaultFileManager.java:66)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:394)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:169)
    at com.opensymphony.xwork2.config.ConfigurationManager.needReloadContainerProviders(ConfigurationManager.java:215)
    at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:179)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:73)
    at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:968)
    at org.apache.struts2.dispatcher.ng.PrepareOperations.createActionContext(PrepareOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:86)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.convergent.auth.AuthorizationFilter.doFilter(AuthorizationFilter.java:32)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.convergent.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:48)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:368)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:351)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:485)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

我做了很多搜索,有人说从sturts.xml文件中删除此属性值

<constant name="struts.devMode" value="true" />

有人说将值从true更改为false。我做到了,但是没用。请给出一个解决方案。我也更改了jar文件并使用2.1.8版本,但是在此过程中我在服务器启动时遇到了异常

java.lang.NoSuchMethodError: com.opensymphony.xwork2.config.ConfigurationManager.addConfigurationProvider(Lcom/opensymphony/xwork2/config/ConfigurationProvider;)V
at org.apache.struts2.dispatcher.Dispatcher.init_DefaultProperties(Dispatcher.java:310)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:411)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
at org.apache.struts2.dispatcher.ng.listener.StrutsListener.contextInitialized(StrutsListener.java:45)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:249)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:306)
at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:26)
at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:79)
at com.google.appengine.tools.development.Modules.startup(Modules.java:88)
at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:254)
at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:47)
at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:212)
at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:210)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:210)
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:277)
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:219)
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:210)

我也在struts jar文件中使用以下jar文件

ognl-3.0.6.jar
sitemesh-2.4.2.jar
struts2-sitemesh-plugin-2.2.3.1.jar
xwork-core-2.3.15.3.jar

请指导我。

关于Struts 2 Convention插件-上传2 MB以上的文件struts2上传下载的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Convention插件-content、extjs 能与 struts2 的 convention-plugin 整合么?、iOS app中的Convention API、Events API(14.5以上版本)、Struts + GAE java.security.AccessControlException:拒绝访问struts2-core-2.3.15.3.jar的相关信息,请在本站寻找。

本文标签: