Java 数据库交互后的重定向

Java 数据库交互后的重定向,java,oracle,jsp,servlets,Java,Oracle,Jsp,Servlets,下面是我的servlet代码,我怀疑这是导致问题的原因。在将电影添加到数据库之后,我不知道如何让servlet重定向回list.jsp页面。我认为这与doGet()方法有关。你能给我指一下正确的方向吗?我正在使用Netbeans、Tomcat和oracle11gxe package movies; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql

下面是我的servlet代码,我怀疑这是导致问题的原因。在将电影添加到数据库之后,我不知道如何让servlet重定向回list.jsp页面。我认为这与doGet()方法有关。你能给我指一下正确的方向吗?我正在使用Netbeans、Tomcat和oracle11gxe

package movies;

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;

@SuppressWarnings({"unused", "serial"})
public class MovieAdd extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Connection c = null;
    Statement stmt = null;
    ResultSet rs = null;
    String sql;

    PrintWriter out = response.getWriter();
    response.setContentType("text/html");

    String movie = request.getParameter("movie");
    String year = request.getParameter("year");
    String rating = request.getParameter("rating");
    String actors = "";

    for (int l = 0; l < 5; l++) {
        String m = "a" + (l + 1);
        String actor = request.getParameter(m);
        if (actor != null && actor != "" && !actor.isEmpty()) {
            actor = actor + ", ";
            actors = actors + actor;
        }
    }
    if (actors.endsWith(", ")) {
        actors = actors.substring(0, actors.length() - 2);
    }
    System.out.println(actors);
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/XE", "system", "password");//PUT DATABASE CONNECTION INFO
        c.setAutoCommit(false);
        System.out.println("Opened database successfully");

        stmt = c.createStatement();

        sql = "INSERT INTO MOVIES (NAME, YEAR, RATING, ACTORS) VALUES ('"
                + movie
                + "','"
                + year
                + "','"
                + rating
                + "','"
                + actors
                + "')";
        stmt.executeUpdate(sql);
        c.commit();

        sql = "SELECT * FROM MOVIES";
        rs = stmt.executeQuery(sql);
        while (rs.next()) {
            String movieDb = rs.getString("NAME");
            int yearDb = rs.getInt("YEAR");
            int ratingDb = rs.getInt("RATING");
            int actorsDb = rs.getInt("ACTORS");
            System.out.println("Movie:- " + movieDb);
            System.out.println("Year of Release:- " + yearDb);
            System.out.println("Rating:- " + ratingDb);
            System.out.println("Actors:- " + actorsDb + "\n");
        }
        stmt.close();
        c.close();

    } catch (Exception e) {
        System.err.println(e.getClass().getName() + ": " + e.getMessage());
        System.exit(0);
    }

    String site = "list.jsp";
    response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
    response.setHeader("Location", site);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String site = "add.jsp";
    response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
    response.setHeader("Location", site);
}


}
打包电影;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@抑制警告({“未使用”、“串行”})
公共类MovieAdd扩展了HttpServlet{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
连接c=null;
语句stmt=null;
结果集rs=null;
字符串sql;
PrintWriter out=response.getWriter();
response.setContentType(“text/html”);
字符串movie=request.getParameter(“movie”);
字符串year=request.getParameter(“年”);
字符串评级=request.getParameter(“评级”);
弦乐演员=”;
对于(int l=0;l<5;l++){
字符串m=“a”+(l+1);
String actor=request.getParameter(m);
if(actor!=null&&actor!=“&&&!actor.isEmpty()){
演员=演员+“,”;
演员=演员+演员;
}
}
if(actors.endsWith(“,”)){
actors=actors.substring(0,actors.length()-2);
}
System.out.println(actors);
试一试{
类forName(“oracle.jdbc.OracleDriver”);
c=DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521/XE”,“system”,“password”);//输入数据库连接信息
c、 设置自动提交(错误);
System.out.println(“已成功打开数据库”);
stmt=c.createStatement();
sql=“在电影中插入(姓名、年份、评级、演员)值(”
+电影
+ "','"
+年
+ "','"
+评级
+ "','"
+演员
+ "')";
stmt.executeUpdate(sql);
c、 提交();
sql=“从电影中选择*”;
rs=stmt.executeQuery(sql);
while(rs.next()){
String movieDb=rs.getString(“名称”);
int yearDb=rs.getInt(“年”);
int ratingDb=rs.getInt(“评级”);
int actorsDb=rs.getInt(“ACTORS”);
System.out.println(“Movie:-”+movieDb);
System.out.println(“发布年份:-”+yearDb);
System.out.println(“额定值:-”+ratingDb);
System.out.println(“Actors:-”+actorsDb+“\n”);
}
stmt.close();
c、 close();
}捕获(例外e){
System.err.println(e.getClass().getName()+“:”+e.getMessage());
系统出口(0);
}
String site=“list.jsp”;
response.setStatus(HttpServletResponse.SC_临时移动);
响应。设置标题(“位置”,站点);
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
String site=“add.jsp”;
response.setStatus(HttpServletResponse.SC_临时移动);
响应。设置标题(“位置”,站点);
}
}

您可以通过以下方式向jsp页面发送重定向:

String site = "list.jsp";
response.sendRedirect(site);
它将向浏览器发送重定向指令,以对您传递的url执行get请求

您还可以使用
RequestDispatcher
对象的
forward
方法。主要区别在于此方法不发送重定向响应,它将请求处理“转发”到其他组件,就像重定向一样,但在服务器中

String site = "list.jsp";
request.getRequestDispatcher("list.jsp").forward(request, response);

您必须记住,对于这两种方法,您不能提交响应,否则这些方法将抛出IllegalArgumentException,换句话说,在调用这些方法之前,不要修改响应的内容。

Loachamin先生是绝对正确的,我给了你答案,因为你对我最初的问题有正确的答案。我的代码的真正问题是,在这个while循环中,数据类型与数据库数据类型实际上不匹配

    while (rs.next()) {
        String movieDb = rs.getString("NAME");
        int yearDb = rs.getInt("YEAR");
        int ratingDb = rs.getInt("RATING");
        int actorsDb = rs.getInt("ACTORS");//Should be a string, not an int
        System.out.println("Movie:- " + movieDb);
        System.out.println("Year of Release:- " + yearDb);
        System.out.println("Rating:- " + ratingDb);
        System.out.println("Actors:- " + actorsDb + "\n");