java - Spring MVC java配置类没有调用,所以我收到404错误
问题描述
我正在 100% java 代码模式下实现 spring MVC 这是我写的代码
索引.jsp
<!-- forward to home page -->
<jsp:forward page="home.htm"></jsp:forward>
主页.jsp
<!-- header page -->
<jsp:include page="header.jsp"></jsp:include>
<h1>Hi this is Home Page</h1>
<!-- footer page -->
<jsp:include page="footer.jsp"></jsp:include>
这是我的调度程序 servlet 初始化程序类
package com.example.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ExampleAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// return rootapp config class
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
// return webmvc config class
return new Class[] {ExampleConfig.class};
}
@Override
protected String[] getServletMappings() {
//retunr url
return new String[] {"*.htm"};
}
}//ExampleAppInitializer
这是spring web MVC配置类代码
package com.example.config;
import java.util.Properties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.mvc.ParameterizableViewController;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
@Configuration
@ComponentScan(basePackages="com.example.*")
public class ExampleConfig extends WebMvcConfigurerAdapter{
@Bean(id="createHandlerMapping")
public HandlerMapping createHandlerMapping() {
System.out.println("createHandlerMapping ");
// lcal variable declarations
SimpleUrlHandlerMapping simpleUrlHandlerMapping = null;
Properties mappingProperties = null;
// create object of handler
simpleUrlHandlerMapping = new SimpleUrlHandlerMapping();
mappingProperties = new Properties();
// mapping the urls
mappingProperties.put("/home.htm", "homePageController");
simpleUrlHandlerMapping.setMappings(mappingProperties);
return simpleUrlHandlerMapping;
}// createHandlerMapping
@Bean(id="homePageController")
public Controller homePageController() {
System.out.println("homePageController ");
// local variable declarations
ParameterizableViewController homePageController = null;
// create the objects
homePageController = new ParameterizableViewController();
homePageController.setViewName("home");
// return homePageController
return homePageController;
}// homePageController
@Bean(id="getViewName")
public ViewResolver getViewName() {
System.out.println("getViewName ");
// local variable declarations
InternalResourceViewResolver getViewName = null;
// create the objects
getViewName = new InternalResourceViewResolver();
// setting the paths
getViewName.setPrefix("/WEB-INF/view/");
getViewNa me.setSuffix(".jsp");
// return
return getViewName;
}// getViewName
}// ExampleConfig
所以当我将它部署在 tomcat 8 服务器中时,我收到 404 错误,例如http://localhost:7979/example/ /example/home.htm not found 谁能帮我解决这个问题
解决方案
首先你需要改变这个方法
@Override
protected String[] getServletMappings() {
//retunr url
return new String[] {"*.htm"};
}
对此
@Override
protected String[] getServletMappings() {
//retunr url
return new String[] {"/"};
}
类 WebMvcConfigurerAdapter 已弃用。从 5.0 开始,WebMvcConfigurer 具有默认方法(通过 Java 8 基线实现),无需此适配器即可直接实现
在这里,不要使用 WebMvcConfigurerAdapter,因为它在 Spring 5 及更高版本中已弃用。(我想你参考了一个旧教程)
public class ExampleConfig extends WebMvcConfigurerAdapter{
而不是那个配置尝试这种配置
@Configuration
@EnableWebMvc
@ComponentScan("com.example") //no need to put .* after package name
public class ExampleConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
上面的代码对我有用,让我知道发生了什么错误,我建议你参考这个 Java 配置示例
推荐阅读
- excel - 将 xlsheet 保存为 pdf = 文档未保存
- reactjs - 异步 Firebase 引用并在反应中引用所述参考值
- angular - 在Angular 6中单击添加css类
- c++ - 将对象传递给成员函数时,成员函数的行为会发生变化吗?
- kotlin - HOCON 配置文件动态替换
- jquery - jQuery cdn 给出错误的幻数 jquery.css 文件
- mongodb - 如何将 mongodb 与 reactjs 连接?
- javascript - 在我的反应应用程序中安装组件之前,我需要获取会话 ID?
- html - 仅使用可变宽度 CSS 从右到左为 div 设置动画
- c# - 如何添加列表
反对字典