【问题标题】:Inserting data into a database using servlet returns a blank page使用 servlet 将数据插入数据库会返回一个空白页
【发布时间】:2016-02-27 09:49:06
【问题描述】:

我正在尝试从 html 中获取两个输入并将它们插入到我的数据库中。我尝试过使用 .jsp 和 .html 文件,但没有运气。当调用 jsp/html 时,它会返回一个白页。相反,我想提示 html/jsp 页面要求输入。我做错了什么???

我的日食树

AddInfo.java servlet

 package controllers;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

@WebServlet(description = "A simple database connection", urlPatterns = { "/request" })
public class AddInfo extends HttpServlet {
    private static final long serialVersionUID = 2035938036539261609L;
    private String LOGIN_PAGE = "request.jsp";
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException{ 

            }   
    // Method to handle POST method request.
    @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {


         response.setContentType("text/html;charset=UTF-8");
         PrintWriter pw = response.getWriter();


         String con, QueryResult = null;
            DataSource dataSource = null;
            Connection conn = null;
            Statement stmt = null;
            String rs = null;


      try {
            Context initContext = new InitialContext();
            Context envContext = (Context)initContext.lookup("java:/comp/env");
            dataSource = (DataSource)envContext.lookup("jdbc/testdb");
            conn  = dataSource.getConnection();

            String name = request.getParameter("name");  
            String date = request.getParameter("date");  


              PreparedStatement pst = conn.prepareStatement("insert into Campaign values(?,?,?)");

              pst.setInt(1,11);  
              pst.setString(2,name);        
              pst.setString(3,date);


              QueryResult = "Added Information!";

              int i = pst.executeUpdate(); 

              if(i!=0){  
                pw.println("<br>Record has been inserted"); 

                response.sendRedirect(LOGIN_PAGE);
              }  
              else{  
                pw.println("failed to insert the data");  
               }  

            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (NamingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            try { 
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

    }
}

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

 <resource-ref>
  <description>Database</description>
  <res-ref-name>testdb</res-ref-name>
  <res-type>oracle.jdbc.OracleDriver</res-type>
  <res-auth>Container</res-auth>
  </resource-ref>

  <servlet>
     <description></description>
     <display-name>AddInfo</display-name>
     <servlet-name>AddInfo</servlet-name>      
    <servlet-class>controllers.AddInfo</servlet-class>
    </servlet>
   <servlet-mapping>
    <servlet-name>AddInfo</servlet-name>
    <url-pattern>/AddInfo</url-pattern>
   </servlet-mapping>

   <welcome-file-list>
   <welcome-file>page2.html</welcome-file>
   <welcome-file>page2.htm</welcome-file>
   <welcome-file>page2.jsp</welcome-file>
   </welcome-file-list>

  </web-app>

request.html

<%@ 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>Insert title here</title>
</head>
<body>

<form method="POST" id="AddInfo" action="AddInfo">
<p>
Enter name: <input type="text" name="name"><br>
Enter date: <input type="text" name="date"><br>
</p>
<br>
<p>
<input type="submit">
</p><br>
</form>

</body> 
</html>

【问题讨论】:

  • 您在服务器上运行应用程序或提交输入后立即看到空白页?
  • 我在重定向到 servlet 页面后看到白页:localhost:8080/TomcatDataSourceApplication/request
  • 我看不到您在 servlet 中重定向或转发的位置,也从您的快照中我可以看到您的 Eclipse 项目中存在错误
  • 你能帮我吗?这可能是我的问题,但我不确定如何实现它。我环顾了其他帖子,但没有运气
  • 在您尝试在下面应用我的答案之前,您的 IDE 中的错误是什么(将鼠标悬停在项目中的红色标记上)?

标签: java html eclipse jsp servlets


【解决方案1】:

编辑:我对 web.xml、request.html 和 servlet 进行了更改。我创建了项目并对其进行了测试。试试吧。发布后续问题。

您需要将您的响应转发或重定向到页面(jps/html),如下所示:

       String nextJSP = "/index.html";
       request.getRequestDispatcher(nextJSP).forward(request, response);

重定向:

  private String LOGIN_PAGE = "request.html";
  // other code here ...
  response.sendRedirect(LOGIN_PAGE);

根据您转发的原因和页面,两者都将在您的发布方法结束时进行,例​​如,您最好将成功的场景转发到您认为合适的页面。

EDIT --> 对 html 页面的更改 request.html:先重命名为 index.html。

<%@ 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>Insert title here</title>
</head>
<body>

<form method="POST" id="identifier" action="AddInfo">
<input type="text" id="Id" name="Id">
<input type="submit" id="sub" name="button"/>
</form>

</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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

 <resource-ref>
  <description>Database</description>
  <res-ref-name>testdb</res-ref-name>
  <res-type>oracle.jdbc.OracleDriver</res-type>
  <res-auth>Container</res-auth>
  </resource-ref>



 <servlet>
<description></description>
<display-name>CaseDeleteServlet</display-name>
<servlet-name>CaseDeleteServlet</servlet-name>
   <servlet-class>servlets.CaseDeleteServlet</servlet-class>
  </servlet>

  <servlet>
     <description></description>
     <display-name>AddInfo</display-name>
     <servlet-name>AddInfo</servlet-name>      
    <servlet-class>controllers.AddInfo</servlet-class>
    </servlet>
   <servlet-mapping>
    <servlet-name>AddInfo</servlet-name>
    <url-pattern>/AddInfo</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>

  </web-app>

【讨论】:

  • @user01230,这里是您应该考虑转发您的回复的地方: if(i!=0){ pw.println("
    已插入记录"); /*HERE*/ } else{ /*HERE*/ pw.println("插入数据失败"); }
  • 这正是我添加它的地方......它不起作用。感谢您的输入
  • @user01230, 确保 html 页面在表单标签中引用了正确的 servlet 和 servlet 方法。你的插入也成功了吗?
  • 实际上在我将request.html重命名为index.html后它工作了......非常感谢:)
  • 知道了!非常感谢您所做的一切
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2019-11-27
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
相关资源
最近更新 更多