SpringMvc

SpringMvc

1.SpringMvc简介

1.1什么是MVC

在这里插入图片描述

1.2什么是SpringMVC

在这里插入图片描述

1.3SpringMVC的特点

在这里插入图片描述

2.入门案例

2.1开发环境

在这里插入图片描述

2.2创建maven工程

①以quickstart模板创建maven工程
②对pom.xml的packaging设置为war
在这里插入图片描述

重新加载pom.xml文件,等加载结束后,在项目结构中设置xml文件路径

在这里插入图片描述
③引入依赖

<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.2.3</version> </dependency>
        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency> </dependencies>

在这里插入图片描述

2.3配置web.xml

在这里插入图片描述
①默认注册方式
因为DispatcherServlet底层为Servlet,所以注册方式和Servlet在web.Xml文件中的注册方式相同

<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>springMVC</servlet-name>
<!--设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
 但是/不能匹配.jsp请求路径的请求,jsp的请求方式在tomcat服务器中有默认设置 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

2.4创建请求控制器

在这里插入图片描述

2.5创建SpringMVC的配置文件

<!-- 自动扫描包 -->
    <context:component-scan base-package="com.tl"></context:component-scan>
    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <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>
    <!--处理静态资源,例如html、js、css、jpg 若只设置该标签,
    则只能访问静态资源,其他请求则无法访问-->

2.6测试HelloWorld

在这里插入图片描述
加入超链接
在这里插入图片描述
在这里插入图片描述

2.7总结

3.@RequestMapping注解

3.1@RequestMapping注解的功能

在这里插入图片描述
RequestMapping类似于service方法,既可接收表单的post请求,也可接收get请求

3.2@RequestMapping注解的位置

在这里插入图片描述

3.3@RequestMapping注解的value属性

在这里插入图片描述
在这里插入图片描述

3.4@RequestMapping注解的method属性

在这里插入图片描述
在这里插入图片描述

3.5@RequestMapping注解的params属性(了解)

在这里插入图片描述
在这里插入图片描述

3.6@RequestMapping注解的headers属性(了解)

在这里插入图片描述

3.7SpringMVC支持ant风格的路径

在这里插入图片描述
在这里插入图片描述
不能匹配?号以及/

3.8SpringMVC支持路径中的占位符(重点)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

{}就是占位符
@pathvariable表示路径中的变量

4.SpringMvc获取请求参数

4.1通过ServletApi获取

在这里插入图片描述

4.2通过控制器方法的形参获取请求参数

在这里插入图片描述

4.3@RequestParam

当请求参数和控制器形参不一样时,使用RequestParam
比如在html中修改username为userName,这样请求参数和控制器形参就无法进行匹配,通过RequestParam指定请求参数为userName,就可以实现相应匹配了
在这里插入图片描述

在这里插入图片描述

4.4@RequestHeader

在这里插入图片描述
在这里插入图片描述

4.5@CookieValue

在这里插入图片描述

4.6通过POJO获取请求参数

在这里插入图片描述

4.7解决获取请求参数的乱码问题

是通过过滤器来设置编码,首先设置编码过滤器<filter-name>和<filter-class>
然后将过滤器的编码通过<init-param>设置为UTF-8,但这只能解决request乱码问题,在添加forceEncoding将response编码问题解决

<!--配置springMVC的编码过滤器-->
    <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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Tomcat8以前post get都会乱码
Tomcat8以后
只有post会有乱码
设置编码之前不能获取任何参数,否则无效

5.域对象共享数据

5.1使用ServletAPI向request域对象共享数据

在这里插入图片描述

5.2使用ModelAndView向request域对象共享数据

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.3使用Model向request域对象中共享数据

在这里插入图片描述

5.4使用map向request域对象共享数据

在这里插入图片描述

5.5使用ModelMap向request域对象共享数据

在这里插入图片描述

5.6Model、ModelMap、Map的关系

在这里插入图片描述

5.7向session域共享数据

在这里插入图片描述

5.8向application域共享数据

在这里插入图片描述
session和application要加前缀

6.SpringMvc的视图

在这里插入图片描述

6.1ThymeleafView

在这里插入图片描述

6.2转发视图

在这里插入图片描述

6.3重定向视图

在这里插入图片描述
自动加上了上下文路径

6.4视图控制器view-controller

在这里插入图片描述
在这里插入图片描述

7.RESTful

7.1RESTful简介

在这里插入图片描述
在这里插入图片描述

7.2RESTful实现

在这里插入图片描述

7.3HiddenHttpMethodFilter

在这里插入图片描述
在这里插入图片描述

