Spring MVC基础

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

SpringMVC初体验

在这里插入图片描述
在这里插入图片描述
1.Maven依赖spring-webmvc:

  <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

2.web.xml配置DispatcherServlet:

<?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_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>springmvc</servlet-name>
				        <!--
				            DispatcherServlet是Spring MVC最核心的对象
				            DispatcherServlet是用于拦截HTTP请求,
				            并根据请求的URL调用与之对应的Controller方法,来完成HTTP请求的处理
				         -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     		  <!--  applicationContext.xml  -->
       <init-param>
           <param-name>contextConfigLocation</param-name><!--contextConfigLocation,不能写其他的 -->
           <param-value>classpath:applicationContext.xml</param-value>
       </init-param>
		
		        <!--
		            在web应用启动时自动创建Spring IOC容器
		            并初始化DispatcherServlet
		        -->
					        <!--如果没有加<load-on-startup>0</load-on-startup>
						,会在第一次访问URL的时候创建-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
			        <!-- "/"代表拦截所有请求   -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

3.配置applicationContext.xml的MVC标记:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mv="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--
context:component-scan 标签作用:
在Spring IOC初始化过程中,自动创建并管理com.imooc.springmvc及子包中拥有以下注解的对象
@repository :一般放在Dao类上,通常是与数据发生直接交互的
@Service :放在Service类上面,业务逻辑类
@Controller :用于描述MVC的控制器类
@Component : 放在不好区分类型的类上
-->
    <context:component-scan base-package="com.imooc.springmvc"></context:component-scan>
<!--启用Spring MVC的注解开发模式-->
    <mvc:annotation-driven/>
    <!--将图片/JS/CSS等静态资源排除在外,课提高执行效率-->
    <mvc:default-servlet-handler/>
</beans>

4.开发Controller控制器:控制器测试类:

@Controller
public class TestController {
    @GetMapping("/t")  //用于将方法绑定get请求的URL,浏览器中输入localhost/t就可以访问到test方法
    @ResponseBody//直接向响应输出字符串数据,不跳转页面
    public String test(){
        return "Hello world";
    }
}

Spring MVC数据绑定

URL Mapping

在这里插入图片描述
在这里插入图片描述
@RequestMapping放在类前面,为所有的GetMapping和PostMapping设置访问前缀
@RequestMapping放在方法上,不再区分get/post请求,但是一般都不这样用
在以下的GetMapping和PostMapping前面都加上/um
在这里插入图片描述

Controller方法参数接收请求参数

在这里插入图片描述
在这里插入图片描述
接收参数的过程中可直接进行类型转换
Tomcat出现400错误一般都是前端的表单校验不够严谨造成的

@RequestParam(“manager_name”) String managerName:将manager_name动态的注入到后面的参数managerName中

   @GetMapping("/g")
    //作用在方法上,不再区分get/post请求
    //@RequestMapping(value="/g",method = RequestMethod.GET)
    @ResponseBody
    public String getMapping(@RequestParam("manager_name") String managerName ){
        System.out.println("managerName:"+managerName);
        return "This is get method";
    }

使用JavaBean接收请求参数在这里插入图片描述

实体对象的属性名需要和提交的参数名保持一致

接收表单复合数据

在这里插入图片描述
在这里插入图片描述
复合数据可以使用数组接收,
还可以使用List集合接收,但要在List集合前增加@RequestParam注解说明
也可以将数据封装成一个实体对象,实体对象中也允许使用List对象接收复合数据
Map只能接收单个数据,对河存在复合数据的表单会存在丢失的现象

关联对象赋值

在这里插入图片描述

在这里插入图片描述

日期类型转换

小范围中: @DateTimeFormat(pattern=“yyyy-MM-dd”) :将前台输入的格式转换为Date对象


    @PostMapping("/p1")
    @ResponseBody
    public String postMapping1(User user , String username ,@DateTimeFormat(pattern = "yyyy-MM-dd") Date createTime){
        System.out.println(user.getUsername() + ":" + user.getPassword());
        return "<h1>这是Post响应</h1>";
    }

实体类中在类前面添加@DateTimeFormat(pattern = “yyyy-MM-dd”)

也可以创建一个类来实现全局的控制:

public class MyDateConverter implements Converter<String,Date> {
    public Date convert(String s) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");
        try {
            Date date = sdf.parse(s);
            return date;
        } catch (ParseException e) {
            return null;
        }
    }
}

配置文件中添加:

   <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.imooc.springmvc.convertter.MyDateConverter"/>
            </set>
        </property>
    </bean>

修改之前配置的代码,在启用Spring MVC的注解开发模式后添加conversion-service="conversionService"

<!--启用Spring MVC的注解开发模式-->
    <mvc:annotation-driven conversion-service="conversionService"/>

解决中文乱码

在这里插入图片描述
在这里插入图片描述
1.Tomcat8.0以后的版本默认 URIEcoding=“UTF-8”,可以不用配置这一项
2.web.xml配置:在后面添加:


    <filter>
        <filter-name>characterFilter</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>characterFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.Response响应乱码
在设置启用Spring MVC的注解开发模式的代码里面添加,其主要目的是设置text/html;charset=utf-8


<!--启用Spring MVC的注解开发模式-->
    <mvc:annotation-driven conversion-service="conversionService">
        <!--解决中文乱码问题-->
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>

    </mvc:annotation-driven>

响应输出

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


    @PostMapping("/post")
    public ModelAndView showView(User user){
        ModelAndView mv = new ModelAndView("/view.jsp");
        mv.addObject("user", user);
        return mv;
    }

在这里插入图片描述
页面重定向后原本放在请求中的数据会丢失
可以在实例化ModelAndView的时候不设置地址,然后用setViewName方法设置
在这里插入图片描述
String与ModelMap
//Controller方法返回String的情况
//1.方法被@ResponseBody描述,SpringMVC直接响应String字符串本身
//2.方法不存在@ResponseBody,则SpringMVC处理String指代的视图(界面)


    //String与ModelMap
    //Controller方法返回String的情况
    //1.方法被@ResponseBody描述,SpringMVC直接响应String字符串本身
    //2.方法不存在@ResponseBody,则SpringMVC处理String指代的视图(界面)
    @GetMapping("/modelmap")
    @ResponseBody
    public String showView1(Integer userId, ModelMap modelMap) {
        String view = "/view.jsp";
        User user = new User("张三", "123456", new Date());
        if (userId == 1) {
         user.setUsername("李四");

        } else if (userId == 2) {
            user.setUsername("王二");
        }
        modelMap.addAttribute("user", user);
        return view;
    }

SpingMVC整合Free Marker

在这里插入图片描述

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.29</version>
        </dependency>

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

<!--启用FreeMarker模板引擎-->
    <bean id="ViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="contentType" value="text/html;charset=utf-8"></property>
        <property name="suffix" value=".ftl"/>
    </bean>

    <!--配置FreeMarker参数-->
    <bean id="freemarkerConfig"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/ftl"/>
        <property name="freemarkerSettings">
            <props>
                <prop key="defaultEncoding">UTF-8</prop>

            </props>
        </property>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值