Servlet中的request.setAttribute没有被新值覆盖

时间:2018-11-29 12:10:02

标签: java jsp servlets

我有Servlet部分,它接收HttpServletRequest,如下所示

public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    if (request.getParameter("STATE").equalsIgnoreCase("TX")) {
        request.setAttribute("STATE", "IL");
    }
    System.out.println("Printing " + request.getParameter("STATE"));
}

我写的代码是当我将STATE传递为'TX'时,它进入if块并以IL作为重载状态。

但是新值并没有覆盖,我总是在获取TX。收到TX请求后,我需要用IL替换TX。

请帮助我

2 个答案:

答案 0 :(得分:0)

首先根据要设置request.setAttribute(“ STATE”,“ IL”)的参数值,在if块内部和if块外部再次使用request.getParmater(“ TX”) .getParameter(“ STATE”)。

注意: 在这里,您没有根据参数名称覆盖您,而是在请求中设置了some属性。请求参数是不可变的,您无法更改

答案 1 :(得分:0)

在您的if条件中,您正在设置/覆盖属性,并且正在打印参数,因此不会获得更新值。

您无法从HttpServletRequest更改请求参数,因此您需要使用属性来修改请求。

请将您的代码更改为

if (request.getParameter("STATE") != null && request.getParameter("STATE").equalsIgnoreCase("TX")) {
    // If request contains TX, then add updated STATE in attribute
    request.setAttribute("STATE", "IL");
} else {
    // If request doesn't contains or contains other than TX then add previous status in attribute
    request.setAttribute("STATE", request.getParameter("STATE"));
}
// Now we are using attribute instead of parameter
System.out.println("Printing " + request.getAttribute("STATE"));