8.RESTFUL案例

8.1准备工作

在这里插入图片描述

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    //1 male, 0 female
    private Integer gender;

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Employee(Integer id, String lastName, String email, Integer gender) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }

    public Employee() {
    }
}

在这里插入图片描述

@Repository
public class EmployeeDao {
    private static Map<Integer, Employee> employees = null;
    static{
        employees = new HashMap<Integer, Employee>();
        employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1));
        employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1));
        employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0));
        employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0));
        employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1));
    }
    private static Integer initId = 1006;
    public void save(Employee employee){
        if(employee.getId() == null){
            employee.setId(initId++);
        }
        employees.put(employee.getId(), employee);
    }
    public Collection<Employee> getAll(){
        return employees.values();
    }
    public Employee get(Integer id){
        return employees.get(id);
    }
    public void delete(Integer id){
        employees.remove(id);
    }
}

控制层

@Controller
public class EmployeeController {
    @Autowired
    private EmployeeDao employeeDao;

    @RequestMapping(value = "/employee",method = RequestMethod.GET)
    public String getAllEmployee(Model model){

        Collection<Employee> employeeList = employeeDao.getAll();
        model.addAttribute("employeeList",employeeList);
        return "employee_list";
    }
    @RequestMapping(value = "/employee",method = RequestMethod.POST)
    public String addEmployee(Employee employee){

        employeeDao.save(employee);
        return "redirect:/employee";
    }
    @RequestMapping(value = "/employee/{id}",method = RequestMethod.GET)
    public String toUpdate(@PathVariable("id") Integer id, Model model){

        Employee employee = employeeDao.get(id);
        model.addAttribute("employee",employee);
        return "employee_update";
    }
    @RequestMapping(value = "/employee", method = RequestMethod.PUT)
    public String updateEmployee(Employee employee){
        employeeDao.save(employee);
        return "redirect:/employee";
    }
    @RequestMapping(value = "/employee/{id}", method = RequestMethod.DELETE)
    public String deleteEmployee(@PathVariable("id") Integer id){
        employeeDao.delete(id);
        return "redirect:/employee";
    }
}

8.2功能清单

在这里插入图片描述

8.3具体功能:访问首页

在这里插入图片描述

8.4具体功能:查询所有员工数据

在这里插入图片描述
在这里插入图片描述
修改功能需要将员工id传输过去,但直接/employee/$(employee.id)这种写法无法被解析
在这里插入图片描述

8.5具体功能:删除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.6具体功能:跳转到添加数据页面

8.7具体功能:执行保存

8.8具体功能:跳转到更新数据页面

8.9具体功能:执行更新

9.0RESTful处理静态资源

<!--
        配置默认的servlet处理静态资源
        当前工程的web.xml配置的前端控DispatcherServlet的url - pattern是/
        tomcat的web.xml配置的DefaultServlet的url-pattern也是/
        此时,浏时器发送的请求会优先DispatcherServlet进行处理,但是DispatcherServlet无法处理静态资源
        若配置了<mvc:default-servlet-handler />,此时浏览器发送的所有请求都会越DispatcherServlet处理
        若配置了<mvc:default-servlet-handler />和<mvc:annotation-driven />
        浏览器发送的请求会先被DispatcherServlet.处理,无法处理在交给DefaultServlet处理
    -->
<!--    <mvc:default-servlet-handler></mvc:default-servlet-handler>-->
    <mvc:default-servlet-handler />

    <mvc:annotation-driven />
    <!--
        path:设置处理的请求地址
        view-name:设置请求地址所对应的视图名称
    -->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>
    <mvc:view-controller path="/to/add" view-name="employee_add"></mvc:view-controller>
</beans>

9.SpringMVC处理ajax请求

9.1@RequestBody

9.2@RequestBody获取json格式的请求参数

9.3@ResponseBody

9.4@ResponseBody相应浏览器json数据

9.5@RestController注解

10.文件上传和下载

10.1文件下载

10.2文件上传

11.拦截器

11.1拦截器的配置

11.2拦截器的三个抽象方法

11.3 多个拦截器的执行顺序

12.异常处理器

12.1基于配置的异常处理

12.2基于注解的异常处理

13.注解配置SpringMvc

13.1创建初始化类,带提web.xml

13.2创建SpringConfig配置类,代替Spring的配置文件

13.3创建WebConfig配置类,代替SPringMVC配置文件

13.4测试功能

14.SpringMVC执行流程

14.1SpringMVC常用组件

14.2DispatcherServlet初始化过程

14.3DispatcherServlet初始化策略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值