Я хочу спросить о сессии в JSP

index.jsp

<form action="a.jsp" method="post">
    <input type="text" name="a">
    <input type="radio" name="b" value="admin">admin <input type="radio" name="b" value="member">member
    <input type="submit" value="c">
</form>

a.jsp

<% String a=request.getParameter("a"); String b=request.getParameter("b");

session.setAttribute("a",a); session.setAttribute("b",b);

response.sendRedirect("b.jsp"); %>

b.jsp

<%
String b = (String)session.getAttribute("b");
if(b!="")
{
    if(b.equals("admin"))
    {
        out.print(session.getAttribute("a"));
        out.print("this is admin");
    }
    else if(b.equals("member"))
    {
        out.print(session.getAttribute("a"));
        out.print("this is member");
    }
}
else
{
    out.print(session.getAttribute("a"));
    out.print("this is guest");
}

%>
<form action="d.jsp" method="post">
    <input type="submit" value="d" />
</form>

d.jsp

<%
session.invalidate();
response.sendRedirect("index.jsp");
%>

Код работает нормально, но если я не выберу admin или же member значение, оно в идеале должно идти в состояние гостя в b.jsp страница, но я получаю сообщение об ошибке в строке 5.

ошибка Возникла исключительная ситуация при обработке страницы JSP /c/b.jsp в строке 5

2: String b = (String)session.getAttribute("b");
3: if(b!="")
4: {
5:  if(b.equals("admin"))
6:  {
7:      out.print(session.getAttribute("a"));
8:      out.print("this is admin");

2 ответа

Решение

В b.jsp кажется, что вы пытаетесь проверить карту сеанса для записи, ключ которой bи затем решить, какой тип пользователя просматривает страницу, основываясь на этом значении.

Проблемный код - вторая строка скриплета в b.jsp:

if (b!="")
{

Когда нет записи для b в карте сеанса это сравнение должно быть true, вызывая код, который проверяет для администратора или члена для выполнения. Это в свою очередь приведет к b быть разыменованным в сравнении, как b.equals("admin"), что приведет к NullPointerException, Я полагаю, что вы намерены проверить, есть ли запись для b в карте сеанса. Если запись не найдена, то вы будете относиться к пользователю как к гостю. Если в сеансе нет записи для ключа b затем null будет возвращена, а не пустая строка. Так что вы должны проверить null:

if (b != null)
{

Или, если вы хотите также рассматривать пустое строковое значение как гостевое, то вы можете попробовать:

if (b != null && !b.equals(""))
{

Причина исключения:

Ваш b.jsp вызывает nullPointerException тогда и только тогда, когда значение для параметра не установлено.

Как вы указали выше, отправка формы без выбора радиокнопки должна рассматриваться как гость.

Итак, вот 2 решения:

Решение 1:

Вместо проверки параметра как

if(b!="") {

Ниже код работает нормально, замените ваш b.jsp этим

<%
String b = (String)session.getAttribute("b");
if(b==null)
{
out.print(session.getAttribute("a"));
out.print("this is guest");
}
else  {
if(b.equals("admin"))
{
    out.print(session.getAttribute("a"));
    out.print("this is admin");
}
else if(b.equals("member"))
{
    out.print(session.getAttribute("a"));
    out.print("this is member");
}
}
%>
<form action="d.jsp" method="post">
 <input type="submit" value="d" />
</form>

Решение 2:

Поместите переключатель "Гость" также в форму, чтобы гостевые пользователи непосредственно выбирали опцию "гость". (здесь исключается nullPointerException, так как всегда будет установлено значение параметра "b".)

Другие вопросы по тегам