gpt4 book ai didi

java - Spring MVC中 Controller 映射的问题

转载 作者:行者123 更新时间:2023-11-28 23:25:15 25 4
gpt4 key购买 nike

类似的题目也有,不过都是用的xml配置文件。我写这个问题的原因是我正在使用注释。

我在运行我的应用程序时遇到问题:

  • 收到“警告 org.springframework.web.servlet.PageNotFound - 否为带有 URI 的 HTTP 请求找到的映射……”在尝试设置时 Spring 小服务程序
  • 尝试在服务器上运行时出现错误 404

这是我的代码(跳过包和导入):

1) 初始化器

public class WebInitializer implements WebApplicationInitializer{

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx =
new AnnotationConfigWebApplicationContext();
ctx.register(AppConfig.class);

ctx.setServletContext(servletContext);

ServletRegistration.Dynamic servlet =
servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}

2) 应用配置

@Configuration
@ComponentScan("ua.kiev.prog")
@EnableWebMvc
public class AppConfig {
@Bean
public EntityManager entityManager() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("AdvJPA");
return emf.createEntityManager();
}

@Bean
public AdvDAO advDAO() {
return new AdvDAOImpl();
}

@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/pages/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
resolver.setOrder(1);
return resolver;
}

@Bean
public CommonsMultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
}

3) Controller

@Controller
@RequestMapping("/Advertisement")
public class MainController {

@Autowired
private AdvDAO advDAO;

@RequestMapping("/")
public ModelAndView listAdvs() {
return new ModelAndView("index", "advs", advDAO.list());
}

@RequestMapping(value = "/add_page", method = RequestMethod.POST)
public String addPage(Model model) {
return "add_page";
}

@RequestMapping(value = "/search", method = RequestMethod.POST)
public ModelAndView search(@RequestParam(value="pattern") String pattern) {
return new ModelAndView("index", "advs", advDAO.list(pattern));
}

// more code goes here
}

Controller 映射到/Advertisement,因此应用程序应该在 URL localhost:8080/Advertisement/可用,但事实并非如此。当我将注释中的映射更改为“/”时 - 它在 localhost:8080/Advertisement/变得可用。怎么会这样?当我将其改回“/Advertisement”时 - 出现同样的问题(错误 404 和异常“未找到具有 URI 的 HTTP 请求的映射......”)

那么,我的代码哪里出错了?或者问题出在 Eclipse/TomCat/Maven 中?

来源 - https://github.com/KostyantynPanchenko/prog.kiev.ua.lesson09.adv

最佳答案

你应该改变映射

@Controller
@RequestMapping("/")
public class MainController {

@Autowired
private AdvDAO advDAO;

@RequestMapping("/Advertisement")
public ModelAndView listAdvs() {
return new ModelAndView("index", "advs", advDAO.list());
}

映射器使用注释中的值来匹配请求 URL 的错误,它无法匹配最后一个斜杠。注意,它不应该发生在上面的代码中。

关于java - Spring MVC中 Controller 映射的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com