配置404、Error页面
假设你jsp项目里java代码片出现某些问题,产生异常等等之类的,网页总是显示一堆英文提示,那你就等着电话被客户打爆吧......开玩笑的,举个简单的例子,你代码片中做了一个简单的除法,但是被除数是0,运行时就会产生错误页面
<!--divide.jsp-->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'divide.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
int x = 1 / 0;
%>
</body>
</html>
还有一种错误,就是用户输入错了网页地址,本来是divide.jsp,用户不知道就输成了什么地址(永远把用户想的特别弱智,这是一个写程序的人应该做的),最后结果就是用户访问半天进不去,以为你服务器崩溃了,你电话又被打爆了......
上述两个问题,你电话都被打爆了,这应该是任何程序员都不希望发生的事情,所以,解决办法就来了,如果出现上述两个错误,我们应该修改用户看到的东西,相当于一个监听自动执行的超链接,当发生某件事的时候,立刻执行跳转到某个页面,所以我们先写两个页面,分别是404页面和代码出错的页面
<!-- page404.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'page404.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>页面走失了,再逛逛</h1>
</body>
</html>
<!-- error.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'Error.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>系统故障:联系我,12345678910</h1>
</body>
</html>
接下来需要修改WebRoot/WEB-INF/web.xml文件,将这两个网页配置进去
<!-- web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/page404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/Error.jsp</location>
</error-page>
</web-app>
最主要的是那两段error-page,照着直接写就行了,然后重启Tomcat,访问网页,就能达到想要的效果了
把网页变成一个可下载的excel表格形式
我们知道,excel文件的后缀名一般是xls或其他格式,我们要找到这个xls对应的MIME类型,通过MIME参考手册,xls对应的MIME类型是application/vnd.ms-excel,然后我们在网页中写一个表格,并且引入
<%@ page contentType = "application/vnd.ms-excel" %>
直接给出示例代码
<!-- excel.jsp -->
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType = "application/vnd.ms-excel" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'excel.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<table>
<thead>
<tr>
<th>学号</th><th>姓名</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td><td>张三</td>
</tr>
<tr>
<td>1</td><td>张三</td>
</tr>
<tr>
<td>1</td><td>张三</td>
</tr>
<tr>
<td>1</td><td>张三</td>
</tr>
<tr>
<td>1</td><td>张三</td>
</tr>
</tbody>
</table>
</body>
</html>
当你访问这个网页的时候,就会自动下载一个.jsp文件,下载下来之后把后缀名改成.xls,就变成excel表了,只不过打开以后,里面的中文是乱码,这个后面在讲如何解决,这里先会用即可
jsp:include
不知道你有没有见过这样的网站,网站有一个导航栏,点击导航栏里面的超链接,能访问到另一个页面,这个页面也有导航栏,和之前的导航栏是一模一样的,如果是你来写这个网页,你会选择同样的导航栏,所有的jsp文件都复制粘贴一遍,还是把这个导航栏样式单独写成一个jsp,让其他jsp直接"包含"进来
在写导航栏之前,先了解一下jsp:include和include file的用法,我先写两个网页,一个叫include.jsp,一个叫included.jsp,然后在include.jsp中将included.jsp包含进来
<!-- include.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'include.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%@ include file = "included.jsp" %>
</body>
</html>
<!-- included.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
这是被包含的页面
<%
int i = 0;
%>
访问include.jsp网页,就能看到网页上有一句话“这是被包含的页面”,这里注意一点,我把included.jsp中很多的内容都删了,包括String path和String basePath,必须删除,不删除会报错,这与包含的方式有关,include file这种是静态包含,也就是相当于将included.jsp里的全部内容复制到include.jsp中,然后随着include.jsp一起翻译为.class字节码,试问,你写java程序,能定义两个同名的变量吗?当然不能,所以jsp中也不能,如果有就会报错。
但是,有静态包含就有动态包含,动态包含的方式就是利用jsp:include
<!-- included.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'include.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<jsp:include page="included.jsp"></jsp:include>
</body>
</html>
用了这种动态包含后,不管你included.jsp里有多少跟include.jsp重复的变量,都不会报错。动态包含的执行过程是分别将包含与被包含的jsp文件分别翻译成各自的字节码.class,然后调用,所以不会有冲突
最后利用bootStrap做一个导航栏(有点丑)
<!-- nav.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'a.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="ReSources/css/bootstrap.min.css">
</head>
<body>
<ul class = "nav nav-pills nav-justified">
<li role="presentation" class = "active"><a href = "a.jsp">a</a></li>
<li role="presentation"><a href = "b.jsp">b</a></li>
<li role="presentation"><a href = "c.jsp">c</a></li>
<li role="presentation"><a href = "d.jsp">d</a></li>
<li role="presentation" class="disabled"><a href="">Disabled link</a></li>
<li role="presentation" class="disabled"><a href="">Disabled link</a></li>
</ul>
</body>
</html>
<!-- a.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'a.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<jsp:include page = "nav.jsp"></jsp:include>
a
</body>
</html>
<!-- b.jsp -->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'a.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<jsp:include page = "nav.jsp"></jsp:include>
b
</body>
</html>
c,d也一样,就是改一下里面显示的字母就行了,显示结果如下