行业知识
SpringMVC基础
1.SpringMVC概述
三层架构
表���层:负责数据展示
业务层:负责业务处理
数据层:负责数据操作
MVC(Model View Controller),一种用于设计创建Web应用程序表现层的模式
Model(模型):数据模型,用于封装数据
View(视图):页面视图,用于展示数据
jsp
html
Controller(控制器):处理用户交互的调度器,用于根据用户需求处理程序逻辑
Servlet
SpringMVC
SpringMVC简介
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
SpringMVC的优点
使用简单
性能突出(相比现有的框架技术)
灵活性强
2.入门案例
入门案例工作流程分析
服务器启动
加载web.xml中DispatcherServlet
读取spring-mvc.xml中的配置,加载所有com包中所有标记为bean的类
读取bean中方法上方标注@RequestMapping的内容
处理请求
DispatcherServlet配置拦截所有请求 /
使用请求路径与所有加载的@RequestMapping的内容进行比对
执行对应的方法
根据方法的返回值在webapp目录中查找对应的页面并展示
实现
4.0.0 com SpringMVCrumen 1.0-SNAPSHOT war junit junit 4.13.2 test org.springframework spring-test 5.1.19.RELEASE org.springframework spring-context 5.1.9.RELEASE org.springframework spring-jdbc 5.3.22 com.alibaba druid 1.2.16 org.mybatis mybatis 3.5.13 mysql mysql-connector-java 8.0.33 org.mybatis mybatis-spring 2.0.7 org.aspectj aspectjweaver 1.9.4 javax.servlet javax.servlet-api 3.1.0 provided javax.servlet.jsp jsp-api 2.1 provided org.springframework spring-web 5.1.9.RELEASE org.springframework spring-webmvc 5.1.9.RELEASE 8 8 UTF-8 org.apache.tomcat.maven tomcat7-maven-plugin 2.1 80 /
package com.web;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class UserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("user servlet running..."); req.getRequestDispatcher("success.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); }} package com.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class UserController { @RequestMapping("/save") public String save(){ System.out.println("user mvc controller is running..."); return "success.jsp"; }} web.xml
DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath*:spring-mvc.xml DispatcherServlet /
success.jsp
第一个spring-mvc页面
3.SpringMVC技术架构
六大核心组件
DispatcherServlet:前端控制器, 是整体流程控制的中心,由其调用其它组件处理用户的请求, 有
效的降低了组件间的耦合性
HandlerMapping:处理器映射器, 负责根据用户请求找到对应具体的Handler处理器
Handler:处理器,业务处理的核心类,通常由开发者编写,描述具体的业务
HandlAdapter:处理器适配器,通过它对处理器进行执行
View Resolver:视图解析器, 将处理结果生成View视图
View:视图,最终产出结果, 常用视图如jsp、html
4.基本配置
1.Controller加载控制
SpringMVC的处理器对应的bean必须按照规范格式开发,未避免加入无效的bean可通过bean加载过滤器进行包含设定或排除设定,表现层bean标注通常设定为@Controller
2.静态资源加载
图片并未加载成功
回到代码中发现
当发起一个请求以后
DispatcherServlet配置拦截所有请求/
这使静态资源无法成功加载
解决方法
核心控制器拦截的是所有请求,需要对静态资源请求进行方行,通过配置放行资源实现
使用简化格式可以放行所有普通资源调用,无需一一枚举
样例
3.中文乱码处理
SpringMVC提供专用的中文字符过滤器,用于处理乱码问题
配置在web.xml中
CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 CharacterEncodingFilter /*
4.注解驱动
目的:去掉spring-mvc.xml与web.xml
使用注解形式转化SpringMVC核心配置文件为配置类
创建com.config.SpringMVCConfiguration
package com.config;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.FilterType;import org.springframework.stereotype.Controller;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration@ComponentScan(value = "com",includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class}))public class SpringMVCConfiguration implements WebMvcConfigurer { /* */ //代替// @Override// public void addResourceHandlers(ResourceHandlerRegistry registry) {// registry.addResourceHandler("/img/**").addResourceLocations("/img/");// registry.addResourceHandler("/js/**").addResourceLocations("/js/");// registry.addResourceHandler("/css/**").addResourceLocations("/css/");// }// //代替 @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }} 基于servlet3.0规范,自定义Servlet容器初始化配置类,加载SpringMVC核心配置类
创建com.config.ServletContainersInitConfig
package com.config;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;import org.springframework.web.filter.CharacterEncodingFilter;import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;import javax.servlet.DispatcherType;import javax.servlet.FilterRegistration;import javax.servlet.ServletContext;import javax.servlet.ServletException;import java.lang.annotation.Annotation;import java.util.EnumSet;public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { /* DispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath*:spring-mvc.xml.bak */ //代替 @Override protected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(SpringMVCConfiguration.class); return ctx; } /* DispatcherServlet / */ //代替 @Override protected String[] getServletMappings() { return new String[]{"/"}; } @Override protected WebApplicationContext createRootApplicationContext() { return null; } /* CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 CharacterEncodingFilter /* */ @Override public void onStartup(ServletContext servletContext) throws ServletException { super.onStartup(servletContext); CharacterEncodingFilter cef = new CharacterEncodingFilter(); cef.setEncoding("UTF-8"); FilterRegistration.Dynamic registration = servletContext.addFilter("characterEncodingFilter",cef); registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST,DispatcherType.FORWARD,DispatcherType.INCLUDE),false,"/*"); }} 此时就可以删除spring-mvc.xml与web.xml
上一篇:联通云服务器怎么创建?