Я использую 64-разрядную ОС Windows 8.1, базу данных oracle 12c и netbeans ide.i создали Java-проект под названием WebApplication1 в моей среде NetBeans. в моей базе данных я создал пользователя С## abc и пароль abc, имеющий SID базы данных orcl. В моей базе данных я создал одну таблицу с именем city с адресом имени столбца и вставил один файл "xyz" в таблицу. Я запускаю проект и в d браузере после записи города в текстовое поле. Я получаю Servlet NewServlet message- в /WebApplication1, но он должен отображать xyz. Где я ошибаюсь?
Я добавил 2 файла jar flies ojdbc14.jar и ojdbc_14.jar.
Мой новый.jsp
<form action="NewServlet" method="post">
<font face="verdana" size="2">
Enter Table Name :<input type="text" name="table">
<input type="submit" value="Display">
</font>
</form>
NewServlet.java
package p;
import java.io.IOException;
import java.io.PrintWriter;
import static java.lang.System.out;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NewServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NewServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet NewServlet at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String tb=request.getParameter("table");
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","c##abc","abc");
Statement st=con.createStatement();
out.println("connection established successfully...!!");
ResultSet rs=st.executeQuery("Select * from "+tb);
while(rs.next())
{
out.println(rs); }
}
catch (ClassNotFoundException | SQLException ex){
out.println(ex);
}
В вашей doPost()
метод, то out
вы используете System.out
, который вы импортировали (как статические). В processRequest()
вы переопределяете это с помощью:
PrintWriter out = response.getWriter()
... который немного запутан, и я бы выбрал другое имя переменной. Но вы не делаете этого в doPost().
Поэтому ничто, которое вы пишете в этом методе с помощью println
не делает браузеру через HttpServletResponse
, он просто переходит на консоль JVM.
Из кода, который вы опубликовали, processRequest()
как будет processRequest()
который должен быть для вас, чтобы увидеть результат, который вы получаете. Либо вы не показывали вызов doGet()
/processRequest()
из этого метода, либо обработка сервлета автоматически возвращается к doGet()
потому что ответ не был инициирован или он перенаправляется обратно на него автоматически после ошибка состояние.
Даже с локальной переменной для response.getWriter()
вам нужно будет отправить правильный HTML, а не только обычные сообщения без тегов, которые у вас есть сейчас, иначе вы просто получите пустую страницу.