【问题标题】:SprinMVC Control flowsSprinMVC 控制流程
【发布时间】:2016-03-09 11:52:08
【问题描述】:

我想在 Spring MVC 中重写 servlet 控制流,这是我的 doGet 进入 Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String action = request.getParameter("action");

        String path = request.getParameter("path");

        if (path != null && path.equals("register")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/registeruser.jsp");
            view.forward(request, response);
        } else if (path != null && path.equals("usermang")) {
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/manageuser.jsp");
            view.forward(request, response);
        }

    else {
            PrintWriter out = response.getWriter();
            out.print("Served at: " + request.getContextPath());
            RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/system/index.jsp");
            view.forward(request, response);
        }
    }

我想使用模型和视图将上面的 doGET 转换为 Spring RequestMapping 示例

@RequestMapping(value ="/grcon" ,method = RequestMethod.GET)
    public ModelAndView getGrcon()

        ModelAndView modegeron = new ModelAndView("index");

if (path != null && path.equals("register")) {
      view = request.getRequestDispatcher("/WEB-INF/views/system/registeruser.jsp");

        return modegeron;

    }
}

【问题讨论】:

  • 很难理解你想要做什么,因为标题和描述都没有提出任何问题。在 Spring MVC 中有一个现成的 servlet,称为 DispatcherServlet,您应该使用它。逻辑由控制器处理。
  • 请浏览Spring MVC文档。一些有用的博客链接mkyong.com/tutorials/spring-mvc-tutorials。你应该可以得到这个

标签: java spring spring-mvc model-view-controller


【解决方案1】:

您正在让它变得复杂,使用弹簧的力量为您处理复杂性。

对于初学者,请在配置中添加 InternalResourceViewResolver,这将处理视图到资源的转换。

<bean id="viewResolver" class="InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/system/" />
    <property name="suffix" value=".jsp" />
</bean>

接下来将params 元素添加到您的@RequestMapping 以进一步规范映射。

@RequestMapping(value ="/grcon", method = RequestMethod.GET, params="path=register")
public String register() {
    return "registeruser";
}

@RequestMapping(value ="/grcon", method = RequestMethod.GET, params="path= usermang")
public String manageUser() {
    return "manageuser";
}

@RequestMapping(value ="/grcon", method = RequestMethod.GET)
public String index() {
    return "index";
}

或者使用具有@RequestParam 的方法并返回适当的视图。做String比较时的小技巧把静态值放在第一位,为您节省null检查。

@RequestMapping(value ="/grcon", method = RequestMethod.GET)
public String register(@RequestParam(value="path", required=false) String path) {
    if ("register".equals(path) ) {
        return "registeruser";
    } else if ("usermang".equals(path)) {
        return "manageuser";
    }
    return "index";
}

但是通常您还想对Model 做一些准备,所以第一个可能更适用。

【讨论】:

    【解决方案2】:
    @RequestMapping(value ="/grcon/{path}" ,method = RequestMethod.GET)
    public ModelAndView getGrcon(@PathParam String path)
    
        ModelAndView modegeron = null;
    
        if (path != null && path.equals("register")) {
           modegeron = new ModelAndView("registeruser");
        } else if (path != null && path.equals("usermang") {
           modegeron = new ModelAndView("manageuser");
        } else {
           modegeron = new ModelAndView("index");
        }
    
        return modegeron;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-23
      • 2013-01-15
      • 2012-09-21
      • 2018-02-07
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多