2017-02-21 10 views
2

Я пытаюсь запустить мою страницу jsp вместе с сервлетом. Servlet не найден, когда я пытаюсь вызвать его с помощью URLServlet не найден в Intellij

http://localhost:8080/StudentServlet Я получаю 404 ошибку, говоря:

«запрошенный ресурс не доступный».

Я также пытаюсь назвать это через форму. Когда я нажимаю кнопку «Отправить», ее не распознают, производя такую ​​же ошибку.

Читайте ответы здесь, просим использовать Maven или настроить сопоставление через web.xml. По моему мнению, настройка через web.xml - это старый способ, и новый способ - установить имя на сервлет, который у меня есть. Не уверен, что я делаю неправильно.

Я не использую и не создаю инструмент и не запускаю мой сервер Tomcat, используемый локально, чтобы запускать страницы jsp, которые работают. Но сервлеты не распознаются. Добавлен снимок экрана для структуры проекта в случае, если что-то не так.

Servlet

@WebServlet(name = "StudentServlet") 
public class StudentServlet extends HttpServlet { 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    } 

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

     response.setContentType("text/html"); 

     PrintWriter out = response.getWriter(); 

     out.println("<html><body>"); 

     out.println("<h3>Student name is:" + 
       request.getParameter("firstname") + 
       " " + 
       request.getParameter("lastname") + 
       "</h3>"); 

     out.println("</body></html>"); 

    } 
} 

index.jsp

<form action="StudentServlet" method="get"> 
    First Name: <input type="text" name="firstname"/> 
    <br/><br/> 
    Last Name: <input type="text" name="lastname"/> 
    <br/><br/> 
    <input type="submit" value="Submit"/> 
</form> 

Структура проекта

enter image description here

+0

Ваш адрес неверен. – duffymo

+0

@duffymo Пробный URL http: // localhost: 8080/servletdemo/StudentServlet, который вызывает такую ​​же ошибку. Каким должен быть URL? – cubeb

+0

Каково имя вашего файла WAR? В каком домене вы сказали IntelliJ? – duffymo

ответ

1

WebServlet documentation заявляет следующее:

По крайней мере один URL шаблон должен быть объявлен либо в value или urlPattern атрибут аннотации, но не оба.

Вы можете просто использовать следующее:

@WebServlet("/StudentServlet") 

или это:

@WebServlet(name = "StudentServlet", urlPatterns={"/StudentServlet"}) 

или это:

@WebServlet(name = "StudentServlet", value="/StudentServlet") 

Атрибут value рекомендуется для использования ш если шаблон URL является единственным атрибутом, установленным, в противном случае следует использовать атрибут urlPattern.

+0

Теперь это работает. К сожалению, кажется, что сброс сервера необходим каждый раз, когда в java-файле происходит изменение. Никаких горячих изменений. – cubeb

+0

Проверьте [этот документ] (https://www.jetbrains.com/idea/help/updating-applications-on-application-servers.html), все изменения, поддерживаемые Java HotSwap, не потребуют перераспределения или перезагрузки сервера (вы может изменить тело метода, но вы не можете удалить или добавить методы). Для более продвинутого HotSwap вы можете использовать DCEVM или JRebel. – CrazyCoder

+0

Цените его. Благодарю. – cubeb

0

Дайте контекстный путь в действии формы. Таким образом, он автоматически найдет путь вашего сервлета. Например

<form action="${pageContext.request.contextPath}/sampleServlet"> 

Кроме того, написать шаблон URL "/" в @WebServlet (имя = "/ StudentServlet") Это примечание указывает, что URL-шаблон /StudentServlet следует корень контекста.

Plus, дают корень контекста в вашем локальном хосте например: http://localhost:8080/ContextRoot/StudentServlet

+0

Пробовал вышеизложенный и отредактированный ответ. По-прежнему возникает такая же ошибка. Перезагруженный сервер и никакой разницы. – cubeb

+0

Вы пробовали точный адрес? например: http: // localhost: 8080/ContextRoot/StudentServlet, где ContextRoot - это имя веб-проекта (по умолчанию), или если вы указали другое имя, тогда вам нужно указать это имя. – greencheese

+0

Название проекта - servletdemo, как вы можете видеть в структура проекта. Таким образом, вызов: localhost: 8080/servletdemo/StudentServlet дает ту же ошибку. – cubeb

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