SpringMVC-SpringMVC基础

Posted jiaxing-java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC-SpringMVC基础相关的知识,希望对你有一定的参考价值。

SpringMVC

ssm:mybatis + Spring + SpringMVC

SpringMVC:SpringMVC的执行流程

MVC:模型(dao,serivce),视图(jsp),控制器(Servlet)

dao:连接数据库

service:业务实现(转发,重定向)

Servlet:接收前端数据传递给service,后接收service层要执行的操作返回给前端

回顾Servlet

  1. 创建类,继承HttpServlet

    public class HelloServlet extends HttpServlet 
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
            // 1.获取前端参数
            String method = req.getParameter("method");
            if (method.equals("add"))
                req.getSession().setAttribute("msg","执行了add方法");
            
            if (method.equals("delete"))
                req.getSession().setAttribute("msg","执行了delete方法");
            
    
            // 2.调用业务层
            // 3.视图转发或者重定向
            req.getRequestDispatcher("/WEB-INF/test.jsp").forward(req,resp);
        
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
            doGet(req, resp);
        
    
    
  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>hello</servlet-name>
            <servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    
        <!--配置超时时间-->
        <!--<session-config>
            <session-timeout>15</session-timeout>
        </session-config>-->
    
        <!--配置欢迎页-->
        <!--<welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>-->
        
    </web-app>
    
  3. 创建(表单)访问页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    <form action="/hello" method="post">
        <input type="text" name="method">
        <input type="submit">
    </form>
    
    </body>
    </html>
    
  4. 返回页

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    $msg
    
    </body>
    </html>
    
  5. 配置Tomcat

  6. 运行

Spring:大杂烩,我们可以将SpringMVC中所有要用得到bean,注册到Spring中

第一个SpringMVC程序

  1. 现在Module springmvc-02-hellomvc,添加框架支持,选中WebApplication

  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">
    
        <!--注册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>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>
    
  3. 配置springmvc-servlet文件

    <?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
            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"/>
        <!--视图解析器:DispatcherServlet给它的ModelAndView-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <!--后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>
    
  4. 创建HelloServlet类实现Controller接口

    public class HelloController implements Controller 
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception 
            // ModelAndView 模型和视图
            ModelAndView mv = new ModelAndView();
            
            // 封装对象,放在ModelAndView中。Model
            mv.addObject("msg","HelloSpringMVC");
            mv.setViewName("hello"); // WEB-INF/jsp/hello.jsp
            return mv;
        
    
    
  5. 将自己的类交给SpringIOC容器,注册bean(写在springmvc-servlet文件中)

    <!--Handler-->
    <bean id="/hello" class="com.kuang.controller.HelloController"/>
    
  6. 写要跳转的jsp页面,显示ModelAndView存放的数据,以及我们的正常页面

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

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

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

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

  3. 查看ApplicationContext的路径,两个路径不能同样使用“/”

  4. 重启Tomcat

SpringMVC执行流程分析:

  1. DispaerServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
    • 假设我们请求的url为:http://localhost:8080/SpringMVC/hello
    • 如上url拆分成三部分:
      • http://localhost:8080 :服务器域名
      • SpringMVC:部署在服务器上的web站点
      • hello:表示控制器
    • 通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器
  2. HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
  3. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
  4. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
  5. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler
  6. Handler让具体的Controller执行。
  7. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
  8. HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
  9. DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
  10. 最终视图呈现给用户。

使用注解开发SpringMVC

同样需要注意报404的问题

  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-->
        <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>
    
            <!--启动级别-->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>
    
  2. 配置springmvc-servlet文件

    <?xml version="1.0" encoding="UTF-8"?>
    <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.kuang.controller"/>
        <!--让SpringMVC不处理静态资源-->
        <mvc:default-servlet-handler/>
        <!--
        支持mvc注解驱动
            在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>
    
  3. 在WEB-INF下创建视图解析器相对应文件夹及页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    
    $msg
    
    </body>
    </html>
    
  4. 创建Controller类

    @Controller
    @RequestMapping("/hello") // 写在类上后请求地址相应的要加上
    public class HelloController 
    
        @RequestMapping("/h1")
        public String hello(Model model)
            // 封装数据
            model.addAttribute("msg","Hello,SpringMVCAnnotation!");
    
            return "hello"; // 会被视图解析器处理,实现拼接
        
    
    
    
  5. 配置Tomcat

以上是关于SpringMVC-SpringMVC基础的主要内容,如果未能解决你的问题,请参考以下文章

python基础教程(第二版)

基础架构基础服务基础平台基础中间件等等

Python运维开发基础01-语法基础

JAVA基础入门教程 -

iOS UIScrollView基础

Scala 基础—— 基础类型和基础操作