2013-06-10 4 views
1

Я пишу простую программу сервлетов, в которой отображается домашняя страница. Там я дал учетную запись нет, и вам нужно нажать на submit. это должно вызвать мой сервлет и показать баланс. Я написал это в затмении. Структура папки проекта ниже У меня есть account.html внутри папки webcontent и web.xml внутри web-inf.Запрошенный ресурс (/ WelcomeServlet) недоступен

когда я нажимаю на submit, я получаю сообщение 404/WelcomeServlet не найден. пожалуйста, помогите мне ..

**account.html** 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Bank Account</title> 
</head> 
<body bgcolor="Gold"> 
<center><h1>Account Enquiry</h1> 
<form action="/WelcomeServlet"> 
Account Number : <input type = "text" Name = "t1"><br><br> 
<input type="submit" value="GetBalance"> 
</form></center> 
</body> 
</html> 

здесь web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>app1</display-name> 
    <welcome-file-list> 
    <welcome-file>account.html</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <display-name>WelcomeServlet</display-name> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <servlet-class>com.stc.WelcomeServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <url-pattern>/WelcomeServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 
-------------- 

Вот WelcomeServlet:

package com.stc; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class WelcomeServlet 
*/ 
public class WelcomeServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    Connection conn ; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public WelcomeServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 
    public void init(ServletConfig sc){ 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      conn = DriverManager.getConnection("jdbc:mysql://localhost/test"); 

     } 
     catch (Exception e) { 
      // TODO: handle exception 
     } 
    } 
    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<HTML>"); 
     out.println("<body bgcolor = grey>"); 
     try { 
      Statement st = conn.createStatement(); 
      ResultSet rs = st.executeQuery("select balance from Account where accno = " +request.getParameter("t1")); 
      if(rs.next()) { 
       out.println("<h1>Balance is SAR:" +rs.getFloat(3)+"</h1>"); 
      }else { 
       out.println("<h1>Account details does not exist</h1>"); 
      } 
      rs.close(); 
      st.close(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     out.println("</body></HTML>"); 
     out.close(); 
    } 



} 
+0

Где находится метод 'doPost' для обработки формы? –

+1

Не можем ли мы отправить форму с помощью doGet? – user2470190

ответ

1

Следующая сервлет работал для меня (Tomcat 7.0.40, ява версия "1.6.0_45"). Обратите внимание, что:

  1. Ведущее '/' требуется в web.xml для <url-pattern> --i тестировал. И в моей книге «Первые первые сервлеты» говорится, что требуется косая черта (2004, с.586). Кажется, что для нового синтаксиса требуется также косая черта: @WebServlet("/WelcomeServlet"). Без ведущей косой черты мой проект бросил всевозможные исключения.

  2. В атрибуте действия формы не требуется косая черта. В браузере есть правила для сборки URL-адресов из относительных путей (то есть те, которые не начинаются с косой черты), для получения окончательного URL-адреса. Поэтому для атрибута действия формы вы можете использовать либо абсолютный путь (ведущая косая черта), либо относительный путь (без ведущей косой черты), если относительный путь разрешается по тому же пути, что и правильный абсолютный путь. Правильный абсолютный путь начинается с имени проекта.

  3. Мне нужно было указать имя пользователя и пароль в getConnection(), для меня это «root» и «». Существует версия getConnection(), которая не принимает имя пользователя и пароль, но я не знаю, как это будет работать.

  4. Для getFloat() номер столбца должен быть ровно 1; ни 2, ни-не будет работать, что имело смысл после прочтения документов:

поплавка GetFloat (интермедиат ColumnIndex) бросает SQLException Получает значение определяемого столбца в текущей строке этого ResultSet объекта как float на языке программирования Java. Параметры: ColumnIndex - первый столбец 1, второй 2, ...
http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getFloat(int)

селектов извлекает только одно из записи клиента: баланс. В результате ваша строка содержит только один столбец.

package com.stc; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class WelcomeServlet 
*/ 
public class WelcomeServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    Connection conn ; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public WelcomeServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 
    public void init(ServletConfig sc){ 
     try { 
      //ADDED this line: 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/my_db", 
        "root", 
        "" 
      ); 

     } 
     catch (Exception e) { 
      System.out.println("Couldn't create connection."); 
      // TODO: handle exception 
     } 
    } 
    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<HTML>"); 
     out.println("<body bgcolor = grey>"); 
     try { 
      Statement st = conn.createStatement(); 
      String accno = request.getParameter("t1"); 
      ResultSet rs = st.executeQuery("SELECT balance FROM accounts WHERE accno = " +request.getParameter("t1")); 
      if(rs.next()) { 
       out.println("<h1>Balance is SAR:" +rs.getFloat(1)+"</h1>"); 
      }else { 
       out.println("<h1>Account details does not exist</h1>"); 
      } 
      rs.close(); 
      st.close(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     out.println("</body></HTML>"); 
     out.close(); 
    } 



} 
+0

Привет, Спасибо за ответ.я попытался с этим, но все еще не работал – user2470190

+0

@ user2470190, я внесла некоторые изменения в ваш сервлет, а затем он работал так, как ожидалось. – 7stud

+0

Я думаю, никаких изменений не требуется в servlet.Problem здесь servlet не запускает execute.it не нашел ресурс WelcomeServlet.Still, я не могу получить ... Как вы это запустили .. – user2470190

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