getCookies() liefert sowohl die cookies und die session
Habe ich zwei servlets und die anderen servlet soll zur Ausgabe von Informationen aus einem cookie und einer Mappe (Anweisungen von unserem professor). Das problem ist, ich habe versucht, mit getCookies() auf, um die cookies aus dem request-Objekt, aber es gibt zwei Objekte, die die erste ist mit dem Namen "JSESSIONID" und seine Begleitung hexadezimalen Codes und die zweite enthält die Cookies, die ich erstellt. Warum ist das geschehen? Wie würde getCookie() lediglich die Rückkehr cookies?
Hier der code:
Servlet 1:
package com.telco.process;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class ConvertServlet
*/
@WebServlet("/Convert")
public class ConvertServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String num;
private String telco;
private HttpSession session;
private RequestDispatcher rd;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String convertedNum = "";
session = request.getSession();
num = request.getParameter("number");
telco = request.getParameter("telco");
rd = request.getRequestDispatcher("Display");
Cookie cTelco = new Cookie("telco", telco);
if (!(num.equals(null)) || !(num.equals("")))
{
for (byte i = 0; i < num.length(); i++)
{
switch(num.charAt(i))
{
case 'A':
case 'B':
case 'C': convertedNum += "2"; break;
case 'D':
case 'E':
case 'F': convertedNum += "3"; break;
case 'G':
case 'H':
case 'I': convertedNum += "4"; break;
case 'J':
case 'K':
case 'L': convertedNum += "5"; break;
case 'M':
case 'N':
case 'O': convertedNum += "6"; break;
case 'P':
case 'Q':
case 'R':
case 'S': convertedNum += "7"; break;
case 'T':
case 'U':
case 'V': convertedNum += "8"; break;
case 'W':
case 'X':
case 'Y':
case 'Z': convertedNum += "9"; break;
}
}
session.setAttribute("number", convertedNum);
response.addCookie(cTelco);
}
rd.forward(request, response);
}
}
Servlet 2:
package com.telco.process;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/Display")
public class DisplayNumber extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
Cookie ck[] = request.getCookies();
System.out.println(ck[0].getValue());
pw.println("The converted number is " + "-" + request.getSession(false).getAttribute("number"));
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die JSESSIONID ist in der Tat ein cookie, es wird verwendet, um die Sitzung zu identifizieren. Eine Sitzung wird erstellt, auf dem server mit einer ID. Der server sendet ein cookie mit der ID an den browser (JSESSIONID). Der browser sendet dann das JSESSIONID-cookie an den server auf jede Anfrage, wo der server verwendet es für die Zuordnung der Anforderung zu der Sitzung.
EDIT: Beispiel-code zu finden, eine cookie:
Sollten Sie den Zugriff auf Ihre cookies nur nach Namen, nicht nach dem index. Hier ist ein Beispiel Helfer-routine, können Sie es verwenden, wie dies (natürlich überprüfen
null
in einem echten Programm):Cookie getCookieByName(HttpServletRequest request, String name)
die iteriert über alle cookies und sendet das cookie mit dem gewünschten Namen.