2014-11-18 4 views
0

Я пытаюсь отправить данные из JSP-файла в Java-сервлет. Я видел здесь много примеров о том, как это сделать, и я считаю, что делаю это правильно, но почему-то методы doPost() не вызываются внутри моего сервлета.Отправка данных из JSP в Java Servlet

Вот что я добавил к моему web.xml файл:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

<servlet> 
    <servlet-name>loginServlet</servlet-name> 
    <servlet-class>src.action.LoginServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>loginServlet</servlet-name> 
    <url-pattern>/login</url-pattern> 
</servlet-mapping> 
</web-app> 

Вот мой JSP файл

<html> 
    <head> 

    </head> 

    <body> 

     <form action = "localhost:8080/UserModule/src/action/login" method="post"> 
      Username<input type = "text" name = "username"><br><br> 
      Password<input type = "password" name = "password"><br><br> 
      <input type = "submit" value = "Submit"> 
     </form> 
    </body> 
</html> 

Вот мой Java сервлетов:

package action; 

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class LoginServlet 
*/ 
@WebServlet("/login") 
public class LoginServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public LoginServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     String username = (request.getAttribute("username")).toString(); 
     System.out.println("asd"); 

     String password = (String) request.getAttribute("password"); 
     System.out.println(username); 
    } 

} 

Это дает me на import javax.servlet.annotation.WebServlet; и на @WebServlet("/login")

Это потому, что они были реализованы только в спецификации v3.0, в то время как мне разрешено использовать spec v2.5 (требуется для работы). Кто-нибудь знает, как решить эту проблему?

Мой каталог:

enter image description here

+0

вот ваш [Ref] (http://stackoverflow.com/questions/4971877/how-to-transfer -data-from-jsp-to-servlet) u получить всю важную информацию из данной ссылки –

+0

Я видел этот поток Parth, но это не исправить мою проблему. – Obviously

ответ

2

я мог видеть несколько ошибок в вашем посте,

  1. Заменить атрибут действия с,

    <form action = "./login" method="post">

  2. Если ваш используя версии 2.5, удалите импорт для аннотирования, а также эта линия,

    @WebServlet("/login")

  3. В-третьих, чтобы получить доступ к <form> элементов в сервлет, используйте request#getParameter

    String username = request.getParameter("username"));

+0

Обновлена ​​ссылка для API. спасибо за уведомление :) –

+0

Когда я делаю

он перенаправляет на localhost: 8080/UserModule/WebContent/jsp/login, которого не существует. Мой сервлет находится в том же проекте, но под другим каталогом и пакетом. – Obviously

+0

@ Обычно использовать атрибут «./Login» в атрибуте действия –

0

Ваш класс находится в пакете action, поэтому его полное имя action.LoginServlet. Вы настроили src.action.LoginServlet как класс сервлета. Удалите src оттуда.

<servlet> 
    <servlet-name>loginServlet</servlet-name> 
    <servlet-class>action.LoginServlet</servlet-class> 
</servlet> 

Эта часть:

<form action = "localhost:8080/UserModule/src/action/login" method="post"> 

У вас есть много шаблонного кода там. Вместо этого используйте Expression Language добавить localhost:8080/webappName так:

<form action = "${request.contextPath}/login" method="post"> 

Поскольку вы используете Servlet Specification 2.5, вы не можете использовать @WebServlet аннотацию. Поэтому удалите его из класса Serlvet. В противном случае, начать использовать Servlet 3.0 или выше, изменив спецификацию сервлетов в вашем web.xml

Чтобы получить параметры из представленного <form> использования ServletRequest#getParameter.request#getAttribute используется в JSP для извлечения атрибутов для отображения данных при использовании языка выражений.

+0

это только перенаправлено на localhost: 8080/login, которого не существует – Obviously

+0

@Очевидно, что что-то не так в вашем приложении. Я использовал его несколько раз и работает так, как ожидалось. –

+0

@ Как правило, предоставьте информацию о том, как вы развертываете свое веб-приложение и каково распределение файлов. –

0

Просто удалите @WebServlet("/login")

Это аннотаций и отображение сервлета являются взаимозаменяемыми. Поэтому, когда вы используете одно из них, другое определение не требуется.

Для того, чтобы использовать web.xml @WebServlet WebAPP имеет быть объявлены как версия 3.0

<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
+0

Я знаю, но я должен использовать версию 2.5 – Obviously

+0

Тогда '@ WebServlet' не будет работать для вас. Придерживайтесь сопоставлений сервлетов внутри вашего web.xml, а также, как сказал @ luiggi-mendoza, рассмотрите файл с исправлением жесткого кодирования localhost: 8080 с $ {request.contextPath} –

+0

Как я упоминал в сообщении @ luiggi-Mendoza, только перенаправляется на localhost: 8080/login, которого не существует – Obviously

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