Gau*_*rav 14 java tomcat servlets tomcat6 cross-context
所有,
我有两个Web应用程序,Web1和Web2,部署在我的tomcat服务器上.我希望Web1中的类在Web2中调用类的方法.一种方法是使用webservice.有没有其他方法类似于在同一Web应用程序上调用类的方法?
谢谢.
Abh*_*war 10
是.有可能的.它通过使用getServletContext().getContext()方法尝试使用相同的servlet容器 .
首先,您需要在下面的文件中进行更改
(Windows)C:\ Program Files\Apache Software Foundation\Tomcat 7.0\conf\context.xml将crossContext的值设置为true.
的context.xml
<Context crossContext="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
</Context>
Run Code Online (Sandbox Code Playgroud)
请注意,crossContext ="true".
假设您有两个Web应用程序,其名称为InterServletComm1,InterServletComm2分别在每个Web应用程序中 具有Servlet1和Servlet1.然后每个servlet中的代码如下:
Servlet1.java
package interServletComm1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Servlet1
*/
@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet1() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
request.setAttribute("name", "WebApp1");
ServletContext context = getServletContext().getContext("/InterServletComm2");
RequestDispatcher rd = context.getRequestDispatcher("/Servlet2");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
Run Code Online (Sandbox Code Playgroud)
Servlet2.java
package interServletComm2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Servlet2
*/
@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet2() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
String name = (String) request.getAttribute("name");
pw.println("This is web application 2.");
pw.println("<br>The value received from web application one is: " + name);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码从InterServletComm1发送属性名称,并在InterServletComm2中接收.如果答案不明确,请告诉我.
刚刚搜索了一些文章,使用CrossContextTomcat中的切换肯定可以实现上述场景.
在context.xml中设置以下元素 <Context crossContext="true">
然后getServletContext().getContext("/Web2");.
但是还没有尝试过.
小智 0
几乎没有那么简单。您可以将类从 app1 共享并导入到 app2 中,但也许它们都与其他类链接。因此,除了像 bean 这样用于进行计算的小型服务之外,这个想法并不是那么好。人们如此频繁地使用网络服务是有原因的;)。
| 归档时间: |
|
| 查看次数: |
23668 次 |
| 最近记录: |