我知道这是一个老问题,很多人问,但我真的不能得到我的工作(即,${uname}
总是空的)…
tomcat webapp如下:
member.jsp
:
(这个jsp的后半部分是确认cookie的内容)
<c:choose>
<c:when test="${cookie.containsKey('uname')}">
<h1>Super Secure Shopping Mall</h1>
<p>Hello, ${uname}!</p>
<p><a href="Logout">Logout</a></p>
</c:when>
<c:otherwise>
<p>Please login first!</p>
<p><a href="main.jsp">Login</a></p>
</c:otherwise>
</c:choose>
<%
Cookie cookie_debug = null;
Cookie[] cookies_debug = request.getCookies();
if (cookies_debug != null) {
out.println("<h2>DEBUG: Cookies</h2>");
for (int i=0;i<cookies_debug.length;i++) {
cookie_debug = cookies_debug[i];
out.println("Cookie No." + String.valueOf(i) + ": " + cookie_debug.getName() + ", " + cookie_debug.getValue() + "<br/>");
}
}
else {
out.println("<p>No cookie found.</p>");
}
%>
member.java
:
import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.sql.*;
// @WebServlet("/member")
public class Member extends HttpServlet {
private static final long serialVersionUID = 1L;
public Member() {super();}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
Cookie[] cks = request.getCookies();
Cookie ck = null;
for (int i = 0; i < cks.length; i++) {
ck = cks[i];
if (ck.getName().equals("uname")) {
request.setAttribute("uname", ck.getValue());
break;
}
}
// dispatch requests
request.getRequestDispatcher("/member.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
}
}
项目文件夹结构:
Webapp
|- member.jsp
|- WEB-INF
|- classes
|- Member.java
我知道我可以通过其他方式获得cookie值,但是我想知道为什么这个方法不起作用。
我明白了。
问题是我需要通过member
来访问这个网页,而不是member.jsp
。