SpringMVC
创建Maven包
初始化Maven添加相应依赖包
<packaging>war</packaging>
<dependencies>
<!--springMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!--日志-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-alpha16</version>
</dependency>
<!--ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--Spring5和tymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
</dependencies>
创建webapp,新建文件夹webapp,设置web工程
更改相应路径
再次回到webapp的目录,出现蓝点且存在WEB-INF/web.xml则配置成功
配置web.xml
默认配置方式
<!--配置SpringMVC的前端控制器,对浏览器的请求统一处理-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatchServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
扩展配置方式
<!--配置SpringMVC的前端控制器,对浏览器的请求统一处理-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置位置和名称-->
<init-param>
<param-nam· e>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!--将前端控制器DispatchServlet的初始化时间提前到服务器启动时-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
创建请求控制器
@Controller
public class HelloController {
}
扫描组件
视图解析器
<!--视图解析器-->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"></property>
<property name="characterEncoding" value="UTF-8"></property>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!--视图前缀 -->
<property name="prefix" value="/WEB-INF/templates"/>
<!--视图后缀 -->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
</property>
</bean>
404错误由tomcat版本所致
更换tomcat9下的版本
@RequestMapping
-
value属性
编写在类上面,相当于根目录
编写在方法上,表示具体的路径
@Controller @RequestMapping("/demo") public class testController { @RequestMapping("/test1") public String test(){ return "test"; } @RequestMapping("test2") public String test2(){ return "test2"; } }
访问路径:test1: /demo/test1 test2:/demo/test2
value值可以为数组 value={“/demo1”,“demo2”},表示可通过两个路径访问
value属性必须设置值
-
method属性
method=RequestMethod.GET
method=RequestMethod.POST
-
params属性:表示请求信息中对请求参数的限制
params={“username”,“age!=10”}:表示请求参数中必须带有username,且age!=10
-
Ant匹配风格:
- ?:匹配文件名中的一个字符
- *:匹配文件名中的任意字符
- **:匹配多层路径(/ /中间放符号)
-
@PathVariable():可以将URL请求路径中的参数传递到处理请求方法的形参中
处理请求数据
-
@RequestParam注解:可以把请求参数传递给请求方法
value:参数名
required:是否必须,默认为true
defaultValue:默认值,没有传递参数时使用的值
-
@RequestHeader注解(value,required,defaultvalue):绑定请求报头的属性值,服务区可通过此注解获取报头的属性值
-
@CookieValue注解(value,required,defaultvalue):绑定请求中的Cookie值
创建cookie:通过调用
public String testServletAPI(HttpServletRequest request){ HttpSession session=request.getSession(); }
POJO作为参数
springMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值
配置字符编码过滤器
web.xml配置
<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>
域对象共享数据
-
使用servletAPI向request域对象共享数据
<a th:href="@{/testScope}">测试servletAPI获取数据域</a> @Controller public class testScope { @RequestMapping("/testScope") public String testScope(HttpServletRequest request){ request.setAttribute("testScope","Hello Rush!"); return "testScope"; } }
-
使用ModelAndView向request域对象共享数据
@RequestMapping("/testScopeByMAV") public ModelAndView testMAV(){ ModelAndView mav=new ModelAndView(); mav.addObject("testScope","Test ModelAndView"); mav.setViewName("testScope"); return mav; }
-
通过Model向request域对象共享数据
-
通过Map向request域对象共享数据
map.put(key,value);
-
ModelMap
ModelMap.addAttribute();
-
通过servletA