在jsp和servlet中设置参数

时间:2012-03-21 07:25:52

标签: java jsp servlets

在我的网络应用程序中,我收到了客户的请求。我在我的jsp页面或servlet(曾经被调用过)中处理请求,并且希望相应地转发到其他jsp或servlet。

在转发之前我想设置一些参数然后转发它有了这些新参数。转发时不应出现旧参数。只应存在新参数。怎么办呢?
我可以从servlet转发到jsp,反之亦然吗? 请告诉我们如何完成上述工作?

5 个答案:

答案 0 :(得分:3)

是的,您可以将参数servlet转发给jsp,将jsp转发给servlet。

当您可以在请求中设置属性时,它将在destination.means上丢失,您无法在第三个资源上访问该属性。

request.setAttribute(attribute name,attribute value)

你也可以在会议中做同样的事情。

答案 1 :(得分:3)

您可以根据需要和要求使用请求调度程序和重定向。

ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("url");

rd.forward(request,response);

response.sendRedirect("url");

sendRedirect()将标头发送回浏览器,其中包含要重定向到的资源的名称。因此,这将是来自浏览器的资源的新请求

forward()动作在服务器内发生,不知道浏览器。

答案 2 :(得分:2)

如果您没有使用请求参数并且您的jsp / servlet没有向响应写入任何内容,那么我认为使用重定向而不是转发是正常的,因为重定向将丢弃请求以及参数。

当您进行重定向时,您可以动态创建并设置查询字符串,如下所示:

response.sendRedirect("url?a=" + var1 +"&b=" + var2);

请注意,这将是网址的GET方法。如果将url解析为servlet,则可以实现doGet方法来调用doPost。

请注意,如果jsp / servlet已经在响应中写入内容,则会忽略重定向...

答案 3 :(得分:0)

使用

ServletRequest.removeAttribute(name of your old attribute)
ServletRequest.setAttribute(name , value)

设置属性后,使用

获取 RequestDispatcher
getRequestDispatcher(url)

然后使用 forward()方法

答案 4 :(得分:0)

您必须使用RequestDisptcher转发到JSP / Servlet。在请求上设置请求属性以使用

设置参数
request.setAttribute(name, value)

Forwarded JSP可以使用

读取参数
request.getAttribute(name)

但是,你cannot hide the attribute existing before forward by default。您可以使用Request Wrapper实现此目的。在转发覆盖set和get属性方法之前包装请求。

以下代码说明

    RequestDisptcher dispatcher =  req.getRequestDispatcher("url");
    HideExistingRequestWrapper requestWrapper = 
                                         new HideExistingRequestWrapper(request);
    requestWrapper.setAtribute("forwarded", "forwarded value");
    dispatcher.forward(requestWrapper, response);

以下是包装器实现的代码:

    class HideExistingRequestWrapper extends HttpServletRequestWrapper {

           private Map localattributes = new HashMap();

           public HideExistingRequestWrapper (HttpServletRequest orignialRequest) {
                  super(orignialRequest);
           }

           public Object getAttribute(java.lang.String name) { 
                 return localattributes.get(name);
           }

           public Object setAttribute(java.lang.String name, java.lang.String value) { 
                 return localattributes.put(name, value);
           }

    }