0

HttpServletRequestHttpServletResponseおよびを使用する方法がありServletContextます。これが私のコードです:

public String processarModelo(MyObject ou, Map<String, Object> attrs,
            Map<String, Object> params) throws Exception {


        ServletContext sc = com.opensymphony.webwork.ServletActionContext.getServletContext();
        HttpServletResponse r = com.opensymphony.webwork.ServletActionContext.getResponse();
        MyHttpRequest rw = new MyHttpRequest(com.opensymphony.webwork.ServletActionContext.getRequest());
        rw.clearAttributes();

        for (String s : attrs.keySet()) {
            rw.setAttribute(s, attrs.get(s));
        }

        Map<String, String> p = rw.getParameterMap();
        p.clear();
        for (String s : params.keySet()) {
            p.put(s, (String) params.get(s));
        }

        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        Writer w = new OutputStreamWriter(bout);
        SwallowingHttpServletResponse r2 = new SwallowingHttpServletResponse(r, w, "iso-8859-1");

        javax.servlet.RequestDispatcher dispatcher = sc.getRequestDispatcher("/paginas/expediente/processa_modelo.jsp");

        dispatcher.include(rw, r2);
        w.flush();
        String s = bout.toString();


        return s;
    }

ブラウザから呼び出すと機能します。今週、同じメソッドを呼び出さなければならない Web サービスを作成しました。しかし、webservice メソッドの内部には がなくServletContext、手元にHttpServletResponseあります。HttpServletRequest

それらをエミュレートして JSP をレンダリングし、生成された HTML を取得するにはどうすればよいですか?

4

2 に答える 2

1

さて、@Contextアノテーションについて調べてみると、Webサービス用にこれが見つかりました:

@Resource
private WebServiceContext context;

これで、私はこれで必要なものすべてを手に入れることができます:

HttpServletRequest request = (HttpServletRequest)context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
        ServletContext servletContext = (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
        HttpServletResponse response = (HttpServletResponse) context.getMessageContext().get(MessageContext.SERVLET_RESPONSE);

みんな助けてくれてありがとう!!

于 2013-01-21T17:49:08.003 に答える
0

Webサービスでこれを呼び出してもよろしいですか?他のページにリダイレクトされます...。

私にはデザインの問題のように見えます。ここから実際の機能を抽出し、いくつかの一般的なコードに配置する必要があります。次に、Webサービス要求とサーブレット要求が機能を呼び出すのに十分な情報を持つように呼び出します。

また、1文字の変数名は推奨されません;)

HTMLを保存するためにWebページを呼び出す場合は、Webサービスメソッド自体でHTTPリクエストを作成し、データを保存する必要があります。これを行うには、HTTPClient(http://hc.apache.org/httpcomponents-client-ga/)のようなものを使用できます。

HTTPRequestを自分で作成しようとするのは、良い方法ではありません。

于 2013-01-21T17:30:46.247 に答える