URL重写的几种实现方式的总结(3)

通过服务器的404文件没有找到的错误处理,实现url rewrite的功能
本站提供的功能如下
http://www.java2000.net/f29
会被自动转发到
http://www.java2000.net/forumdisplay.jsp?fid=29

因为系统并不存在f29,所以使用了404的错误处理页面来实现这个功能
页面代码如下

Code
1 <%@ page language="java" contentType="text/html; charset=GBK" isErrorPage="true" pageEncoding="GBK"%>
2 <%
3 response.setStatus(HttpServletResponse.SC_OK);
4 String key = (String) request.getAttribute("javax.servlet.forward.servlet_path");
5 if (key != null) {
6 int index = key.lastIndexOf("/");
7 if (index != -1) {
8 key = key.substring(index + 1);
9 if (key.startsWith("f") || key.startsWith("p")) {
10 try {
11 long id = Long.parseLong(key.substring(1));
12 String url = key.startsWith("f") ? "forumdisplay.jsp?fid=" : "viewthread.jsp?tid=";
13 %>
14 <jsp:forward page="<%=url+id%>"></jsp:forward>
15 <%
16 return;
17 } catch (Exception ex) {}
18 }
19 %>
20 <jsp:forward page="<%=response.encodeURL("search.jsp")%>"><jsp:param name="keyword" value="<%=key %>" /></jsp:forward>
21 <%
22 return;
23 }
24 }
25 %>
26 对不起,您请求的页面没有找到!




错误处理页面的制作404,和500
web.xml文件增加如下代码
Code
1 <error-page>
2 <error-code>404</error-code>
3 <location>/building.jsp</location>
4 </error-page>
5 <error-page>
6 <error-code>500</error-code>
7 <location>/error.jsp</location>
8 </error-page>


building.jsp



Code
1 <%@ page language="java" contentType="text/html; charset=GBK" isErrorPage="true" pageEncoding="GBK"%>
2 <%
3 response.setStatus(HttpServletResponse.SC_OK);
4 %>
5 对不起,您请求的页面没有找到!
error.jsp



Code
1 <%@ page language="java" contentType="text/html; charset=GBK" isErrorPage="true" pageEncoding="GBK"%>
2 <%@ page import="java.io.*,java.util.*"%>
3 <%response.setStatus(HttpServletResponse.SC_OK);
4
5 %>
6 <body>
7 程序发生了错误,有可能该页面正在调试或者是设计上的缺陷.
8
9 你可以选择
10 <a href=<%=request.getContextPath()+"/forum/new.jsp" %>>反馈</a>
11 提醒我 或者
12 <a href="javascript:history.go(-1)">返回上一页</a>
13 <hr width=80%>
14 <h2><font color=#DB1260>JSP Error Page</font></h2>
15
16 <p>An exception was thrown: <b> <%=exception.getClass()%>:<%=exception.getMessage()%></b></p>
17 <%
18 System.out.println("Header.");
19 Enumeration<String> e = request.getHeaderNames();
20 String key;
21 while(e.hasMoreElements()){
22 key = e.nextElement();
23 System.out.println(key+"="+request.getHeader(key));
24 }
25 System.out.println("Attribute.");
26 e = request.getAttributeNames();
27 while(e.hasMoreElements()){
28 key = e.nextElement();
29 System.out.println(key+"="+request.getAttribute(key));
30 }
31
32 System.out.println("arameter.");
33 e = request.getParameterNames();
34 while(e.hasMoreElements()){
35 key = e.nextElement();
36 System.out.println(key+"="+request.getParameter(key));
37 }
38 %>
39 111<%=request.getAttribute("javax.servlet.forward.request_uri") %>
40
41 <%=request.getAttribute("javax.servlet.forward.servlet_path") %>
42
43 <p>With the following stack trace:</p>
44 <pre>
45 <%exception.printStackTrace();
46 ByteArrayOutputStream ostr = new ByteArrayOutputStream();
47 exception.printStackTrace(new PrintStream(ostr));
48 out.print(ostr);
49 %>
50 </pre>
51 <hr width=80%>
52 </body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值