SpringMVC-03-SpringMVC程序

3.1、步骤

  1. 配置web.xml,注册DisPatcherServlet

     <?xml version="1.0" encoding="UTF-8"?>
     <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
              version="5.0">
     ​
         <servlet>
             <servlet-name>springmvc</servlet-name>
             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
             <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
             <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>
     ​
         <!--/ 匹配所有的请求;(不包括.jsp)-->
         <!--/* 匹配所有的请求;(包括.jsp)-->
         <servlet-mapping>
             <servlet-name>springmvc</servlet-name>
             <url-pattern>/</url-pattern>
         </servlet-mapping>
     </web-app>
  2. 编写MVC配置文件:springmvc-servlet.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"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
     </beans>
  3. 添加处理器映射器

     <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
  4. 添加处理器适配器

     <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
  5. 添加视图解析器

     <!--视图解析器:DispatcherServlet给他的ModelAndView-->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
         <!--前缀-->
         <property name="prefix" value="/WEB-INF/jsp/"/>
         <!--后缀-->
         <property name="suffix" value=".jsp"/>
     </bean>
  6. 编写业务Controller

     package com.mosang.controller;
     ​
     import org.springframework.web.servlet.ModelAndView;
     import org.springframework.web.servlet.mvc.Controller;
     ​
     import javax.servlet.http.HttpServletRequest;
     import javax.servlet.http.HttpServletResponse;
     ​
     //注意:这里我们先导入Controller接口
     public class HelloController implements Controller {
     ​
         public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
             //ModelAndView 模型和视图
             ModelAndView mv = new ModelAndView();
     ​
             //封装对象,放在ModelAndView中。Model
             mv.addObject("msg","HelloSpringMVC!");
             //封装要跳转的视图,放在ModelAndView中
             mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
             return mv;
         }
     ​
     }
  7. SpringIOC容器中,注册bean

     <!--Handler-->
     <bean id="/hello" class="com.mosang.controller.HelloController"/>
  8. 运行测试 hello.jsp

     <%@ page contentType="text/html;charset=UTF-8" language="java" %>
     <html>
     <head>
         <title>Hello</title>
     </head>
     <body>
     ${msg}
     </body>
     </html>

3.2、报错

可能遇到的问题:访问出现404,排查步骤:

  1. 查看控制台输出,看一下是不是缺少了什么jar包。

  2. 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖!

  3. 重启Tomcat 即可解决!

 

3.3、注解开发mvc

  1. 导入基本依赖

  2. 配置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">
         <servlet>
             <servlet-name>springmvc</servlet-name>
             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
             <init-param>
                 <param-name>contextConfigLocation</param-name>
                 <param-value>classpath:springmvc-servlet.xml</param-value>
             </init-param>
             <load-on-startup>1</load-on-startup>
         </servlet>
         <servlet-mapping>
             <servlet-name>springmvc</servlet-name>
             <url-pattern>/</url-pattern>
         </servlet-mapping>
     </web-app>
  3. 新建Spring配置文件springmvc-servlet

     <?xml version="1.0" encoding="UTF8"?>
     <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
            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">
         <!--    自动扫描指定包下的注解,由IOC统一管理-->
         <context:component-scan base-package="com.mosang.controller"/>
     <!--    让mvc不处理静态资源 .css .js .html .mp3-->
         <mvc:default-servlet-handler/>
     <!--    支持注解驱动-->
         <mvc:annotation-driven/>
     <!--    视图解析器-->
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
             <property name="prefix" value="/WEB-INF/jsp/"/>
             <property name="suffix" value=".jsp"/>
         </bean>
     </beans>
    • 注意beans的导入包路径
  4. 创建controller并用注解实现

     package com.mosang.controller;
     ​
     import org.springframework.stereotype.Controller;
     import org.springframework.ui.Model;
     import org.springframework.web.bind.annotation.RequestMapping;
     ​
     //使IOC容器初始化时自动检测到
     @Controller
     //可作用于类上,加装一层(一般不用)
     //@RequestMapping("/annotation")
     public class HelloController {
     //    映射请求路径
         @RequestMapping("/hello")
         public String hello(Model model){
             //封装数据
             model.addAttribute("msg","HelloAnnotation!!");
             return "hello";//由视图解析器处理
         }
     ​
     }
  5. 创建视图层

    在/WEB-INF/jsp下创建hello.jsp,名称需与映射请求路径一致

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <html>
 <head>
     <title>Title</title>
 </head>
 <body>
 ${msg}
 </body>
 </html>

测试:

3.4、Controller配置

  • 控制器负责提供访问应用程序的行为,通常通过接口的定义或注解两种方法来实现

  • 控制器负责解析用户的请求并将其转换为一个模型

  • SpringMVC中一个控制器可以有多个方法

  • SpringMVC中,对于Controller的配置有很多种

Controller是一个接口

在 org.springframework.web.servlet.mvc.Controller 包下

接口中只有一个方法

 @FunctionalInterface
 public interface Controller {
    /**
     * Process the request and return a ModelAndView object which the DispatcherServlet
     * will render. A {@code null} return value is not an error: it indicates that
     * this object completed request processing itself and that there is therefore no
     * ModelAndView to render.
     * @param request current HTTP request
     * @param response current HTTP response
     * @return a ModelAndView to render, or {@code null} if handled directly
     * @throws Exception in case of errors
     */
    @Nullable
    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
 ​
 }

只要实现了Controller接口的类,就是一个控制器

1、实现接口方法

 public class controller implements Controller {
     @Override
     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
         ModelAndView mv = new ModelAndView();
         mv.addObject("msg","hellocontroller");
         mv.setViewName("hello");
 ​
         return mv;
     }
 }

需要在配置文件中注册bean,name:请求路径,class:对应处理请求的类

 <bean name="/test1" class="com.mosang.controller.controller"/>

若使用实现接口方法,则一个控制器中只有一个方法,若要多个方法,则只能新建多个类

2、注解实现

 @Controller
 public class controller1 {
     @RequestMapping("/test2")
     public String test(Model model){
         model.addAttribute("msg","controller1");
         return "hello"; //封装并跳转的页面名称
     }
 }
  • @Controller 代表这个类被spring接管,这个类中的所有返回值为String、且有具体的页面可以跳转的方法,会被视图解析器解析

  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能够找到定义的控制器,需要在配置文件中声明

 <context:component-scan base-package="com.mosang.controller"/>

多个请求可以指向同一个页面,但页面的显示结果是不一样的,取决于传递的参数值

3.5、RequestMapping配置

  • @RequestMapping用于映射url到控制器类或一个特定的处理程序

  • 可作用于类上,也可作用于方法上

    • 若仅作用在方法上:

       @RequestMapping("/test2")
       public String test(Model model){
           model.addAttribute("msg","controller1");
           return "hello"; 
       }

      请求路径为/test2

    • 若同时作用于类和方法上:

       @Controller 
       @RequestMapping("/control")
       public class controller1 {
           @RequestMapping("/test2")
           public String test(Model model){
               model.addAttribute("msg","controller1");
               return "hello"; //封装并跳转的页面名称
           }
       }

      请求路径为/control/test2

即需要先指定类路径名在指定方法路径名

Tomcat刷新

  1. 改变java代码:Redeployed 重新发布

  2. 改变xml配置:Restart 重启Tomcat

  3. 改变html网页: 刷新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值