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()方法,那么我转发的页面就会出现乱码,希望大神们可以解答下我的问题。