1.JDBC访问数据库的流程(写出过程)
(1)注册驱动
//JDBC连接串
private static final String CONN_URL = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=false";
private static final String USERNAME = "root";
private static final String PWD = "13585589602qxh";
Connection conn = null;
Class.forName("com.mysql.jdbc.Driver"); //在类路径中查找驱动入口点类
(2)建立连接(Connection)
conn = DriverManager.getConnection(CONN_URL,USERNAME,PWD);
(3)创建数据库操作对象(PreparedStatement)用于执行SQL语句
(4)执行SQL语句
(5)处理执行结果(ResultSet)
(6)释放资源
public static void releaseRes(Connection conn,PreparedStatement pstmt,ResultSet rset){
try {
if(rset!=null) rset.close();
if(pstmt!=null) pstmt.close();
if(conn!=null) conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2.说明连接池是什么及其作用
3.编程题(30分):写一个完整的网页(web工程),如添加操作
(网页到servlet到service到Dao到mysql;需要用到sql语句;JDBC的存盘,即保存数据;JSP表单验证)
(1)表单验证
<script type="text/javascript">
function checkFrm(){
var frm = document.forms[0];
var stuno = frm.stuno.value;
if(stuno.length!=4){
alert("学生学号长度必须是4位字符!");
frm.stuno.select();
return false;
}
var stumark = frm.stumark.value;
if(isNaN(stumark)){
alert("学生成绩不是一个有效成绩!");
frm.stumark.select();
return false;
}
var mark = parseFloat(stumark);
if(mark<0 || mark>100){
alert("学生成绩必须在0-100之间!");
frm.stumark.select();
return false;
}
}
</script>
(2)JDBC存盘
private static final String ADD_STU = "insert into student values(?,?,?,?,?)";
public void regStu(Student stu) {
Connection conn = DBUtils.getConn();
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(ADD_STU);
pstmt.setString(1, stu.getStuNo());
pstmt.setString(2, stu.getStuName());
pstmt.setString(3, stu.getStuSex());
pstmt.setDouble(4, stu.getStuMark());
//[a,b,c] -> a|b|c
StringBuffer sb = new StringBuffer();
for(String hobby:stu.getStuHobbies())
sb.append(hobby).append("|");
sb.deleteCharAt(sb.length()-1);
pstmt.setString(5, sb.toString());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(e.getMessage().contains("Duplicate entry"))
throw new SmsException("该学号["+stu.getStuNo()+"]已存在,注册失败!");
}finally{
DBUtils.releaseRes(conn, pstmt, null);
}
}
4.JSP转译生成的java类属于什么样的包
JSP转译后会生成一个同名的java文件、一个同名的class文件,位于D:\apache-tomcat-8.5.6\work\Catalina\localhost\sms\org\apache\jsp中。
5.JSP页面中JSP语法以什么为基础
以xml为基础。
6.说明JSP与servlet间的关系
JSP是变相的servlet。
(1)JSP页面调用servlet
①通过表单:<form action=”servlet 访问地址”>……</form>
②通过超链接:<a herf=”servlet 访问地址”(+?要传递的参数)>……</a>
(2)servlet跳转到JSP页面:
①转向:request.requestDispatcher(“load_student.jsp”).forword(request,response);
②重定向:response.sendRedicret(“load_student.jsp”);
(3)servlet调用另一个servlet
同(2)servlet跳转到JSP页面
(4)JSP跳转到另一个JSP:<jsp:forword page=”load_student.jsp”></jsp:forword>
7.说明servlet两种协作方式及其特点
(1)forword协作(转递请求):页面的路径是相对路径。只能跳转到本web应用中的页面上。跳转后浏览器地址栏不会变化。服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给客户端。
(2)include协作(包含响应内容):把另一个servlet处理过后的内容拿过来,包括自身的处理结果都会返回给浏览器。
8.说明过滤器、过滤器链
(1)过滤器:能够对servlet容器的请求和响应对象进行检查和修改。
(2)过滤器链:串联的几个过滤器加上资源(resource)形成一个过滤器链。