首先是一些背景。
我正在开发一个网络应用程序。此应用程序作为第三方商业 Web 应用程序的扩展安装。第三方为我们的应用程序提供了一个 SDK,以便与主 Web 应用程序进行交互。因此,我们无法控制应用程序运行的环境。我们受第三方应用程序的支配。
现在解决问题。
我们的应用程序打包了我们的 JSP 使用的自定义标记库。第三方应用程序要求我们仅提供预编译的 JSP。我们可以毫无问题地编译 JSP 以及必要的 .tag 文件。
第三方已经推出了他们软件的新版本。我们将支持我们的扩展从他们软件的旧版本顺利升级到新版本。
旧版本的第三方软件运行在 Tomcat 5.5 之上。我们的 JSP 是使用 tomcat 5.5 JSP 编译器构建的。新版本在 Tomcat 7 上运行。升级后,我们的扩展仍然可以运行,只是标签评估不正确。
标签发出正确的 HTML,但是,传递给标签的任何属性似乎都丢失了。
例如,我创建了一个简单的测试标签:
<%@ attribute name="testValue" required="true" %>
<div name="${testValue}" >
${testValue}
</div>
这在 JSP 中是这样使用的:
<my:testDiv testValue="myNewTestValue" />
在 Tomcat 5.5 上,它被评估并产生以下内容:
<div name="myNewTestValue" >
myNewTestValue
</div>
但是,同样的代码在运行Tomcat 7时,输出了HTML,但是没有输出属性。请注意,${testValue} 已处理但替换为空值,而不是给定的值。
<div name="" >
</div>
如果我使用 Tomcat 7 编译器编译相同的代码,它会再次运行。
<div name="myNewTestValue" >
myNewTestValue
</div>
显然,使用 Tomcat 7 JSP 编译器构建的版本无法在旧版本上运行。鉴于 Tomcat 5.5 构建不会在新版本上运行,我们无法顺利过渡。
我已经在网上四处搜寻了几周,试图找到对这个问题或什至类似问题的提及,但收效甚微。至少没有任何东西让我找到了解决方案。
在 Tomcat 7 上运行使用 Tomcat 5.5 编译器编译的标签是否存在已知问题?有什么魔法咒语需要我念吗?
一些附加信息:
我们正在使用 Maven 进行构建。 pom 的相关部分:
<!-- Precompile JSPs -->
<!-- <dependency> -->
<!-- <groupId>org.apache.tomcat</groupId> -->
<!-- <artifactId>tomcat-jasper</artifactId> -->
<!-- <version>7.0.21</version> -->
<!-- <scope>compile</scope> -->
<!-- </dependency> -->
<dependency>
<groupId>tomcat</groupId>
<artifactId>jasper-compiler</artifactId>
<version>5.5.23</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>jasper-runtime</artifactId>
<version>5.5.23</version>
<scope>compile</scope>
</dependency>
使用 antrun 插件构建:
<execution>
<id>compile-jspc</id>
<phase>compile</phase>
<configuration>
<target>
<taskdef classname="org.apache.jasper.JspC" name="jasper">
<classpath>
<pathelement location="${env.JAVA_HOME}\lib\tools.jar"/>
<path refid="maven.compile.classpath" />
</classpath>
</taskdef>
<jasper
caching="false"
verbose="0"
uriroot="${project.build.directory}/jsp"
webXmlFragment="${project.build.directory}/generated_web.xml"
outputDir="${project.build.directory}/jspc_out" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>compile-jspc-java</id>
<phase>compile</phase>
<configuration>
<target>
<javac fork="true" executable="${env.JAVA_HOME}/bin/javac"
srcdir="${project.build.directory}/jspc_out" destdir="${project.build.directory}/classes"
deprecation="false" optimize="true">
<classpath refid="maven.compile.classpath" />
</javac>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
最佳答案
我认为最好的办法可能是安装一个 Tomcat 7 测试盒并将您的应用程序按原样放在上面。让它在 7 上运行,然后甚至用 Tomcat 7 替换旧版本的生产箱。当我这样做时,我也遇到了标签从 Tomcat 5.5 移动到 Tomcat 7 的问题,但更简单。
我不得不改变:
<jsp:param name="UserID" value="<%=request.getParameter("UserID")%>" />
到:
<jsp:param name="UserID" value='<%=request.getParameter("UserID")%>' />
在我将请求参数打印到属性值中时,双引号变为单引号,显然必须在属性值内的代码中使用双引号。这两种方式都适用于 Tomcat 5.5,但只有第二种适用于 7。
关于java - 从旧版 Tomcat 运行标签库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302023/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
是否有可能:before_filter:authenticate_user!||:authenticate_admin! 最佳答案 before_filter:do_authenticationdefdo_authenticationauthenticate_user!||authenticate_admin!end 关于ruby-on-rails-before_filter运行多个方法,我们在StackOverflow上找到一个类似的问题: https://