SpringMVC——基础

依赖

 <dependencies>
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>5.2.8.RELEASE</version>
     </dependency>
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>servlet-api</artifactId>
         <version>2.5</version>
     </dependency>
     <dependency>
         <groupId>javax.servlet.jsp</groupId>
         <artifactId>jsp-api</artifactId>
         <version>2.2</version>
     </dependency>
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.2</version>
     </dependency>
 </dependencies>

如果创建项目时没有选择web模板而是手动添加的,可能会遇到404的问题:

检查项目发布中有没有lib依赖,没有的话要手动建lib包并且把jar包都丢进去

 

 

 

1.执行原理

1.配置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">
 
   <!--配置DispatcherServlet:这个是SpringMVC的核心,请求转发器或前端控制器-->
   <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>
     <!--启动级别:1:和服务器一起启动-->
     <load-on-startup>1</load-on-startup>
   </servlet>
   <!--
   再springmvc中,/和/*的区别:
   /:只匹配所有的请求,不会去匹配jsp页面
   /*:匹配所有的请求,包括jsp页面
   -->
   <servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <url-pattern>/</url-pattern>
   </servlet-mapping>
 
 </web-app>

 

2.新建springmvc的配置文件

对应<param-value>classpath:springmvc-servlet.xml</param-value>中的值

 <?xml version="1.0" encoding="GBK"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
     <!--处理器映射器-->
     <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
     <!--处理器适配器-->
     <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
 
     <!--视图解析器-->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
         <!--前后缀-->
         <property name="prefix" value="/WEB-INF/jsp/"/>
         <property name="suffix" value=".jsp"/>
     </bean>
 
     <bean id="/hello" class="com.yl.controller.HelloController"/>
 </beans>

建立controller类

 package com.yl.controller;
 
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.Controller;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 public class HelloController implements Controller {
     @Override
     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
         ModelAndView mv = new ModelAndView();
         //业务代码
         String result = "HelloSpringMVC";
         mv.addObject("msg",result);
         //视图跳转
         mv.setViewName("test");//再视图解析器中拼接前后缀
         return mv;
    }
 }

对应的前端页面就是WEB-INF/jsp/test.jsp

执行原理:

用户输入hello请求-》

 

3.使用注解开发

1.配置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">
 
     <!--配置DispatcherServlet:这个是SpringMVC的核心,请求转发器或前端控制器-->
     <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>
         <!--启动级别:1:和服务器一起启动-->
         <load-on-startup>1</load-on-startup>
     </servlet>
     <!--
     再springmvc中,/和/*的区别:
     /:只匹配所有的请求,不会去匹配jsp页面
     /*:匹配所有的请求,包括jsp页面
     -->
     <servlet-mapping>
         <servlet-name>springmvc</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>
 
 </web-app>

2.springmvc-servlet.xml

 <?xml version="1.0" encoding="GBK"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
         https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/mvc
         https://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
     <!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
     <context:component-scan base-package="com.yl.controller"/>
     <!--让spring MVC不处理静态资源:.css .js .html .mp3 .mp4-->
     <mvc:default-servlet-handler/>
     <!--自动完成HandlerMapping和HandlerAdapter的注入-->
     <mvc:annotation-driven/>
 
     <!--视图解析器-->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
         <!--前后缀-->
         <property name="prefix" value="/WEB-INF/jsp/"/>
         <property name="suffix" value=".jsp"/>
     </bean>
 
 </beans>

3.controller

 package com.yl.controller;
 
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 @Controller
 public class HelloController {
 
     @RequestMapping("/h1")
     public String hello(Model model){
         //封装数据
         model.addAttribute("msg","Hello,SpringMVCAnnotation");
         return "hello";//返回的就是视图的名字,会被视图解析器处理
    }
 }

 

4.RequestMapping

可以放在类和方法上

 @RequestMapping("/hc1")
 public class HelloController {
 
     @RequestMapping("/h1")
     public String hello(Model model){}//此时访问路径是/hc1/h1
 }

 

5.RestFul风格

 @RequestMapping(value = "/hello/{a}/{b}",method = RequestMethod.GET)
 public String hello(@PathVariable int a,@PathVariable int b, Model model){
     int result = a + b;
     //封装数据
     model.addAttribute("msg","结果为" + result);
     return "hello";//返回的就是视图的名字,会被视图解析器处理
 }

原来的访问地址:/hello?a=1&b=2

此时访问的地址:/hello/1/2

 

6.重定向和转发

 //转发
 //return "test";
 return "forward:hello";
 //return "forward:/WEB-INF/jsp/hello.jsp";
 //重定向
 //return "redirect:/index.jsp";
 //return "redirect:hello";

以上方式都可以

 

7.接收请求参数

 @GetMapping("/t1")
 public String test(@RequestParam("username") String name, Model model){
     System.out.println("name="+name);
     model.addAttribute("msg",name);
     return "test";
 }

@RequestParam()限制了前端传参的名字,此时只能通过username传值,name失效。

 /*
     1.接收前端用户传递的参数,假设名字直接再方法上,可以直接使用
     2.假设传的是一个对象,匹配对象中的字段名,符合则成功匹配,否则不匹配的字段返回null
     */
 @GetMapping("/t2")
 public String test2(User user, Model model){
     model.addAttribute("msg",user.toString());
     return "test";
 }

 

 

posted @ 2020-09-08 22:10  Fabulo  阅读(368)  评论(0)    收藏  举报