SpringMVC入门

了解SpringMVC

  • 在spring的基础上,对 Servlet技术进行的封装处理,形成的一个MVC框架。
  • SpringMVC=Spring+MVC
  • SpringMVC的运行效率比struts2高
  • spring使用比较多

SpringMVC的执行流程

  • web.xml中配置核心控制器(分发器)===>通过Servlet完成的(DisparcherServlet)
  • 需要在springmvc配置文件(就是spring配置文件)中,把方法映射成地址。
  • 需要在springMVC配置文件中,做跳转。

SpringMVC环境搭建

1. 下载jar包(另外导入spring依赖jar包)
spring-web-5.2.3.RELEASE.jar
spring-webmvc-5.2.3.RELEASE.jar
在这里插入图片描述
2. 配置web.xml文件和SpringMVC文件

  • web.xml文件配置
<!--通过servlet标签配置SpringMVC的核心控制器:分发器 DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--始化参数指定要加载的配置文件。找到SpringMVC的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--启动加载:启动tomcat的时候,就实例化、初始化servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • SpringMVC的配置文件:springmvc-servlet.xml
	<!--注解驱动控制器,基于注解的处理器-->
	<mvc:annotation-driven/>
	
    <context:component-scan base-package="com.ssm.controller"></context:component-scan>
    <!--配置视图解析器:把方法的返回值,转换成一个真实的地址,以转发的方式请求-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

3. 搭建Controller 处理请求的控制器。

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/test")
    public String test(Map map){
    	System.out.println("进来了...");
    	// map:参数传递的一种方式
        map.put("username" , "李四");
        return "index";
    }
    
}
  • @Controller:标注一个普通的JavaBean成为可以处理请求的控制器。
  • @RequestMapping:通过请求URL进行映射。可以指定接收GET或是POST或是其它的一些请求。通常用在类上和方法上。
  • 返回的字符串会通过SpringMVC配置文件的视图解析器,映射成URL地址。

4. 配置一个简单的 index.jsp 前端页面,看是否跳转成功。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Title</title>
  </head>
  <body>
    <h1>${username}</h1>
  </body>
</html>
小结
  • 启动tomcat:
    1. 启动tomcat后加载wed.xml文件。
    2. wed.xml文件中的servlet标签配置了 load-on-startup=1 就会实例化、初始化 servlet。
    3. 然后加载SpringMVC的配置文件。
    4. SpringMVC中配置的有扫描注解,就可以把Controller包中的注解加载到。
    5. 然后把方法映射成地址。
  • 发送一个访问请求:
    1. 发送一个请求经过web.xml配置文件。
    2. 若符合springmvc控制器、分发器规则,就把这个请求交给SpringMVC处理。
    3. 到SpringMVC映射好的地址中找到对应的地址。
    4. 进入到对应地址对应的方法中。
    5. 方法执行完毕后返回一个字符串。
    6. 通过SpringMVC配置的视图解析器转换成一个真是的地址,以转发的方式进行请求。

SpringMVC参数的传递

参数接收

1. 通过方法形参直接声明参数。不过要求参数名要和页面传递过来的参数名相同。

请求:http://localhost:8081/springmvc/test?username=admin

	@RequestMapping("/test")
    public String test(String username){
        System.out.println("========" + username);
        return "index";
    }

2. 方法形参声明对象类型的参数。那么页面参数名称必须是对象的属性名。
请求:http://localhost:8081/springmvc/test?username=admin&age=18

	@RequestMapping("/test")
    public String test(User user){
        System.out.println("======================" + user.username + user.age );
        return "index";
    }

3. 前两条参数传递中如果页面没有传过来参数,或参数名称没有对应就会引起使用报错。如何设置非必须的参数。

  • 通过形参直接传递参数,和第一条类似,只不过需要在参数前边加 @RequestParam注解。
  • 例如:请求:http://localhost:8081/springmvc/welcome?username=admin
   @RequestMapping("/welcome")
    public String welcome(@RequestParam(value = "username" , required = false) String username){
        System.out.println("===>" + username);
        return "index";
    }
  • @RequestParam 注解常用属性:
    • value:参数名。如果配置了此属性,需要页面传递的参数名和此属性值保持一致,而不再和参数名保持一致。
    • required:当前方法的参数是否为必须的。默认为true。
参数的传递(前端通过EL和JSTL获取展示数据)

1. 通过ModelAndView对象将模型数据传递给视图。ModelAndView:包含视图信息和模型数据信息。

  • 常用方法
    • 添加数据:
      • ModelAndView addObject(String attributeName, Object attributeValue);
      • ModelAndView addAllObjects(Map<String,?> modelMap);
    • 设置视图
      • void setView(View view);
      • void setViewName(String viewName);
	@RequestMapping("/welcome")
    public ModelAndView welcome(@RequestParam(value = "username" , required = true) String username){
        ModelAndView mav = new ModelAndView();
        mav.addObject("username" , username);
        mav.setViewName("index");
        return mav;
    }
  • 这种方式传递参数繁琐,不推荐使用。

2. 通过Model对象传递参数。Model是Map类型的数据结构。

  • 常用方法:
    • 添加数据模型:Model.addAttribute(String attributeName,Object attributeValue);
    • 其中 key值不是必须的。在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key。
	@RequestMapping("/test")
    public String test(Model model){
        model.addAttribute("username" , "张三");
        model.addAttribute("李四");
        return "index";
    }

对应的index.jsp

 <body>
	  <h1>name=======>${username}</h1>
	  <h1>name=======>${string}</h1>
  </body>

效果:
在这里插入图片描述
3. 在方法形参中声明Map,map中存放的数据模型会被SpringMVC放在request作用域中。

    @RequestMapping("/testmap")
    public String testMap(Map map){
       map.put("username" , "王五");
        return "index";
    }

4. @ModelAttribute:加在方法形参前面,会自动把接收到的数据,放在request作用域中

	@RequestMapping("/test")
    public String test(@ModelAttribute(name = "name") String name){
        System.out.println(name);
        return "index";
    }

5. @SessionAttributes:加在类上面的;把request作用域中的数据复制到session作用域中
6. session作用域中放数据:方法形参中声明HttpSession,代码中session.setAttribute(k,v);

流程跳转

  • 通过视图解析器完成
    • 在springmvc配置文件中通过bean标签配置视图解析器,指定前缀以及后缀:把方法返回值(逻辑视图)转换成真实的地址(物理视图),以转发的方式请求。
    • 视图解析器:把逻辑视图转换为物理视图

  • 方法返回带前缀的字符串;不经过视图解析器处理
    • forward:/index.jsp ===> 转发的地址
    • redirect:/getAll.do ===> 重定向到一个地址

转发示例:

	@RequestMapping("/testmap")
    public String testMap(Map map){
        map.put("username" , "赵六");
        return "forward:/index.jsp";
    }

重定向示例:

	@RequestMapping("/testmap")
    public String testMap(Map map){
        map.put("username" , "赵六");
        return "redirect:/test";
    }

静态资源文件的引用

  • <mvc:resources/>标签:在SpringMVC的配置文件中添加。
    • mapping:将静态资源映射到指定的路径下
    • location:本地静态资源文件所在的目录
	<!--引入静态资源-->
    <mvc:resources mapping="/**" location="/" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值