2016-05-28 3 views
2

Я думаю, что до сих пор я читал каждый вопрос по этой теме, и я действительно пробовал много решений, так что извините, если я ничего не упустил. Я использую Eclipse с Tomcat 8. Tomcat уже настроен как сервер и MySQL-коннектор. Jar находится в папке WEB-INF/lib, web.xml только в/WEB-INF, и индекс только в/WebContent404 Запрашиваемый ресурс недоступен Eclipse/Tomcat

index.html:

<!DOCTYPE html> 
<html> 
<form action="Servlets/Start" method="post"> 
<font face="verdana" size="2"> 
Enter Table Name :<input type="text" name="table"> 
        <input type="submit" value="Display"> 
    </font> 
</form> 


</html 

start.java:

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 
/** 
* Servlet implementation class Start 
*/ 
@WebServlet("/Start") 
public class Start extends HttpServlet { 
private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public Start() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse respond) throws ServletException, IOException { 
PrintWriter pw=respond.getWriter(); 
respond.SetContentType("text/html"); 
String tb=request.getParameter("table"); 
try 
{ 
    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    Connection con=DriverManager.getConnection("jdbc::oracle::thin:@localhost:music","root","1234");  
    Statement st=con.createStatement(); 
    System.out.println("connection established successfully!"); 
    ResultSet rs=st.executeQuery("SELECT * FROM"+tb); 

    pw.println("<table border=1>"); 
     while(rs.next()) 
     { 
      pw.println("<tr><td>"+rs.getInt(1)+"</td></td>+rs.getString(2)+</td>"+"<td>"+rs.getString(3)+"</td></tr>"); 
     } 
    pw.println("</table>"); 
    pw.close(); 
} 
catch (Exception e){ 
e.printStackTrace(); 
} 
    // TODO Auto-generated method stub 
    response.getWriter().append("Served at: ").append(request.getContextPath()); 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    doGet(request, response); 
} 

}

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 
<display-name>Servlets</display-name> 
<servlet> 
<servlet-name>Start</servlet-name> 
<servlet-class>start.Start</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>Start</servlet-name> 
<url-pattern>/Start</url-pattern> 
</servlet-mapping> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

Теперь всякий раз, когда я бегу index.html на сервере, все работает отлично, однако после нажатия кнопки он определяет 404 Error, и я понятия не имею, почему именно это происходит. Я попытался использовать только/Начать как действие в index.html, что приводит к тому, что сообщение об ошибке просто указывает на/Пуск, однако, когда я использую Servlets/Start, он указывает на Servlets/Servlets/Start, если это помогает. Вводящий localhost: 8080/Servlets предлагает мне index.html, который затем приводит к той же проблеме

Поскольку я медленно становлюсь очень расстроенным, я хотел бы попросить вас о помощи, спасибо заранее!

+0

В вашем виде ресурса дается как ' "Servlets/Start"' а в web.xml, как только "Пуск". Расположение по умолчанию в tomcat - это папка классов. Где именно ваши классы? – pahan

+0

@ 224 Я уже пробовал использовать/Start и не работал aswell =/ – Seteris

+0

@Pshemo http: // localhost: 8080/Servlets/Servlets/Start - это URL-адрес, мой проект называется Servlets – Seteris

ответ

1

Я скопировал исходные коды и создал веб-проект в eclipse. enter image description here

Start.java (в пакете с именем start) выглядит следующим образом: -

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

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class Start 
*/ 
@WebServlet("/Start") 
public class Start extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Start() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse respond) throws ServletException, IOException { 
     PrintWriter pw = respond.getWriter(); 
     respond.setContentType("text/html"); 
     String tb = request.getParameter("table"); 
     try { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      Connection con = DriverManager.getConnection("jdbc::oracle::thin:@localhost:music", "root", "1234"); 
      Statement st = con.createStatement(); 
      System.out.println("connection established successfully!"); 
      ResultSet rs = st.executeQuery("SELECT * FROM" + tb); 

      pw.println("<table border=1>"); 
      while (rs.next()) { 
       pw.println("<tr><td>" + rs.getInt(1) + "</td></td>+rs.getString(2)+</td>" + "<td>" + rs.getString(3) 
         + "</td></tr>"); 
      } 
      pw.println("</table>"); 
      pw.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     // TODO Auto-generated method stub 
     // response.getWriter().append("Served at: 
     // ").append(request.getContextPath()); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doGet(request, response); 
    } 
} 

Файл web.xml был изменен, чтобы удалить отображение сервлета, как она существует как @WebServlet на самом классе. Содержание следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>Servlets</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.html</welcome-file> 
     <welcome-file>default.htm</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

index.html (в папке WebContent) выглядит следующим образом:

<!DOCTYPE html> 
<html> 
<form action="Start" method="post"> 
<font face="verdana" size="2"> 
Enter Table Name :<input type="text" name="table"> 
        <input type="submit" value="Display"> 
    </font> 
</form> 
</html> 

Результатом является то, что я могу получить доступ к веб-приложению на http://localhost:8080/Servlets/ и нажав на кнопку дисплей, перейдите на следующую страницу.

enter image description here

+0

Я могу запустить его до этого момента, но, войдя в таблицу name (с действительной и существующей таблицей с данными в ней) возвращает мне ошибку 404 Тип Сообщение о состоянии Сообщение/Сервлеты/Сервлеты/Начало описание Запрошенный ресурс недоступен. – Seteris

+1

Это действительно работает сейчас! Однако сервлет просто пустой белый экран, но может быть, потому что MySQL не работает? Также большое спасибо за интенсивную помощь! – Seteris

+0

@Seteris Почему вы говорите о MySQL? В Servlet вы фактически подключаетесь к базе данных Oracle. –

0

В разделе index.html измените действие на действие = "Пуск". В web.xml введите полное имя класса в