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()方法,那麼我轉發的頁面就會出現亂碼,希望大神們可以解答下我的問題。