各位前辈:
由于小弟想用model2实现一个过滤器,具体的业务是:将用户输入的url跟已经保存在xml文件中的合法url进行匹配,处理结果是:如果匹配成功,则跳转至用户指定的页面;如果没有匹配成功,则跳转到指定的错误页面,提示用户url输入有误,现在那程序说话:
1、这是过滤器的实现:
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class DispatcherToIndex implements Filter {
public void destroy() {
// TODO Auto-generated method stub
System.out.println("销毁");
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String uri = request.getRequestURI(); // 获取用户输入的uri地址
String path = request.getContextPath();
uri = uri.substring(path.length());
System.out.println(uri);
// 读取xml文件
File f = new File("F://软件工程//software//jsp//prjShoppingV4.17//url.xml");
SAXReader reader = new SAXReader();
try {
Document doc = reader.read(f); // 将读取的xml文件读取成文档对象
Element root = doc.getRootElement(); // 得到根节点;
Element foo;
for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
foo = it.next();
if (uri.endsWith(foo.elementText("path"))) {
// 如果输入的页面在解析出来的范围中,则显示正确信息
request.getRequestDispatcher("/index.jsp");
chain.doFilter(request, response);
} else if(!uri.contains(foo.elementText("path"))) {
// 如果不在范围之内,则跳转至错误页面
request.setAttribute("errorMsg", "访问页面出错");
request.getRequestDispatcher("error.jsp").forward(request, response);
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(uri);
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("初始化");
}
}
2、配置过滤器
<!-- 这是过滤非法url的过滤器 -->
<filter>
<filter-name>DispatcherToIndex</filter-name>
<filter-class>com.fendou.system.filter.DispatcherToIndex</filter-class>
</filter>
<filter-mapping>
<filter-name>DispatcherToIndex</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>