【问题标题】:Is it necessary to have a controller for every JSP page i have?是否有必要为我拥有的每个 JSP 页面设置一个控制器?
【发布时间】:2014-01-25 04:05:04
【问题描述】:

虽然遵循 Spring MVC 架构,是否有必要为我拥有的每个 jsp 设置一个控制器?例如。是否有必要为 aboutUs 或 PrivatePolicy 或 faqs jsp 页面(其中包含静态数据)设置控制器。我可以让超链接指向下一页吗?

【问题讨论】:

  • 一个控制器可以控制多个jsps,
  • 你是说我应该有一个用于页眉/页脚的控制器吗?
  • 每个逻辑视图应该有一个控制器,例如,如果它是用户管理模块,则可以有多个 jsps(创建、编辑、搜索、删除),并且可以有一个控制器控制每个视图及其周围的数据
  • 安全吗?是否遵循 MVC 规则?
  • 要补充以前的答案,通常让控制器处理与您的域相关的特定功能区域。例如,用户管理可能包括注册、密码重置、更新详细信息等。

标签: java spring model-view-controller


【解决方案1】:

您可以在 Spring XML 配置或 Java 配置中执行以下操作,我更喜欢 Java 配置:

@Configuration
@EnableWebMvc
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class WebHomeConfig extends WebMvcConfigurerAdapter implements
    ApplicationContextAware {

  private ApplicationContext _appContext;


  /*
   * (non-Javadoc)
   * 
   * @see
   * org.springframework.context.ApplicationContextAware#setApplicationContext
   * (org.springframework.context.ApplicationContext)
   */
  @Override
  public void setApplicationContext(ApplicationContext appContext)
      throws BeansException {
    _appContext = appContext;
  }

  @Bean
  public ViewResolver getViewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    return resolver;
  }


  /**
   * Since we don't have any controller logic, simpler to just define
   * controller for page using View Controller. Note: had to extend
   * WebMvcConfigurerAdapter to get this functionality
   * 
   * @param registry
   */
  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("home");
    registry.addViewController("/about").setViewName("aboutUs");
    registry.addViewController("/privacy").setViewName("privacyPolicy");
  }
}

然后在您的 /WEB-INF/views 目录中,您将拥有以下 JSP 文件:

./home.jsp
./aboutUs.jsp
./privacyPolicy.jsp

以下是您在点击这些 URL 时将获得的 JSP 页面:

<baseURL>/ => home.jsp
<baseURL>/about => aboutUs.jsp
<baseURL>/privacy => privacyPolicy.jsp

希望能回答你的问题。

【讨论】:

    【解决方案2】:

    没有。控制器和 JSP 很少是同构的。它通常是一对多的关系,一个控制器协调来自多个 JSP 的单个“渲染”。请记住,JSP 最终是一个 Servlet,并且可能包含其他 Servlet 或 JSP(或调度,或使用 FilterChain)来呈现其响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-06
      • 2017-04-21
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多