springMVC目录
Ⅰ、补充回顾
一、web项目 0
1、什么是web项目?
发布在服务器上,能通过网络使用浏览器访问的项目。
2、web项目具体包含哪些内容?
静态资源:前端框架(html、css、js等),通过浏览器直接访问,不会被更替的资源。
动态资源:与数据库交互,通过浏览器访问得到的内容,可时时发生改变。
3、web项目部署到tomcat发布时执行的流程?
1)当启动tomcat时,会加载web项目中的web.xml文件,初始化ServletContext对象,一个该对象对应一个web项目,随服务器的关闭,而失效;
2)加载web.xml文件中的contextparam配置的参数;
3)加载并初始化过滤器实例。
4)服务器启动时可能会初始化servlet,但是这个是<laod-on-startup></laod-on-startup>
标签设置的值确定的(大于0,启动tomcat就初始化;否则第一次请求tomcat时初始化)
4、客户端向tomcat发送请求的处理流程?
1)请求到达tomcat就创建一个新的线程,用于处理请求;
2)调用或者创建一个servlet来处理请求;
3)将请求携带的参数封装到request请求域对象中;
4)将所得的request域对象传给service方法处理;
5)请求处理完成之后,通过response响应给页面。
二、MVC设计模式
M:model模型(bean、dao、service),业务逻辑
V:view视图(html、css、等),客户端(浏览器)展示出来的部分
C:controller控制(servlet),处理客户端请求,并响应数据到客户端
引用图片——
Ⅱ、springMVC(上)
基于web MVC设计模式的轻量级Web框架——使用MVC架构模式的思想,将web层进行职责解耦,用于简化开发。
springMVC:位于控制层,用于处理页面请求并相应给页面,是对servlet的延展的轻量级框架
👉springMVC执行流程详解——https://blog.csdn.net/qq_38215042/article/details/85319796
注意:
1、自定义的xml拦截路径不能写/*
——Tmocat默认的web.xml会拦截/和.jsp或者.jspx的路径,如果写/*
那么会拦截所有的路径,包括jsp,但是springMVC不能处理jsp。
2、编码过滤器,在tomcat调用srvlet之前执行。
3、前端返回的数据都是String类型,但是springMVC处理之后,返回的就是你指定的数据类型。
一、springMVC入门案例 0
1、新建maven web项目
点击参考 Ⅳ、idea创建maven项目的第二条创建maven web项目
2、导包(spring核心容器3个、spring-mvc两个、json两个)
pom.xml
<dependencies>
<!--spring核心容器3个-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<!--springMVC两个-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<!--json两个-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
</dependencies>
3、配置DIspatcherservlet核心处理器(在web.xml中)
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置dispatcherServlett核心处理器-->
<servlet>
<servlet-name>testspringMVC</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>
</servlet>
<servlet-mapping>
<servlet-name>testspringMVC</servlet-name>
<!--这里不能写/*,那样会拦截所有路径,其中包含jsp页面,servlet不能处理-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置编码过滤器,不然会乱码,应当统一编码格式-->
<filter>
<filter-name>characterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<!--表示所有的路径中的资源都使用utf-8的编码格式-->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4、初始化三个对象handlermapping处理映射器、handlerAdapter处理适配器、ViewResolver视图解析器(spring的配置文件中)
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解-->
<context:component-scan base-package="com.hbw.controller"></context:component-scan>
<!--初始化处理映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!--初始化处理适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!--初始化视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
</beans>
5、使用控制层的某个方法进行测试
StudentController.java
package com.hbw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//控制层
@Controller
//映射器路径
@RequestMapping("student")
public class StudentController {
@RequestMapping("test1")
public String test1(){
System.out.println("springMVC测试成功");
return "/test.jsp";
}
}
6、这里推荐使用插件进行项目发布,tomcat有缓存,测试时容易存在影响
pom.xml
注意别放在dependencies标签里面了
<!--引入tomcat插件-->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8080</port>
<uriEncoding>utf-8</uriEncoding>
</configuration>
<version>2.2</version>
</plugin>
</plugins>
</build>
7、插件如何启动?
二、springMVC绑定form表单进行数据提交
1、普通、引用数据类型 0
1)Student.java实体类
package com.hbw.bean;
import java.io.Serializable;
import java.util.*;
public class Student implements Serializable {
private int sid;
private String sname;
//book中的属性是bid、bname
private Book book;
private String[] hobbies;
private List<Book> bookList;
//传递set集合的参数,需要先实例化,并且指定个数
private Set<Book> bookSet=new HashSet<Book>();
private Map<String,Book> bookMap;
public Student() {
bookSet.add(new Book());
bookSet.add(new Book());
}
public int get、set
……
……
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", book=" + book +
", hobbies=" + Arrays.toString(hobbies) +
", bookList=" + bookList +
", bookSet=" + bookSet +
", bookMap=" + bookMap +
'}';
}
}
2)前端的表单
<%--普通、引用数据类型--%>
<form action="/student/test2" method="post">
<%--普通类型,通过属性名直接匹配--%>
ID:<input type="text" name="sid"/>
Name:<input type="text" name="sname"/><br/>
<%--普通引用类型,通过(super实体类)属性名点(this)属性名进行匹配--%>
书:ID<input type="text" name="book.bid"/>Name<input type="text" name="book.bname"/><br/>
<%--数组类型,通过属性名直接匹配--%>
爱好:<br/>
<input type="text" name="hobbies"/>
<input type="text" name="hobbies"/><br/>
<%--list集合的引用类型,通过下表和this属性名--%>
书List:<br/>
书ID1<input type="text" name="bookList[0].bid"/>
书Name1<input type="text" name="bookList[0].bname"/><br/>
书ID2<input type="text" name="bookList[1].bid"/>
书Name2<input type="text" name="bookList[1].bname"/><br/>
<%--set集合需要先实例化,并指定存放个数--%>
书Set:<br/>
书ID1<input type="text" name="bookSet[0].bid"/>
书Name1<input type="text" name="bookSet[0].bname"/><br/>
书ID2<input type="text" name="bookSet[1].bid"/>
书Name2<input type="text" name="bookSet[1].bname"/><br/>
<%--map集合需要指定key(这里的key是String类型),再通过key匹配value--%>
书Map:<br/>
书ID1<input type="text" name="bookMap['a'].bid"/>
书Name1<input type="text" name="bookMap['a'].bname"/><br/>
书ID2<input type="text" name="bookMap['b'].bid"/>
书Name2<input type="text" name="bookMap['b'].bname"/><br/>
<input type="submit"/>
</form>
3)测试
package com.hbw.controller;
import com.hbw.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//控制层
@Controller
//映射器路径
@RequestMapping("student")
public class StudentController {
@RequestMapping("test2")
public String test2(Student student){
System.out.println(student);
return "/test2.jsp";
}
}
2、默认数据类型 0
Model,modelAndView,ModelMap,Map:将任意参数绑定到请求域(request),modelAndView还可以指定返回视图页面;
还有一个ServletAPI(HttpServletRequest rquest、response、session)经常使用……
StudedntController.java
package com.hbw.controller;
import com.hbw.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Map;
//控制层
@Controller
//映射器路径
@RequestMapping("student")
public class StudentController {
@RequestMapping("test3")
//Model,modelAndView,ModelMap,map作用:将任意参数绑定到请求域(request),其中modelAndView还可以指定返回视图页面;
public ModelAndView test3(Model model, ModelAndView modelAndView, ModelMap modelMap, Map map){
model.addAttribute("a","1");
modelAndView.addObject("b","2");
modelMap.addAttribute("c","3");
map.put("d","4");
modelAndView.setViewName("/test2.jsp");
return modelAndView;
}
}
3、自定义数据类型
1.自定义日期转换工具类:
public class TestDateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
Date date = null;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
date = simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
2.注册日期转换工具:
<!--配置自定义日期转换类-->
<bean id="conversionServiceFactoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.hbw.util.TestDateConverter "></bean>
</set>
</property>
</bean>
<!--开启自定义转换服务,该标签还有一个作用:
相当于配置handerMapping和HandlerAdapter-->
<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"></mvc:annotation-driven>
3.测试:
<form action="/student/test4">
日期<input name="mydate" type="date">
<input type="submit" value="提交">
</form>
@RequestMapping("test4")
public String test4(Date mydate){
System.out.println(mydate);
return "/test2.jsp";
}
待完成
1、事务 ing
2、spring整合mybatis ✔
3、springMVC ✔
4、动态sql ×
PS
1)目录含义 0 字符表示有需要注意的地方;
2)学习记录、交流
3)若有错误,还望指正