2015-01-26 3 views
3

Я новичок в сервлетах Java. Я googled для того, чтобы создать простую форму входа с проверкой базы данных mysql. Я сделал так много изменений и по какой-то причине по-прежнему имею следующую ошибку.Ошибка в форме входа

Следующий тип ошибки:

HTTP Status 404 - /LoginServlet 

type Status report 

message /LoginServlet 

description The requested resource is not available. 
Apache Tomcat/7.0.57 

Здесь все мои страницы JSP и объекты Java и web.xml:

index.jsp

<%@ 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"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Login Page</title> 
</head> 
<body> 
<center> 
<h1>Login Details</h1> 
<form action="/LoginServlet" method="POST"> 
<br/>Username:<input type="text" name="username"> 
<br/>Password:<input type="password" name="password"> 
<br/><input type="submit" value="Submit"> 
</form> 
</center> 
</body> 
</html> 

welcome.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Welcome <%=session.getAttribute("name")%></title> 
</head> 
<body> 
<h3>Login successful!!!</h3> 
<h4> 
Hello, 
<%= session.getAttribute("name")%> 
</h4> 
</body> 
</html> 

LoginServlet.java упаковка com.servlet;

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import com.logindao.LoginDao; 

public class LoginServlet extends HttpServlet { 

private static final long serialVersionUID = 1L; 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

    response.setContentType("text/html");  
    PrintWriter out = response.getWriter();  

    String n=request.getParameter("username");  
    String p=request.getParameter("password"); 

    HttpSession session = request.getSession(false); 
    if(session!=null) 
    session.setAttribute("username", n); 

    if(LoginDao.validate(n, p)){  
     RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");  
     rd.forward(request,response);  
    }  
    else{  
     out.print("<p style=\"color:red\">Sorry username or password error</p>");  
     RequestDispatcher rd=request.getRequestDispatcher("index.jsp");  
     rd.include(request,response);  
    }  

    out.close();  
    }  
} 

LoginDao.java

package com.logindao; 

import java.sql.*; 

public class LoginDao { 
    public static boolean validate(String name, String pass) {   
     boolean status = false; 
     Connection conn = null; 
     PreparedStatement pst = null; 
     ResultSet rs = null; 

    String url = "jdbc:mysql://localhost:3306/"; 
    String dbName = "form"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "root"; 
    String password = "password"; 
    try { 
     Class.forName(driver).newInstance(); 
     conn = DriverManager.getConnection(url + dbName, userName, password); 

     pst = conn.prepareStatement("select * from login where user=? and password=?"); 
     pst.setString(1, name); 
     pst.setString(2, pass); 

     rs = pst.executeQuery(); 
     status = rs.next(); 

    } catch (Exception e) { 
     System.out.println(e); 
    } finally { 
     if (conn != null) { 
      try { 
       conn.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
     if (pst != null) { 
      try { 
       pst.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
     if (rs != null) { 
      try { 
       rs.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return status; 
    } 
} 

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_3_0.xsd" 
    version="3.0"> 

    <servlet> 
     <servlet-name>login</servlet-name> 
     <servlet-class>com.servlet.LoginServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>login</servlet-name> 
     <url-pattern>/LoginServlet</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

ответ

1

Проблема здесь:

<form action="/LoginServlet" method="POST"> 
      ^means absolute path 

Измените его в надлежащей форме с использованием EL:

<form action="${request.contextPath}/LoginServlet" method="POST"> 

В вашем методе doPost, если вы уже используете это:

RequestDispatcher rd=request.getRequestDispatcher("..."); 
rd.forward(request,response); 

Там нет необходимости использовать писатель ответа :

PrintWriter out = response.getWriter(); 
//... 
out.print("<p style=\"color:red\">Sorry username or password error</p>"); 
//... 
out.close(); 

Эти строки с использованием out должны быть удалены с вашего кода ,

Также, пожалуйста, stop using scriptlets. Используйте EL + JSTL для достижения того же результата:

<!-- <title>Welcome <%=session.getAttribute("name")%></title> --> 
<!-- Retrieve it directly from any scope --> 
<!-- <title>Welcome ${name}</title> --> 
<!-- If you want to make sure it is retrieved from session scope --> 
<title>Welcome <c:out value="${sessionScope.name}" /></title> 
</head> 
<body> 
<h3>Login successful!!!</h3> 
<h4> 
<!-- similar here --> 
<!-- 
Hello, <%= session.getAttribute("name")%> 
--> 
Hello, <c:out value="${sessionScope.name}" /> 
+0

Я до сих пор та же ошибка: HTTP Status 404 -/LoginServlet типа отчет Статуса сообщения/LoginServlet описания Запрашиваемого ресурс не доступен. Apache Tomcat/7.0.57 – user3158406

1

Если ваше приложение не будет развернуто в качестве корневого приложения, всех URL, к ресурсам приложения должно начинаться с путем контекста приложения (корень приложения путь контекста - пустая строка).

Как правило, если ваш файл войны myWebApp.war, приложение живет под /myWebApp, и все URL-адреса должны начинаться с /myWebApp.

Ваше действие формы /LoginServlet, поэтому оно не может заполнить это ограничение.

Используйте JSTL, и определить действие как

<form action="<c:url value='/LoginServlet' />" 

c:url тег PREPEND путь контекста, что это такое.

+0

Я до сих пор та же ошибка: HTTP Status 404 -/LoginServlet типа отчет Статус сообщения/LoginServlet описания Запрашиваемый ресурс не доступен. Apache Tomcat/7.0.57 – user3158406

+0

Вы правильно установили jar-файлы JSTL и объявили об использовании базовой библиотеки в JSP? Каков источник HTML (в браузере) формы? –

+0

Да, я загрузил jar-файл JSTL и опустил его в WEB-INF. Но все тот же тип ошибки !!! Любые предложения ??? Пожалуйста, помогите мне .. – user3158406

0

Ваш сервлет не найден в абсолютном пути, который вы запросили атрибут <form action>. Я предлагаю вам получить путь, используя contextPath как предложено @Luggi.

Этот временный soultion должен работать,

<form action="<c:url value='./LoginServlet'>" 

, как он будет искать сервлета в пакетах, которые создаются под src пакета.

А также избегайте использования скриптов, поскольку они не предлагаются в течение десятилетия. Пожалуйста, смотрите How to avoid Java code in JSP files?

Надеется, что это помогает

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