Java 重新加载JSP页面

Java 重新加载JSP页面,java,jsp,servlets,Java,Jsp,Servlets,我在每个页面上都显示了一个授权框架,我希望即使用户选择登录,也能保持该页面的显示(使用jstl标记,我将简单地放置该框架,而不是用户信息和购物车链接)。我怎样才能做到这一点?我有一些想法,但它们都打破了我的控制器设计 public class FrontController extends HttpServlet { private ActionContainer actionContainer = ActionContainer.getInstance(); public FrontCon

我在每个页面上都显示了一个授权框架,我希望即使用户选择登录,也能保持该页面的显示(使用jstl标记,我将简单地放置该框架,而不是用户信息和购物车链接)。我怎样才能做到这一点?我有一些想法,但它们都打破了我的控制器设计

public class FrontController extends HttpServlet {

private ActionContainer actionContainer = ActionContainer.getInstance();

public FrontController() {
    super();
}
/** 
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@SuppressWarnings("unchecked")
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String page = null;

    try {
        Action action = actionContainer.getAction(request);
        page = action.execute(request, response);
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(page);
        dispatcher.forward(request, response);

    } catch (ActionNotFoundException e) {
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(PageNames.ERR_PAGE);
        request.setAttribute(AttributeNames.ERR_MESSAGE_ATTRIBUTE, "Unknown Action command: " + e.getMessage());
        dispatcher.forward(request, response);
    } catch (Exception e) {
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(PageNames.ERR_PAGE);
        request.setAttribute(AttributeNames.ERR_MESSAGE_ATTRIBUTE, "Exception:\n" + e.getMessage());
        dispatcher.forward(request, response);
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/** 
 * Returns a short description of the servlet.
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Front Controller";
}

@Override
public void init() throws ServletException {
    super.init();
    Locale.setDefault(new Locale("ru","RU"));
}    
}


我正在考虑重定向到专门为此案例编写的页面,这将重定向到原始页面,或者检查页面字符串是否为空并从原始页面重新加载,但我不清楚如何执行此操作。

您的问题不够清楚。但我想你是在问,在用户登录后,如何用其他组件(用户名、欢迎信息和购物车详细信息)替换页面上的某个组件(登录按钮)

如果我了解您的需求,那么在用户登录后我会做的是设置一个cookie(或localStorage中的一个值)。cookie通过HttpServletResponse的addCookie方法添加到Set cookie响应头中。下面是一个例子:

  Cookie userCookie = new Cookie("user", "uid1234");
  response.addCookie(userCookie);
然后在控制器中,只需检查“用户”值是否已设置,并采取适当的操作。A

如果您需要处理前端组件,并且在不重新加载页面的情况下更改表单上的值,我建议您使用javascript来执行此操作,您可以找到旧的DOM元素并用新的元素(用户名、欢迎消息、购物车等)删除它们

如果您的iFrame正在进行登录,那么在成功登录时,让它调用顶部窗口中的一个函数,该函数在从cookie中读取更新的值后进行更新

如果您希望在前端(即Javascript)完全处理此问题,那么我将跳过使用cookie,转而使用localStorage。在Stackover和internet上有很多关于localStorage是什么的帮助,但是我建议使用库,它可以使从localStorage存储和加载数据变得非常简单


请注意,

将当前URL作为身份验证表单的隐藏字段。在处理身份验证的操作中,一旦用户通过身份验证,就重定向到此URL

在JSP中,测试用户是否经过身份验证,并包括身份验证表单或购物车。一旦用户通过身份验证,只需在HTTP会话中输入一个布尔值即可完成此测试