XMLドキュメントを返す比較的単純なSpring WebアプリケーションをTomcatで実行しています。最初のリクエストが入り、コードをデバッグできます。ただし、後続の要求はデバッガーにドロップされません。ブラウザーまたは soapUI のいずれかを使用して最初の要求を行うことができ、(異なるブラウザー/プログラム/マシン上の) 後続の要求は、最初の要求と同じ応答を取得します。
localhost_access_log には、すべてのリクエストが入力されています。ただし、log4j ファイルは、最初のリクエスト以降は読み込まれません。
Tomcat 7 と spring 3.1.1 を使用しています。これは、Eclipse 内にデプロイされた (デバッグを有効にするために使用される) Tomcat と、Linux 上の別の Tomcat サーバーにデプロイされた両方で発生します。
これは、回答が受け入れられなかった別の質問 ( Tomcat が Same Response を返す) に似ています。
したがって、これはブラウザのキャッシングではなく (リクエストを行うさまざまなアプリケーションが同じ応答を受け取る)、Tomcat のキャッシングのようなものです。
何か案は?これは、何らかの問題の原因であると思われるserver.xmlですが、赤いフラグは表示されません。また、Web アプリケーションに対して GET を実行していますが、サーバー側で何らかの方法でキャッシュしている可能性があります。
GET リクエストの例:http://localhost:8130/bootstrap/xml?environment=dev
この RequestMapping に記載されているように、xml ドキュメントを返します。
@RequestMapping(value = "/xml", method = RequestMethod.GET,produces="application/xml")
サンプル応答:
<connection_details env="dev">
<servers>
<server host="localhost" name="auth" port="9876"/>
</servers>
</connection_details>
この問題は、GET リクエストに渡された環境変数が変更された場合でも、すべてのリクエストが最初のリクエストと同じものを返すため、明らかになります。これは、異なるブラウザーや soapUI から要求された場合でも同様です。
上記の応答がどのように作成されるかの例:
private ModelAndView bootstrap(HttpServletResponse response, String environment) {
Map<String, Object> model = new HashMap<String, Object>();
try {
DOMSource domSource = new DOMSource(documentBuilder.parse(context
.getResourceAsStream(bootstrapXmlFileName)));
model.put("xml", domSource);
model.put("requestedEnvironment", environment);
}
catch (Exception e) {
response.setHeader("ERRORS", e.getMessage());
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return null;
}
return new ModelAndView("bootstrap_connection_selector", model);
}
次に、xslt 変換に渡されます。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.xslt.XsltView" />
<property name="prefix" value="/WEB-INF/xsl/" />
<property name="suffix" value=".xslt" />
</bean>
最後に、次の変換:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- parameter for the requested location -->
<xsl:param name="requestedlocation"/>
<!-- start template matching on the connection_details element -->
<xsl:template match="/connection_details">
<!-- duplicate the enclosing <connection_details env=xxx" element -->
<xsl:element name="connection_details">
<xsl:attribute name="env">
<xsl:value-of select="@env"/>
</xsl:attribute>
...
<!-- close the <connection_details> element -->
</xsl:element>
</xsl:template>
</xsl:stylesheet>
サーバー.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8133" shutdown="SHUTDOWN">
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<GlobalNamingResources>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector connectionTimeout="20000" port="8130" protocol="HTTP/1.1" redirectPort="8131"/>
<Connector port="8132" protocol="AJP/1.3" redirectPort="8131"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="em_bootstrap" path="/bootstrap" reloadable="true" source="org.eclipse.jst.jee.server:em_bootstrap">
</Context></Host>
</Engine>
</Service>
</Server>