有类似的主题,但它们都使用html" target="_blank">xml配置文件。我之所以写这个问题,是因为我使用了注释。
我在运行应用程序时遇到问题:
以下是我的代码(跳过包和导入):
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
@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
}
控制器映射到 /Advertisement,所以应用程序应该在URL上可用localhost:8080/Advertisement/但它不是。当我将注释中的映射更改为 "/" - 时,它在localhost:8080/Advertisement/.上可用。怎么会呢?当我将其更改回“/广告”时——同样的问题准确(错误404和异常“未找到带有URI的HTTP请求的映射…”)
那么,我在代码中犯了什么错误?或者问题出在Eclipse/TomCAT/Maven中?
来源 - https://github.com/KostyantynPanchenko/prog.kiev.ua.lesson09.adv
您如何运行应用程序?至少在tomcat中,每个部署的应用程序都从特定的上下文路径提供服务。上下文路径由基本文件名确定,这里更详细。
因此,如果您正在部署广告。war所有对应用程序的请求都将从localhost:8080/Advertiement/提供,即使您将DispatcherServlet和Controller声明为/
您应该更改映射
@Controller
@RequestMapping("/")
public class MainController {
@Autowired
private AdvDAO advDAO;
@RequestMapping("/Advertisement")
public ModelAndView listAdvs() {
return new ModelAndView("index", "advs", advDAO.list());
}
映射器使用注释中的值来匹配请求 URL 的错误,并且它无法匹配最后一个斜杠。请注意,它不应该发生在上面的代码中。
http://some-amazon-link:8080/the-war-name/login 现在我正在纠结如何在Spring MVC项目中添加“/the-war-name/”以及在哪里添加“/the-war-name/”。 它在 null
我有过 我通过这种方式传递profileJson: 但是我的配置文件Json对象具有所有空字段。我应该怎么做才能让Spring解析我的json?
我一直在尝试使用: 使用此链接: 但我有一个错误: 当我换成: 是工作。我能做些什么来和日期一起工作? 谢啦
ControllerClassNameHandlerMapping类是HandlerMapping接口的一个实现,它是通过一个约定来解析请求URL及处理该请求的@Controller控制器实例之间的映射关系。 请看下面一个简单的控制器实现。请注意留意该类的 名称: public class **ViewShoppingCartController** implements Controller {