2013-09-16 5 views
1

Я новичок в сервлеты .Я Использование Eclipse Juno для this.I Возникают проблемы в управлении мой program..My код являетсяошибка сервлета Запрашиваемый ресурс() не доступен

package sTraining; 

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

public class Servlet1 implements Servlet{ 
ServletConfig config=null; 

public void init(ServletConfig config){ 
this.config=config; 
System.out.println("servlet is initialized"); 
} 

public void service(ServletRequest req,ServletResponse res) 
throws IOException,ServletException{ 

res.setContentType("text/html"); 

PrintWriter out=res.getWriter(); 
out.print("<html><body>"); 
out.print("<b>hello simple servlet</b>"); 
out.print("</body></html>"); 

} 
public void destroy(){System.out.println("servlet is destroyed");} 
public ServletConfig getServletConfig(){return config;} 
public String getServletInfo(){return "copyright 2007-1010";} 

} 

Я получаю эту ошибку [HTTP: // локальный: 8080/Test/WEB-INF/классы/напрягая/Servlet1.java] [1] хотя у меня есть эта вещь в моем веб .xml файл

<servlet> 
    <description></description> 
    <display-name>Servlet1</display-name> 
    <servlet-name>Servlet1</servlet-name> 
    <servlet-class>servlet.Servlet1</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Servlet1</servlet-name> 
    <url-pattern>/Servlet1</url-pattern> 
    </servlet-mapping> 

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

ответ

4

Почему вы доступ к

http://localhost:8080/Test/WEB-INF/classes/sTraining/Servlet1.java 

? Вы должны получать доступ к

http://localhost:8080/Test/Servlet1 

Читайте выше, как

[protocol or scheme] :// [host] : [port]/[context]/[servlet mapping] 

Кроме того, в соответствии с исходным кодом вы публикуемым. Класс Servlet1 находится в пакете sTraining. Поэтому Ваш web.xml должен иметь

<servlet> 
    <description></description> 
    <display-name>Servlet1</display-name> 
    <servlet-name>Servlet1</servlet-name> 
    <servlet-class>sTraining.Servlet1</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Servlet1</servlet-name> 
    <url-pattern>/Servlet1</url-pattern> 
</servlet-mapping> 

Servlet Контейнер не будет ничего в WEB-INF папке, доступной для запросов клиента сделать.


Что вы делаете, это не очень хорошая практика. Вероятно, ваш класс должен расширить HttpServlet, чтобы получить стандартное поведение HTTP. Вы также не должны писать HTML-код Java. Попробуйте прочитать руководство и ссылки на Stackoverflow, here.

+0

Можно также добавить, что каждый файл в папку WEB-INF не могут быть доступны через клиент –

+0

* ваш класс должен расширять 'HttpServlet', чтобы получить стандартное поведение * это применимо для новичков по этому вопросу, но при создании структуры, такой как Spring MVC или JSF, лучше реализовать интерфейс 'Servlet', чем расширение от' HttpServlet'. –

+0

@LuiggiMendoza Я не знаю JSF, но Spring 'DispatcherServlet' расширяет' HttpServlet' где-то в дереве наследования. Что бы вы порекомендовали мне вместо этого? Перейдите и отредактируйте ответ. Я буду вики. –

1

Поместите ./Servlet1 в вашей форме атрибут действия

<form action="./Servlet1"> 
.... 
</form> 

и проверить ваш web.xml ваше имя пакета отличается

<servlet> 
    <description></description> 
    <display-name>Servlet1</display-name> 
    <servlet-name>Servlet1</servlet-name> 
    <servlet-class>sTraining.Servlet1</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Servlet1</servlet-name> 
    <url-pattern>/Servlet1</url-pattern> 
    </servlet-mapping> 
+0

* Put./ Servlet1 в вашем атрибуте действия формы * OP обращается к сервлету через запрос GET, это будет работать, если OP хочет отправить данные из JSP на этот сервлет. –

+0

да, я знаю, я упоминал об этом. если OP хочет запросить через JSP или HTML –

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