2014-09-24 2 views
0

Могу ли я запустить динамическое веб-приложение в eclipse без web.xml и без @WebServlet ("/ Myservlet")?Сервлет работает без web.xml в eclipse

У меня есть три html-файла и один сервлет в примере, приведенном в моей книге, но он не работает в eclipse. Когда я запускаю eclipse, он дает ошибку: 404 source not found. Я также заметил, что сервлет не отображается в области TrainingServlets (myprojectname)/дескриптора дескриптора/сервлетов.

Код для них ниже

**login.html** 
<!DOCTYPE html> 
<html> 
<meta charset="ISO-8859-1"> 
<body> 
<h2>Please provide login details</h2> 
<form method="post" action="http://localhost/TrainingServlets/myservlet" name="myForm"> 
<br>User Id: 
<input type="text" name="userid"/> 
<br>Password: 
<input type="password" name="pwd"> 
<br><br> 
<input type="submit" value="Submit Form"/> 
</form> 

</body> 
</html> 


**welcome.html** 
<!DOCTYPE html> 
<html> 
<meta charset="ISO-8859-1"> 
<body> 
<h2>You have successfully logged in</h2> 
</body> 
</html> 

**register.html** 
<!DOCTYPE html> 
<html> 
<meta charset="ISO-8859-1"> 
<body> 
<h2>Your login is incorrect.Please register yourself</h2> 
<form method="post" action="" name="myform"> 
<br>Name: 
<input type="text" name="userid"/> 
<br> Address: 
<input type="text" name="address"/> 
<br> Phone No: 
<input type="text" name="phoneno"/> 
<br><br> 
<input type="submit" value="Register"/> 
</form> 
</body> 
</html> 

**MyServlet** 
package com; 

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 


public class Myservlet extends HttpServlet{ 


    private static final long serialVersionUID = 1L; 

    protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ 
     processRequest(request,response); 
    } 
    protected void doPOST(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ 
     processRequest(request,response); 
    } 

    protected void processRequest(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ 
     String id = request.getParameter("userid"); 
     String pwd = request.getParameter("pwd"); 

     if (id.equals("ali")&& pwd.equals("vu")) { 
      response.sendRedirect("welcome.html"); 
     }else{ 
      response.sendRedirect("register.html"); 
      response.sendError(response.SC_PROXY_AUTHENTICATION_REQUIRED,"Send Error Demo"); 
     } 
    } 

} 
+0

Web.xml как ваш 'public static void main (String [] args)' для вашего веб-приложения на основе Java. Абсолютно необходимо! – shinjw

+2

Вы можете заменить web.xml аннотациями с помощью веб-приложения версии 3.0, но вы не можете полностью пропустить его. – ares

+0

У меня еще два вопроса: 1-мне нужно перезапустить tomcat каждый раз, когда я редактирую сервлет или код html, потому что eclipse не обновляет url автоматически, когда я обновляю действие в файле html 2- теперь после включения аннотации, когда я запускаю сервлет, eclipse дает как это происходит »Сервер обнаружил внутреннюю ошибку, которая помешала ему выполнить этот запрос» –

ответ

0

это не было возможно, прежде чем сервлет 3.0.Now web.xml не требуется.

Но если вы используете версию до сервлета 3.0, то это необходимо.

Тогда Web.xml был дескриптором развертывания и сообщает серверу о присутствующих сервлетах.

Одним словом, это было сердце вашего веб-приложения. Без этого ваше приложение не может работать.

0

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

3

Если HTML файлы живет в корневой папке (в WebContent, если вы используете стандартный проект затмения), изменить форму HTML для:

<form method="post" action="myservlet" name="myForm"> 

По-другому, если вы используют Servlet 3.0 (., например, Tomcat 7), вы можете избежать файл web.xml, если вы используете аннотацию:

@WebServlet(value="/myservlet", name="Myservlet") 
public class Myservlet extends HttpServlet { ... } 

Если сервер приложений поддерживает Servlet 3.0, можно использовать аннотации. См. Больше в Servlet 3.0 tutorial.

Following the path outlined by Java EE 1.5, the Servlet specification 3.0 heavily uses annotations to declare Servlet, Filters, Listeners and Security. The configuration file web.xml is now optional.

+0

У меня еще два вопроса: 1-мне нужно перезапустить tomcat каждый раз, когда я редактирую сервлет или код html, потому что eclipse не обновляет URL-адрес автоматически при обновлении action в html-файле 2- теперь после включения аннотации, когда я запускаю сервлет, eclipse дает подобное сообщение «Сервер обнаружил внутреннюю ошибку, которая помешала ему выполнить этот запрос» –

+0

① Вам не нужно перезапускать, если вы меняете HTML o JSP в противном случае, да. ② Используете ли вы '/' в своем шаблоне url. См. Больше примеров в http://www.codejava.net/java-ee/servlet/webservlet-annotation-examples –

+0

Я даю действие, подобное этому action = "http: //localhost/TrainingServlets/com.myservlet" в моем html файл здесь «com» ​​- это имя пакета, это правильный путь к правильному действию? –

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