作者:dfadsgafg4 | 来源:互联网 | 2023-06-11 17:55
首先按照 SpringMVC框架原理 需要先配置前端控制器
前端控制器配置 DispatcherServlet
前端控制器DispatcherServlet
在web.xml里面配置前端控制器 DispatcherServlet
springMVC
org.springframework.web.servlet.DispatcherServlet
ContextConfigLocation
classpath:SpringMVCBeans.xml
springMVC
*.action
补充:
其实当用户配置好前端控制器(DispatcherServlet)后,不配置处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter),程序照样可以运行。
这是因为SpringMVC会加载SpringMVC依赖jar包下默认的配置文件DispatcherServlet.properties,该文件内部对于处理器映射器和处理器适配器都有默认配置。
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.HandlerExceptiOnResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
配置处理器映射器HandlerMapping
(SpringMVC提供了两种选择)(另外SpringMVC允许用户同时配置这两个处理器映射器(两者可以共存))
1.在SpringMVCBeans.xml配置处理器映射器HandlerMapping (将处理器适配器交由SpringMVC容器管理)
2.在SpringMVCBeans.xml配置(第二种)处理器映射器SimpleHandlerMapping
CelebrityController(这里是bean(controller)的id)
CelebrityController(这里是bean(controller)的id)
处理器适配器配置 HandlerAdapter
处理器映射器(SpringMVC提供了两种选择)
1.在SpringMVCBeans.xml配置处理器适配器HandlerAdapter (将处理器适配器交由SpringMVC容器管理)
@Override
public boolean supports(Object handler) {
return (handler instanceof Controller);
}
public interface Controller {
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
2.第二种处理器适配器,在SpringMVCBeans.xml配置处理器适配器HandlerAdapter
@Override
public boolean supports(Object handler) {
return (handler instanceof HttpRequestHandler);
}
public interface HttpRequestHandler {
void handleRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException;
}
编写Handler(Controller)
//第一种 实现Controller接口
@Component
public class CelebrityController implements Controller {
@Autowired
private CelebrityService celebrityService;
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
Celebrity celebrity = new Celebrity();
celebrity.setID(1);
celebrity.setName("Tim");
ModelAndView modelAndView = new ModelAndView();
try {
Map result = celebrityService.saveAndView(celebrity, celebrity.getID());
Iterator iterator = result.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Entry) iterator.next();
// 指定model
modelAndView.addObject("celebrity", celebrity);
// 指定视图
modelAndView.setViewName("/WEB-INF/jsp/show.jsp");
}
}catch(Exception e){
// 指定model
modelAndView.addObject("error", e);
// 指定视图
modelAndView.setViewName("/WEB-INF/jsp/error.jsp");
}
return modelAndView;
}
}
//第二种 实现HttpRequestHandler接口
@Component
public class CelebrityControllerForHttpRequestHandlerAdapter implements HttpRequestHandler {
@Autowired
private CelebrityService celebrityService;
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Celebrity celebrity = new Celebrity();
celebrity.setID(1);
celebrity.setName("Tim");
try {
Map result = celebrityService.saveAndView(celebrity, celebrity.getID());
Iterator iterator = result.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Entry) iterator.next();
// 指定model
request.setAttribute("celebrity", celebrity);
// 指定视图
request.getRequestDispatcher("/WEB-INF/jsp/show.jsp").forward(request, response);
}
} catch (Exception e) {
// 指定model
request.setAttribute("error", e);
// 指定视图
request.getRequestDispatcher("/WEB-INF/jsp/error.jsp").forward(request, response);
}
}
}
视图编写
编写视图 jsp,pdf、、、
配置视图解析器ViewResolver
在SpringMVCBeans.xml配置视图解析器ViewResolver (将处理器适配器交由SpringMVC容器管理)