SpringMVC笔记(二)

1. 创建SpringMVC程序

1.1 配置文件方式

  1. 创建web项目

  2. 配置pom.xml,导入依赖

  3. 配置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_4_0.xsd"
             version="4.0">
    
    
        <!--1.注册DispatcherServlet-->
        <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>
    
  4. 编写SpringMVC的配置文件,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>
    
  5. 添加处理映射器

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

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

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
    	<property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
    
  8. 编写Controller,要么实现Controller接口,要么使用注解,需要返回一个ModelAndView,装数据,封视图

    package top.linzeliang.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中
            // /WEB-INF/jsp/hello.jsp
            mv.setViewName("hello");
            return mv;
        }
    }
    
  9. 将类交给SpringIOC,注册Bean

    <!-- Handler -->
    <!-- id中要加斜杠 -->
    <bean id="/hello" class="top.linzeliang.controller.HelloController"/>
    
  10. 编写对应jsp页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>Kuangshen</title>
        </head>
        <body>
            ${msg}
        </body>
    </html>
    
  11. 启动Tomcat服务器,进行测试

    • 如果出现404错误,则检查lib包是否导入成功了

1.2 注解方式

  1. 创建web项目

  2. 配置pom.xml,导入依赖

    • Spring框架核心库

    • SpringMVC

    • Servlet

    • JSTL

    • 由于Maven可能存在资源过滤,所以要配置一下如下信息以防万一

      <build>   <resources>       <resource>           <directory>src/main/java</directory>           <includes>               <include>**/*.properties</include>               <include>**/*.xml</include>           </includes>           <filtering>false</filtering>       </resource>       <resource>           <directory>src/main/resources</directory>           <includes>               <include>**/*.properties</include>               <include>**/*.xml</include>           </includes>           <filtering>false</filtering>       </resource>   </resources></build>
      
  3. 配置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_4_0.xsd"         version="4.0">    <!--1.注册DispatcherServlet-->    <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>
    
  4. 添加SpringMVC配置文件,springmvc-servlet.xml

    • 再resource目录下添加springmvc-servlet.xml配置文件,配置文件的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能

      <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                           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="top.linzeliang.controller"/>    <!-- 让Spring MVC不处理静态资源 -->    <mvc:default-servlet-handler />    <!--       启用注解驱动       在spring中一般采用@RequestMapping注解来完成映射关系       要想使@RequestMapping注解生效       必须向上下文中注册DefaultAnnotationHandlerMapping       和一个AnnotationMethodHandlerAdapter实例       这两个实例分别在类级别和方法级别处理。       而annotation-driven配置帮助我们自动完成上述两个实例的注入。    -->    <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>
      
  5. 创建Controller类

    • @Controller是为了让SpringIOC容器初始化时自动扫描到
    • @RequestMapping是为了映射请求路径
    • 方法中的Model类型的参数是为了把Action中的数据带到视图中
    • 方法返回的结果是视图的名称,加上配置文件中的前后缀变成/WEB-INF/jsp/hello.jsp
    package top.linzeliang.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/HelloController")public class HelloController {    //真实访问地址 : 项目名/HelloController/hello    @RequestMapping("/hello")    public String sayHello(Model model){        //向模型中添加属性msg与值,可以在JSP页面中取出并渲染        model.addAttribute("msg","hello,SpringMVC");        //web-inf/jsp/hello.jsp        return "hello";    }}
    
  6. 创建视图层(页面)

    <%@ page contentType="text/html;charset=UTF-8" language="java" %><html>    <head>        <title>SpringMVC</title>    </head>    <body>        ${msg}    </body></html>
    
  7. 进行测试

上一篇:解决:javax.servlet.ServletException: Circular view path []: would dispatch back to the current....


下一篇:SpringMVC