本帖最后由 xjsp316 于 2012-05-09 16:27:56 编辑

解决方案 »

  1.   

    package com.mvc.one.filter;import java.io.IOException;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    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 com.mvc.one.util.ActionFactory;
    import com.mvc.one.util.parse.ParseXML;
    import com.mvc.one.util.reflex.ReflexClass;public class StrutsFilter implements Filter{ public void destroy() {
    System.out.println("容器销毁");
    } public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest)arg0;
    HttpServletResponse response = (HttpServletResponse)arg1;
    //获得用户请求的地址
    String rquestURL = request.getServletPath().substring(1);
    // map 存储enume集合中的属性 
    Map <String,String> map = new HashMap <String,String>();
    //判断用户请求的地址是否在我们的核心过滤器中
    ActionFactory af = (ActionFactory) ParseXML.map.get(rquestURL);
    //如果核心过滤器中存在用户请求的utl则开始获得前台提交的属性
    if(af != null){
    //获取前台属性的集合
    Enumeration <?> enume = request.getParameterNames();
    //循环取出enume中的属性
    while(enume.hasMoreElements()){
    //获得前台属性的name
    String name = enume.nextElement().toString();
    //获得前台提交属性name对应的value
    String value = request.getParameter(name);
    //将实行的name对应的value放入map
    map.put(name, value);
    System.out.println(name+""+value);
    }//while结束
    //如果核心过滤器中不存在用户请求的utl则直接重新定向到前台
    }else{
    response.sendRedirect("/index.jsp");
    }//if结束
    try{
    //获得处理后返回的结果集
    String resultName = new ReflexClass().resultString(af.getTargetClass(),af.getMethod(),map);
    System.out.println(resultName);
    //通过结果集去Map中找到对应的url
    String result = af.getResultMap().get(resultName);
    //转发到结果页面
    request.getRequestDispatcher(result).forward(request, response);
    }catch(Exception e){
    e.printStackTrace();
    }

    } public void init(FilterConfig arg0) throws ServletException {
    System.out.println("容器启动");
    try{
    new ParseXML();
    } catch (Exception e){
    e.printStackTrace();
    }
    }
    }
      

  2.   

    我是通过过滤器来截获请求的,这是前台页面
    <%@ page pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>首页</title>
      </head>
      
      <body>
        <form action="LoginAction" method="post">
         用户名:<input type="text" name="users.username" /><br/>
         密&nbsp;码:<input type="password" name="users.password"/><br/>
         <input  type="submit" value="登  陆"/>
        </form>
      </body>
    </html>
      

  3.   

    我现在在反射中能获得前台提交的单个属性例如username,password.但是如果前台提交的是一个对象我要怎么通过反射获得例如users.username,users.password.我要怎么在自己的mvc中就是在ReflexClass中反射或者用户提交的users对象,并给对象的users.username和users.password赋值呢?各位大侠求解啊。刚用反射,还不是很懂。
      

  4.   

    提交对象也是“链”操作。对象名.属性名。OGNL会做相应处理的 。