Это очень просто. Просто используйте
$result = $data1 . $data2;
В PHP .
(concatenate) как дополнение.
Это по соображениям безопасности по умолчанию невозможно. Сначала необходимо настроить Tomcat, чтобы включить ServletContext
текущего webapp в другие веб-приложения. Это нужно сделать, установив атрибут crossContext
в context.xml
на true
.
<Context ... crossContext="true">
После этого вы можете использовать ServletContext#getContext()
, чтобы получить другой контекст сервлета по его пути контекста и, наконец, использовать RequestDispatcher
, как обычно ServletContext#getRequestDispatcher()
.
Например
ServletContext otherContext = getServletContext().getContext("/otherContext");
otherContext.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);
Я не уверен в разных контейнерах сервлетов. Но он работает для одного контейнера с помощью метода getServletContext (). GetContext ().
Сначала вам нужно внести изменения в файл ниже
(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>
Обратите внимание, что crossContext = "true".
Предположим, у вас есть два веб-приложения с именем InterServletComm1 и InterServletComm2 с сервлетами Servlet1 и Servlet1 в каждом веб-приложение, соответственно. Затем код в каждом сервлете выглядит следующим образом:
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
}
}
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
}
}
Выше кода отправляет атрибут имя из InterServletComm1 , и оно получено в InterServletComm2 . Пожалуйста, дайте мне знать, если этот ответ не ясен.
Да.
Первое, что вам нужно сделать, это получить ServletContext
для другого webapp. Вы делаете это с помощью ServletContext::getContext
по своему усмотрению ServletContext
, передавая путь к контексту другого webapp.
Затем вы просто выполняете ServletContext::getRequestDispatcher
как обычно в чужом контексте.
Я на самом деле не пробовал это, но я 100% гарантирую, что он будет работать.
sessionCookiePath
для всех контекстов Webapp значение/
, чтобы все веб-клиенты имели один и тот же сеанс HTTP. Если это, тем не менее, создает проблемы с дизайном, тогда сохраните его в общем хранилище данных, например, в области приложения или в базе данных. – BalusC 19 November 2012 в 14:22