Servlet實現JDBC---頁面請求跳轉到Servlet處理

package TextJdbc;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.sql.*;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
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 org.apache.catalina.connector.Request;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;

/**
 * Servlet implementation class JDBCServlet
 */
@WebServlet("/JDBCServlet")
public class JDBCServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public JDBCServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
	}

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

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String user = request.getParameter("username");
		String pwd =  request.getParameter("pwd");
		//PrintWriter out = response.getWriter();
		
		try{
			Class.forName("org.gjt.mm.mysql.Driver");
			String url="jdbc:mysql://localhost:3306/production managerment system";
			String username=user;
			String password=pwd;
			
			Connection cnn=(Connection) DriverManager.getConnection(url, username, password);
			
			Statement stmt=(Statement) cnn.createStatement();
			String sql="select * from book";
			ResultSet rs = stmt.executeQuery(sql);
			//java.sql.PreparedStatement ps = cnn.prepareStatement(sql);
			ArrayList<BookBean> list = new ArrayList<BookBean>();
			while(rs.next()){
				BookBean book = new BookBean();
				book.setProductionname(rs.getString("productionname"));
				book.setProducername(rs.getString("producername"));
				book.setId(rs.getString("id"));
				book.setNum(rs.getString("num"));
				book.setIndate(rs.getString("indate"));
				book.setOutdate(rs.getString("outdate"));
				list.add(book);
			}
			request.setAttribute("list",list);
			rs.close();
			stmt.close();
			//ps.close();
			cnn.close();
		}
		catch(Exception e){
			//out.println("用戶名或密碼錯誤,請重新輸入!");
			RequestDispatcher requestDispatcher = request.getRequestDispatcher("login.jsp");
			requestDispatcher.forward(request, response);
			//out.println("error!");
			return ;
			//e.printStackTrace();
		}
		request.getRequestDispatcher("success.jsp").forward(request, response);
	}

}

今天又完成了一份JSP的作業:Servlet實現JDBC---頁面請求跳轉到Servlet處理。遇到了一些問題,感覺很有必要跟大家一起分享一下。

1、注意在Servlet的web.xml裏配置:

在Servlet的web.xml裏配置的時候要注意<url-pattern></url-pattern>的命名,首先是要加/其次是不要跟你的Servlet同名,具體原理也不太懂,反正如果同名的話老是會出404或者連接請求失敗的界面,當你運行.jsp文件應用到Servlet的時候。

在login.jsp的標籤如下:<form name="form1" method="post" action="JDBC">

而在web.xml的<url-pattern>配置如下:<url-pattern>/JDBC</url-pattern>

2、在Servlet實現JDBC的操作:

首先就是url的問題:我用的是MySQL,格式就是你本機的MySql的端口號+你要連入的數據庫名稱。

String url="jdbc:mysql://localhost:3306/production managerment system";

然後用到DriverManager.getConnection()方法返回一個Connection對象,然後再調用createStatement方法創建Statement對象,最後在ResultSet實現sql查詢語句。

Connection cnn=(Connection) DriverManager.getConnection(url, username, password);

Statement stmt=(Statement) cnn.createStatement();
String sql="select * from book";
ResultSet rs = stmt.executeQuery(sql);

3、對異常進行處理:

連接數據庫,萬一沒有連接成功,拋出了異常,就要在catch塊裏處理了,這裏如果要加入頁面的跳轉就要記得在最後面加入return。

catch(Exception e){
			//out.println("用戶名或密碼錯誤,請重新輸入!");
			RequestDispatcher requestDispatcher = request.getRequestDispatcher("login.jsp");
			requestDispatcher.forward(request, response);
			//out.println("error!");
			return ;
			//e.printStackTrace();
		}

最後附上我的代碼文件,希望能夠幫到有需要的朋友。

最後還有一個小BUG,就是當我想對連接失敗的異常處理時如果在catch塊裏用out.print()方法,那麼我轉發的頁面就會出現亂碼,希望大神們可以解答下我的問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章