使JSP声明无状态

时间:2017-03-30 17:31:21

标签: java jsp session scope

考虑以下jsp:

<%!
    private String firstName = "";
    private String lastName = "";

    private String formatName(){
        return lastName + ", " + firstName;
    }
%>
<%
    firstName = request.getParameter("FNAME");
    lastName = request.getParameter("LNAME");
    String formattedName = formatName();
    out.print(formattedName);
%>

有没有办法让声明部分&lt;%! (...)%&gt;无状态?这就是我希望firstName和lastName对每个页面加载都是唯一的。我不关心性能或最佳实践,现在不能选择重构。我正在寻找像&lt;%@ page persist =&#34; false&#34; %取代。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果您正在尝试完成示例似乎想要完成的任务,那么您根本不需要实例变量。你可以把它写成

<%!
    private String formatName(String firstName, String lastName){
        return lastName + ", " + firstName;
    }
%>
<%
    String formattedName = formatName(request.getParameter("FNAME"),
                                      request.getParameter("LNAME"));
    out.print(formattedName);
%>

答案 1 :(得分:0)

pvg是100%正确的,不应该这样做,我可能不会使用这个解决方案,但我确实提出了一个解决方案,允许移动方法而不需要他们采取新的方法参数。其他人可能会知道以下可能,但不是最佳做法。

<%!
    public class MyHandler
    {
        public HttpServletRequest objRequest = null;
        public HttpSession objSession = null;
        public HttpServletResponse objResponse = null;
        public JspWriter objOut = null;

        private String firstName = "";
        private String lastName = "";
        private String formatName(){
            return lastName + ", " + firstName;
        }
        public void go()
        {
            firstName = objRequest.getParameter("FNAME");
            lastName = objRequest.getParameter("LNAME");
            String formattedName = formatName();
            objOut.print(formattedName);            
        }
    }
%>
<%
    MyHandler myHandler = new MyHandler();
    myHandler.objRequest = request;
    myHandler.objSession = session;
    myHandler.objResponse = response;
    myHandler.objOut = out;
    myHandler.go();
%>