springMVC(一)—— 简述web项目、简述MVC设计模式、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.youkuaiyun.com/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)若有错误,还望指正

1.0.5 从web项目迁移成maven项目 1.0.6 增加菜单框架ext实现,类路径调整 1.0.7 增加http工具类,demo例子 1.0.8 socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 zookeeper工具类优化 增加工具类 1.0.16 页面html标志修改 httpclient中文支持 工具类增强(zip,reflect,thread) 1.0.17 ftp服务端和客户端工具类,配置文件maven和web项目路径统 1.1.0 soapui工具类(web版本) properties等工具类 1.1.1 工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis 加锁,redis升级成2.8.2 freemarker工具类 1.1.6 spring websocket 实现在线聊天 maven升级jdk1.8 jetty9.2.4 web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 1.1.8 jquery 图片预览插件 图片滚动显示插件 1.1.9 jquery实现鼠标在按钮上显示窗口,离开窗口和按钮时消失 1.1.10 rabbitMQ集成 视频截图 图片缩略图旋转 集成Mybatis 使用数据库连接池druid dubbo使用
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值