2013-07-18 2 views
1

я устанавливаю request.getAttribute, как показано ниже в моем JSPrequest.getAttribute является недействительным в сервлет

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <% 


     request.setAttribute("name", "anita"); 


     %> 
     <%=request.getAttribute("name") %> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Insert title here</title> 
    </head> 
    <body> 
    <form method="POST" action="QnAAuthServlet"> 

    <input type="hidden" name="orgName" value="SENDFORBOB"></input> 
    <input type="submit"></input> 
    </form> 
    </body> 
    </html> 

Я могу напечатать также в моем JSP

Я пытаюсь request.getAttribute в моем сервлете ниже

public class QnAAuthServlet extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

     public QnAAuthServlet() { 
      super(); 

     } 

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     } 

     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     enter code here 
      String name = (String) request.getAttribute("name"); 
      System.out.println("name = " + name); 

     } 

    } 

Но имя всегда имеет значение null в моем сервлете. Пожалуйста, помогите мне решить эту проблему.

ответ

0

Если я правильно понимаю, вы сервлет получает новый запрос. если вам нужно передать имя сервлету в запросе, вам нужно создать элемент ввода с именем «name». Вы не можете установить запрос, который будет отправлен в запросе, который отображает текущую страницу.

+0

В настоящее время в этом примере я прошел только строку. Но в моей реальной реализации я должен передать объект из jsp в сервлет. Итак, если я создаю элемент ввода, это не поможет мне. – Anita

+0

Если вы не используете весну или что-то, чтобы нанести на карту свой запрос как объект, вы не сможете иметь объект в своем запросе. – ChrisThompson

+0

Это, вероятно, не рекомендуется, но вы можете поместить объект в сеанс. Я не вижу причин, по которым вы поставили бы значение в запросе в JSP, чтобы он возвращался в запрос так или иначе, поскольку он уже отображается на стороне сервера. – ChrisThompson

1

Запрос представляет ... HTTP-запрос. Как только сервер завершит создание ответа для запроса, запрос больше не существует. Когда ваш сервлет выполняется, он получает новый объект HttpServletRequest, и, конечно, атрибуты, которые JSP, сохраненные в предыдущем запросе, забыты надолго.

Если вы хотите передать данные с HTML-страницы (сгенерированной JSP) на сервлет, ее необходимо передать как параметр запроса или отправить в виде ввода формы.

+0

Но как я могу отправить объект на сервлет из JSP? Не просто строка. Этот объект имеет внутренние геттеры для получения значений в нем. – Anita

+0

Есть несколько возможностей. 1. Не пропускайте объекты вообще. Сохраните данные в базе данных и получите их позже. 2. Используйте несколько скрытых полей. 3. Используйте сеанс, ... Без конкретной проблемы для решения трудно дать хороший ответ. –

+0

Хорошо. Я тоже это пробовал. Но session.getAttribute («имя»); работает не в браузерах IE. Но не по IE.Я установил уровень приема файлов cookie в IE на низком уровне, чтобы заставить его работать. Почему это происходит? И можете ли вы, пожалуйста, сообщить мне, как я могу использовать urlrewriting в этом случае? – Anita

1

Это потому, что вы отправляете новый запрос на сервлет. Параметры запроса сохраняются до тех пор, пока запрос выполнен и недоступен при подаче ответа.

Если вы хотите передать имя, вы должны сделать что-то вроде этого

<input type="hidden" name="name" value="someValue"> 

Если вы хотите параметры должны быть доступны для нескольких запросов, то вы можете использовать HttpSession для этого.

session.setAttribute("name","prasad"); 
+0

Хорошо. Я тоже это пробовал. Но session.getAttribute («имя»); работает не в браузерах IE. Но не по IE. Я установил уровень приема файлов cookie в IE на низком уровне, чтобы заставить его работать. – Anita

+0

Мне нужно небольшое уточнение, когда я делаю request.setAttribute в сервлет и пытаюсь получить request.getAttribute в пересылаемом jsp..i, получит значение. Как это работает? Внутренне jsp также является сервлетом. Правильно? – Anita

Смежные вопросы