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>