Servlet参数与属性

时间:2013-04-23 17:47:09

标签: java servlets

我今天的问题是,如果我使用网守servlet将页面转发到其他servlet,最好让第二个servlet引用参数或创建属性供它们引用吗?

说我有一个形式:

<form action=www.ermehgerdpuppies.com/Gatekeeper id = puppyForm> 
    <select name=puppyList>
    <option value=cutePuppyServlet_12>CutePuppy
    <option value=uglyPuppyServlet_14>UglyPuppy
</select></form>

我提交此表单,该表单到达Gatekeeper servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        if (request.getParameterMap().containsKey("puppyList"))
        {
            String qString = request.getParameter("puppyList");
            String[] qsArray = qString.split("_");
            request.setAttribute("merPuppy", qsArray[1]);
            RequestDispatcher rd = getServletContext().getRequestDispatcher(qsArray[0]);
            rd.forward(request, response);  
        }
    }

然后转到cutePuppyServlet(对于这个例子,它转到cutePuppy)

现在在我的cutePuppyServlet.java中,我可以通过这种方式引用数据:

request.getParameter("puppyList");

OR

request.getAttribute("merPuppy");

使用参数,我可以检查它是否存在,以防止一切都搞砸了。我的问题是,哪个更易于维护?我应该坚持转发参数还是应该创建一个属性?

3 个答案:

答案 0 :(得分:6)

为内部servlet使用参数的优点:

  • 如果需要,嵌套的servlet可以在没有父servlet的情况下独立存在。
  • 开发人员更了解参数(我不知道为什么,但我很少看到使用的请求属性)
  • 代码较少,因为容器会隐式地从客户端传递它们。

使用请求属性的优点:

  • 包含,转发等将包括它们,因为请求不会更改,但其URL可能会。
  • 这是属性实际意味着什么,消息传递在组件之间传递。因此,您正在坚持servlet设计。

在一天结束时,这并不重要。我会选择属性,因为我更关心以标准方式做事(即使它是一个没人关心或遵循的标准)而不是快速做。

答案 1 :(得分:1)

如果数据已作为参数提供,并且始终可以在您的设计中访问(即:您的整个请求周期可以访问请求参数),并且您认为将其设置为属性没有设计优势,那么访问它作为参数而忘记将其设置为属性。

“少即是多”,我想这就是我想要了解的一点。

答案 2 :(得分:1)

认为主要区别在于属性对中的“值”部分可以是Java对象,而参数只能是字符串。