4

我的问题是 - 如果我使用网守 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");

或者

request.getAttribute("merPuppy");

使用参数,我可以检查它是否存在,以防止炸毁所有东西。我的问题是,哪个更利于可维护性?我应该坚持转发参数还是应该创建一个属性?

4

3 回答 3

7

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

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

使用请求属性的优点:

  • 包含、转发等将包含它们,因为请求不会改变,尽管它的 URL 可能会改变。
  • 这就是属性的实际含义,即组件之间的消息传递。因此,您是在坚持 servlet 设计。

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

于 2013-04-23T18:01:52.127 回答
1

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

于 2013-12-02T11:02:03.500 回答
1

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

“少即是多”,我想这就是我想要表达的观点。

于 2013-04-23T17:52:17.200 回答