3.springmvc
3.1.基础xml配置
web.xml
<!--前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-web.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
springmvc配置文件
spring-web.xml
<!--ioc注解扫描-->
<context:component-scan base-package="com.ujiuye"/>
<!--mvc注解驱动-->
<mvc:annotation-driven/>
<!--试图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" name="resolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
编写controller
@RequestMapping("/hello")
public String hello(){
log.info("{}","hello");
return "index";
}
3.2.基础注解配置
webApp启动器
/**
* 前端控制器
* */
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { MyWebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
springmvc配置类
/**
* springmvc配置类
* */
@Configuration
@EnableWebMvc //mvc注解驱动
@ComponentScan({"com.ujiuye.controller","com.ujiuye.exception"}) //组件扫描
public class MyWebConfig implements WebMvcConfigurer {
//试图解析器
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
//静态资源处理
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
编写controller
@Controller
public class HelloController {
@GetMapping("/demo1")
public String demo1(){
System.out.println("hello....");
return "index";
}
@GetMapping("/demo2")
public String demo2() throws WebException {
throw new WebException("对不起!服务器很忙,程序员努力抢修中。。。");
}
}
3.3.全局异常处理器
自定义异常类
public class WebException extends Exception {
public WebException(String message) {
super(message);
}
}
定义异常处理器
/**
* 全局异常处理器
* */
@Component
public class WebHandlerExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("msg",e.getMessage());
mv.setViewName("WEB-INF/pages/error");
return mv;
}
}
将此组件加到容器中
@Component +组件扫描
3.4.文件上传
文件解析器(web启动类)
//文件解析器
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(new MultipartConfigElement("d:\\"));
}
前台代码
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
controller
@Controller
public class UploadController {
@PostMapping("/upload")
@ResponseBody
public String upload(MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
file.transferTo(new File("d:\\temp\\"+fileName));
return "ok!";
}
}
3.5.restful风格
添加restful支持
//支持restful
@Override
protected Filter[] getServletFilters() {
return new Filter[]{new CharacterEncodingFilter(),new HiddenHttpMethodFilter()};
}
使用
<a href="/demo3/100">restful方式的get请求</a>
@GetMapping("/demo3/{id}")
@ResponseBody
public String demo3(@PathVariable("id") Integer id){
System.out.println("demo3..."+id);
return "ok";
}
3.6.拦截器
定义拦截器
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截到。。。。");
return true;
}
}
添加到容器
//添加拦截器
@Bean
public HandlerInterceptor myInterceptor(){
return new MyInterceptor();
}
springmvc配置类配置
//拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor()).addPathPatterns("/**");
}