Spring MVC最核心的类:
- SpringMvc MVC设计模式包括 Controller(控制层) Model(数据) View(视图)
图片中的英文分别表示为:
1. DispatcherServlet(前端控制器)
2.HandlerMapping(处理器映射器)
3.ModelAndView(数据和视图)
4.HandlerAdapter(适配器)
5.HttpMessageConverter(消息转换器)
6.ViewResolver(视图解析器)
7.Handler(处理器)
基于注解的控制器:1.Controller和View之间的映射
2.入参处理
3.出参处理
Controller和View之间的映射:
1.@Controller
2.@RequestMapping(@GetMapping、@PostMapping、@DeleteMapping) 3. <mvc : annotation-driver/>
入参处理: 1.Servlet API入参
2.@RequestParam(name,value required,defaultValue)
3.@ModelAttribute
出参处理:ModelAndView Model Map
1.首先导入springMvc的jar
<!--spring的依赖,springmvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency>
2.然后配置web.xml
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
3.创建控制器(controller)
【1】创建一个普通类,在这个类上加上@controller.
【2】在类中创建方法,使用@RequestMapping("url")我们需要这个方法和URL形成映射。
【3】方法的返回值:对应一个ModelAndView(数据和逻辑视图名)。
4.一般视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property><!--prefix前缀-->
<property name="suffix" value=""></property><!--suffix后缀-->
</bean>
5.//上传 @RequestMapping("/uploadPage") public String uploadPage(){ return "upload.jsp"; } @RequestMapping("/upload") @ResponseBody public String upload(String username, MultipartFile photo,HttpServletRequest request){ String fileType=photo.getOriginalFilename(); int index=fileType.lastIndexOf(".");//最后一个点的下标 fileType=fileType.substring(index); String path=request.getSession().getServletContext().getRealPath("static"+File.separator+"uploadfiles"); long filename=System.currentTimeMillis();//时间戳 System.out.println(path); System.out.println(fileType); System.out.println(path+"\\"+filename+fileType); File file=new File(path+"\\"+filename+fileType); try { photo.transferTo(file); }catch (IOException e){ e.printStackTrace(); } return "上传成功"; }
二、1.解决视图到控制层的date类型的转换问题
2.解决Ajax请求的返回值问题 可以用@ResponseBody将数据写到响应体中
3.解决视图层到控制层的中文乱码问题,可以用以下代码来解决:
<!--页面中输入的中文,调到后端,出现乱码的解决方式--> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4.解决Ajax请求返回值的乱码和日期转换问题,控制层到视图层
注意:不要重复复制多个标签,如果重复,它只会执行最后一个标签
5.拦截器
<!--拦截--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/hello/**"/><!--拦截hello底下所有的--> <mvc:exclude-mapping path="/hello/hello04"/> //排除,除了hello04都能进到主面 <bean class="com.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
注意:http://localhost:8080/xinxi2/hello/hello01分别代表的是
//http协议
//localhost ip或者域名 应用服务器的(tomcat)
//8080 服务器的端口,tomcat 默认值是80
//xinxi2 应用服务下某个app的上下文
//hello/hello01 app中某个资源的路径