FilterDispather.java
上传用户:hensond
上传日期:2021-12-27
资源大小:817k
文件大小:2k
源码类别:

软件工程

开发平台:

Java

  1. package com.company.controller;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.RequestDispatcher;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import com.cbf4life.view.ViewManager;
  13. import com.company.action.ActionDispather;
  14. import com.company.action.IActionDispather;
  15. import com.company.helper.ValueStackHelper;
  16. import com.company.valuestack.ValueStack;
  17. /**
  18.  * @author cbf4Life cbf4life@126.com
  19.  * I'm glad to share my knowledge with you all.
  20.  */
  21. public class FilterDispather implements Filter {
  22. //定义一个值栈辅助类
  23. private ValueStackHelper valueStackHelper = new ValueStackHelper();
  24. //应用IActionDispather
  25. IActionDispather actionDispather = new ActionDispather();
  26. //server销毁时要做的事情
  27. public void destroy() {
  28. }
  29. //过滤器必须实现的
  30. public void doFilter(ServletRequest request, ServletResponse response,
  31. FilterChain chain) throws IOException, ServletException {
  32. //转换为HttpServletRequest
  33. HttpServletRequest req = (HttpServletRequest)request;
  34. HttpServletResponse res = (HttpServletResponse)response;
  35. //传递到其他过滤器处理
  36. chain.doFilter(req, res);
  37. //获得从HTTP请求的ACTION名称
  38. String actionName = getActionNameFromURI(req);
  39. //对ViewManager的应用
  40. ViewManager viewManager = new ViewManager(actionName);
  41. //所有参数放入值栈
  42. ValueStack  valueStack = valueStackHelper.putIntoStack(req);
  43. //把所有的请求传递给ActionDispatcher处理
  44. String result =actionDispather.actionInvoke(actionName);
  45. String viewPath = viewManager.getViewPath(result);
  46. //直接转向
  47. RequestDispatcher rd = req.getRequestDispatcher(viewPath);
  48. rd.forward(req, res);
  49. }
  50. public void init(FilterConfig arg0) throws ServletException {
  51. /*
  52.  * 1、检查XML配置文件是否正确
  53.  * 2、启动监控程序,观察配置文件是否正确
  54.  */
  55. }
  56. //通过url获得actionName
  57. private String getActionNameFromURI(HttpServletRequest req){
  58. String path = (String) req.getRequestURI();
  59. String actionName = path.substring(path.lastIndexOf("/") + 1,path.lastIndexOf("."));
  60. return actionName;
  61. }
  62. }