1

所以我在这里有代码将我的用户名参数值发送到我的 index.jsp 欢迎页面:

response.sendRedirect("index.jsp?username=" + username);

该名称显示在我的 index.jsp 页面中:

<%= "Welcome " + request.getParameter("username")%>

但是,URL 显示的是我不想要的信息:

http://localhost:8088/Trading_Platform_Web/index.jsp?username=ClayBanks1989

任何想法如何掩盖这个?

此外,最好只显示我的数据库中的名字。但我们可以专注于手头的任务。

4

2 回答 2

6

使用转发。这将使请求属性可以传递给视图,您可以以 ServletRequest#getAttribute 的形式或使用表达式语言和 JSTL 来使用它们。简短的例子

控制器(您的 servlet)

request.setAttribute(username", username);
RequestDispatcher dispatcher = servletContext().getRequestDispatcher("index.jsp");

dispatcher.forward(request, response);

查看(您的 JSP)。

<%
out.println(request.getAttribute("username"));
%>

另一种选择是使用会话变量:

//if request is not from HttpServletRequest, you should do a typecast before
HttpSession session = request.getSession(false);
//save message in session
session.setAttribute(username", username);
response.sendRedirect("index.jsp");

然后拿回来

<%
out.println(session.getAttribute("message"));
session.removeAttribute("message");
%>

同样,您可以将名字存储在数据库中的会话变量中,并且可以将其显示在网站上的任何位置,直到维护会话

于 2013-06-27T13:24:00.687 回答
3

使用请求调度而不是重定向。

RequestDispatcher view = Request.getRequestDispatcher("index.jsp");
view.forward(request, response);

这会将相同的请求对象转发到index.jsp。如果用户名还不是请求参数,则将其作为属性传递

request.setAttribute("username", username); // before doing the forward

并在您的index.jsp中检索它

<%= "Welcome " + request.getAttribute("username")%>

或者,由于用户已登录(如您所说,通过 JDBC 进行后端身份验证),您可以将用户名(以及与他有关的其他内容)保存在HttpSession.

HttpSession session = request.getSession();
session.setAttribute("username", username);

现在,您可以像以前一样转发(推荐)或选择重定向,但index.jsp会更改为

<%= "Welcome " + session.getAttribute("username")%>
于 2013-06-27T13:03:05.360 回答