Можем ли мы вызвать сервлет внутри метода веб-сервиса - PullRequest
0 голосов
/ 04 марта 2011

У меня есть метод веб-сервиса

  @WebMethod
 public void getCapturedImages(String image)
 System.out.println(" image " + image);
 }

И мой класс сервлета:

   public class GetWebApplicationPathServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static ServletContext context;

public static ServletContext getContext() {
    return context;
}

public static void setContext(ServletContext context) {
    GetWebApplicationPathServlet.context = context;
}

/**
 * @see HttpServlet#HttpServlet()
 */
public GetWebApplicationPathServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    System.out.println("doGet(HttpServletRequest");
    String path = getServletContext().getRealPath("");

    context = getServletContext();
    String path1 = context.getRealPath("/images");
    System.out.println("path1"+path1);

    /*
     * PrintWriter writer = response.getWriter();
     * writer.println("Application path: " + path);
     */
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
}

Можем ли мы вызвать мой класс сервлета внутри этого метода веб-сервиса.

Ответы [ 3 ]

2 голосов
/ 04 марта 2011

Чтобы вызвать класс, вам нужно создать его экземпляр, сконструировать объект HttpServletRequest самостоятельно и затем вызвать его. Или вы можете сделать запрос Http к нему из веб-службы.

Оба решения не рекомендуются. Вам лучше создать класс, который будет реализовывать желаемую функциональность, вызывая его из обоих мест.

1 голос
/ 04 марта 2011

Вы можете выдать включение, используя путь, который будет использоваться для вызова сервлета из прямого HTTP-запроса:

@Resource
private WebServiceContext context;

private void invokeServlet() throws IOException, ServletException
{
    ServletContext servletContext = (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
    HttpServletRequest request = (HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
    HttpServletResponse response = (HttpServletResponse) context.getMessageContext().get(MessageContext.SERVLET_RESPONSE);
    servletContext.getRequestDispatcher("/path/to/servlet").include(request, response);
}

См. Также: Как получить доступ к ServletContext из JAX-WS веб-сервис?

1 голос
/ 04 марта 2011

Возможно, вы сможете, но это проблематично. Что вам нужно сделать, это создать метод, который оба могут вызывать для выполнения требуемых функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...