page指令語法:<%@page 屬性=”內容“%>
常用:contentType,import,pageEncoding

例子,設置MIME屬性,如果使用一些高版本的tomcat,可能自動設置編碼,但是為了保證程序不出問題,一定要設置MIME類型:
<%@ page language="java" contentType="text/html;charset=GBK"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培訓</title></head> <body> <center> <h2>歡迎大家光臨 MLDN !</h2> <h3>網址:www.MLDNJAVA.cn</h3> </center> </body> </html>
為什么htm和html都可以識別,是因為web.xml有這樣的解析:
<mime-mapping> <extension>htm</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping>
- 如果想讓jsp變種格式顯示, 就更改MIME就可以,比如word:
<%@ page language="java" contentType="application/msword;charset=GBK"%>
- 如果想改名字的話,這樣的話,打開jsp文件就會顯示下載mldn.doc:
<%
response.setHeader("Content-Disposition","attachement;filename=mldn.doc") ;
%>
- contentType主要功能就是設置MIME,之后的charset是指定編碼,也可以通過pageEncoding來指定編碼,比較常見:
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
兩種方式的區別:如果pageEncoding存在的話,就以它為主,如果不存在,再找charset,如果都不存在,就默認ISO8859-1.
如果一個jsp文件只是需要按照text/html風格顯示的話,則只需要指定一個pageEncoding就可以了。
- 錯誤頁的設置
一些網站,如果出現錯誤,會統一跳轉到一個頁面上顯示,而且會提示,對不起,請聯系管理員,這就是錯誤頁的功能。
完成錯誤頁的操作,需要滿足2個條件:
1. 指定錯誤出現的跳轉頁,通過errorPage屬性指定
2. 錯誤處理也必須有明確的標識,通過isErrorPage屬性指定

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <%@ page errorPage="error.jsp"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培訓</title></head> <body> <% int result = 10 / 0 ; %> </body> </html>
error.jsp:
語句response.setStatus(200) ;是為了聲明此文件是正常的可以處理錯誤的頁面,避免有些時候無法跳轉的情況
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <%@ page isErrorPage="true"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培訓</title></head> <body> <% response.setStatus(200) ; %> <h1>程序出現了錯誤</h1> </body> </html>
以上發現,地址欄地址沒有發生改變,但是內容改變了,此種方式成為服務器端跳轉。
但是,這樣編寫太麻煩,最經常出現的問題:404,500,而且程序也可以出現異常,此時可以集中處理這些問題,這樣就需要修改web.xml文件了。D:\Workspace\WEB-INF\web.xml, 在 </web-app> 之前加入:
<error-page> <error-code>500</error-code> <location>/basic_page/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/basic_page/error.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/basic_page/error.jsp</location> </error-page>
重啟服務器后,輸入http://localhost:8080/wly/basic_page/ss驗證,即可彈出error.jsp錯誤頁面
- page指令存在import屬性,所以導包就可以正確使用,在整個page指令的屬性中,只有import可以多次使用,其他的屬性只能設置一次
數據庫的連接操作:
/*======================= 刪除數據庫 =======================*/ DROP DATABASE IF EXISTS mldn ; /*======================= 創建數據庫 =======================*/ CREATE DATABASE mldn ; /*======================= 使用數據庫 =======================*/ USE mldn ; /*======================= 刪除數據表 =======================*/ DROP TABLE IF EXISTS emp ; /*======================= 創建數據表 =======================*/ CREATE TABLE emp( empno INT(4) PRIMARY KEY, ename VARCHAR(10), job VARCHAR(9), hiredate DATE, sal FLOAT(7,2) ) ; /*======================= 插入測試數據 =======================*/ INSERT INTO emp (empno,ename,job,hiredate,sal) VALUES (6060,'李興華','經理','2001-09-16',2000.30) ; INSERT INTO emp (empno,ename,job,hiredate,sal) VALUES (7369,'董鳴楠','銷售','2003-10-09',1500.90) ; INSERT INTO emp (empno,ename,job,hiredate,sal) VALUES (8964,'李祺','分析員','2003-10-01',3000) ; INSERT INTO emp (empno,ename,job,hiredate,sal) VALUES (7698,'張惠','銷售','2005-03-12',800) ; INSERT INTO emp (empno,ename,job,hiredate,sal) VALUES (7782,'楊軍','分析員','2005-01-12',2500) ; INSERT INTO emp (empno,ename,job,hiredate,sal) VALUES (7762,'劉明','銷售','2005-03-09',1000) ; INSERT INTO emp (empno,ename,job,hiredate,sal) VALUES (7839,'王月','經理','2006-09-01',2500) ;
需要注意的是,mysql數據庫連接的時候需要額外的驅動程序mysql-connector-java-5.1.36-bin.jar
放入:D:\apache-tomcat-7.0.57\lib ,然后重啟服務器
lit.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import="java.sql.*"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培訓</title></head> <body> <%! public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ; public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ; public static final String DBUSER = "root" ; public static final String DBPASS = "********" ; %> <% Connection conn = null ; PreparedStatement pstmt = null ; ResultSet rs = null ; %> <% try{ Class.forName(DBDRIVER) ; conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ; String sql = "SELECT empno,ename,job,sal,hiredate FROM emp" ; pstmt = conn.prepareStatement(sql) ; rs = pstmt.executeQuery() ; %> <center> <table border="1" width="80%"> <tr> <td>雇員編號</td> <td>雇員姓名</td> <td>雇員工作</td> <td>雇員工資</td> <td>雇佣日期</td> </tr> <% while(rs.next()){ int empno = rs.getInt(1) ; String ename = rs.getString(2) ; String job = rs.getString(3) ; float sal = rs.getFloat(4) ; java.util.Date date = rs.getDate(5) ; %> <tr> <td><%=empno%></td> <td><%=ename%></td> <td><%=job%></td> <td><%=sal%></td> <td><%=date%></td> </tr> <% } %> </table> </center> <% }catch(Exception e) { System.out.println(e) ; }finally{ rs.close() ; pstmt.close() ; conn.close() ; // 如果直接關閉連接也可以 } %> </body> </html>
