Java Servlet&数据库连接

时间:2016-09-25 15:57:05

标签: java xml tomcat servlets oracle11g

在eclipse中运行时让程序显示任何内容时出现问题。

目标是: 在此应用程序中,您还将创建一个虚拟目录,这样您就不必使用单词servlet作为表单发布URL的一部分。然后,您将能够使用类似于以下内容的URL运行Web应用程序servlet:http://localhost:7070/Week5/FormPost2。要创建虚拟目录,您可以先修改附加到此分配的web.xml。接下来,创建一个Servlet,在调用doGet方法时显示一个表单。该表单将包含一个post操作,将表单发布回到同一个servlet,在doPost方法中将表单数据保存到数据库中。使用您的Oracle帐户建立数据库连接。将表单数据保存到数据库后,使用显示数据库中包含的所有当前记录的数据库中的查询以一种吸引人的格式进行响应。表单必须至少包含三个输入字段。

收到以下错误:

HTTP状态404 - /Week5/servlet/Week5.Week5

输入状态报告 消息/Week5/servlet/Week5.Week5

description请求的资源不可用。

Apache Tomcat / 7.0.72

我确定这是一个简单的错误,但请指出它,以便我能正确显示它。谢谢。

package Week5;

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

public class Week5 extends HttpServlet{
    private static final long serialVersionUID = 1L;

    Connection con = null;
    Statement stmt = null;

    public Week5(){
        init();
    }
    public void init(){
        try{
            DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
            con =  DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "student2", "pass");
            stmt = con.createStatement();
            stmt.executeUpdate("CREATE TABLE MYTABLE (FNAME VARCHAR2(20), LNAME VARCHAR2(40), PHONE VARCHAR2(20))");
            stmt.close();
        }
        catch (Exception e){
        }
    }

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

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("");
        out.println("");
        out.println("First Name:");
        out.println("");
        out.println("");
        out.println("Last Name:");
        out.println("");
        out.println("");
        out.println("Phone:");
        out.println("");
        out.println("SUBMIT");
        out.println("");
        out.println("");
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        try{
            if (con != null)
                init();
            String fname = request.getParameter("FNAME");
            String lname = request.getParameter("LNAME");
            String phone = request.getParameter("PHONE");
            Statement stmt = con.createStatement();
            stmt.executeUpdate("INSERT INTO MYTABLE VALUES('" + fname + "', '" + lname + "', '" + phone + "')");
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("");
            ResultSet rset = stmt.executeQuery("SELECT * FROM MYTABLE");
            while (rset.next()){
                out.print("");
                out.print("First Name: " + rset.getString(1));
                out.print("");
                out.println();
                out.print("");
                out.print("Last Name: " + rset.getString(2));
                out.print("");
                out.println();
                out.print("");
                out.print("Phone: " + rset.getString(3));
                out.print("");
                out.println();
                out.println();
            }
            out.println("");
            out.close();
            stmt.close();
        }

        catch (Exception e){

            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("");
            out.println(e.getMessage());
            out.println("");
            out.close();
        }
    }
}

XML     

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app>

<servlet>
<servlet-name>
Week5 <!-- Alias I gave the servlet // -->
</servlet-name>
<servlet-class>
HelloWorld <!-- Class name // -->
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>
Week5 <!-- Alias I gave the servlet // -->
</servlet-name>
<url-pattern>
/VirtualName <!-- What I want the user to type in // -->
<!-- Example: http://localhost:7070/Week5/FormPost2 // -->
</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>
FormPost2
</servlet-name>
<servlet-class>
HelloWorld2
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>
FormPost2
</servlet-name>
<url-pattern>
/VirtualName2
</url-pattern>
</servlet-mapping>

</web-app>

1 个答案:

答案 0 :(得分:1)

您的servlet类应该是完全限定的类名,例如

<servlet-class>
week5.week5
</servlet-class>

<servlet-class>标记应包含servlet(类) <servlet-name>将是使用<servlet-mapping>

映射的servlet的名称

例如

<servlet>
<servlet-name>
anyServletName
</servlet-name>
<servlet-class>
com.example.customServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>
anyServletName
</servlet-name>
<url-pattern>
/VirtualName2
</url-pattern>
</servlet-mapping>