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