zoukankan      html  css  js  c++  java
  • springmvc

    springmvc:是一个轻量级的,基于请求响应的mvc框架。

    实例类:

    package com.tedu.pojo;
    
    public class User {
     private String name;
     private Integer age;
     private String  addr;
     public User() {
        }
    public User(String name, Integer age, String addr) {
        this.name = name;
        this.age = age;
        this.addr = addr;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", addr=" + addr + "]";
        
    }
     
    }

    springmvc-config.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" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                            http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                            http://www.springframework.org/schema/context
                              http://www.springframework.org/schema/context/spring-context-4.0.xsd">
        
        <!-- 1.配置前端控制器放行静态资源(html/css/js等,否则静态资源将无法访问) -->
        <mvc:default-servlet-handler/>
        
        <!-- 2.配置注解驱动,用于识别注解(比如@Controller) -->
        <mvc:annotation-driven></mvc:annotation-driven>
        
        <!-- 3.配置需要扫描的包:spring自动去扫描 base-package 下的类,
            如果扫描到的类上有 @Controller、@Service、@Component等注解,
            将会自动将类注册为bean 
         -->
        <context:component-scan base-package="com.tedu.controller"></context:component-scan>
        
        <!-- 4.配置内部资源视图解析器
            prefix:配置路径前缀
            suffix:配置文件后缀
         -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
        
        
    </beans>

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
      <display-name>day16-springmvc</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <!--配置springmvc的前端控制器(DispatherServlet) -->
      <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-config.xml</param-value>
      </init-param>
      </servlet>
      <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <!--拦截除了jsp以外的其他请求 -->
      <url-pattern>/</url-pattern>
      </servlet-mapping>
      <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
      
      
    </web-app>

    测试类:

    package com.tedu.controller;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.List;
    
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.tedu.pojo.User;
    
    @Controller
    public class HelloController {
        //http://localhost:8080/day16-springmvc/hello
        @RequestMapping("/hello")
        public String hello() {
            System.out.println("hello springmvc...");
            return "home";
        }
    
      /*1.springmvc参数绑定
       * 基本数据类型绑定
       * 
       * */
        @RequestMapping("/testParam1")
        public String testParam1(String name, Integer age, String addr) {
            System.out.println("HelloController.testParam1");
            System.out.println("name="+name);
            System.out.println("age="+age);
            System.out.println("addr="+addr);
            return "home";
        
    }
        @RequestMapping("/testParam2")
        public String testParam2(User user) {
           System.out.println(user);
            return "home";
        
    }
        @RequestMapping("/testparam3")
        public String param3(Date date){
            System.out.println("date="+date.toLocaleString());
            return "home";
        }
        /* 自定义日期转换格式 */
        @InitBinder
        public void InitBinder (ServletRequestDataBinder binder){
            binder.registerCustomEditor(java.util.Date.class, 
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true)
            );
        }
        /* 测试请求转发(forward) */
        @RequestMapping("/testForward")
        public String testForward() {
            
            System.out.println("HelloController.testForward()");
            return "forward:/hello";
        }
        /* 测试请求重定向(Readirect) */
        @RequestMapping("/testRedirect")
        public String testRedirect() {
            
            System.out.println("HelloController.testRedirect()");
            return "redirect:/hello";
        }
        /* 测试Post提交的中文参数是否存在乱码问题 */
        /* 测试请求重定向(Readirect) */
        @RequestMapping("/testGet")
         public String testGet(String username, String[] like) {
            System.out.println(username);
            System.out.println(Arrays.toString(like));
            return "home";
        }
        @RequestMapping("/testPost")
        public String testPost(String username, String[] like) {
            System.out.println(username);
            System.out.println(Arrays.toString(like));
                return "home";
        }
        
        /*响应数据(Model和JSON)*/
        /**当浏览器访问/testModel时,
         * 在方法中获取到的User对象转发带到home.jsp,在JSP中取出并显示
         * */
        @RequestMapping("/testModel")
        public String testModel(Model model) {
            User user = new User(小明",30,"泰国");
            User user1 = new User("小亮",30,"泰国");
            List<User> list = new ArrayList<>();
            list.add(user);
            list.add(user1);
            model.addAttribute("user", user);
                return "home";
        }
        @RequestMapping("/testModel2")
        public String testModel2(Model mode2) {
            User user = new User("小明",30,"泰国");
            User user1 = new User("小亮",30,"日本");
            List<User> list = new ArrayList<>();
            list.add(user);
            list.add(user1);
            mode2.addAttribute("list", list);
                return "home";
        }
        
        /*测试响应数据JSON1*/
        @RequestMapping("/testJSON1")
        @ResponseBody
        public User testJSON1() {
         User user = new User("小王",30,"泰国");
                return user;
        }
        /*测试响应数据JSON2*/
        @RequestMapping("/testJSON2")
        @ResponseBody
        public List<User> testJSON2() {
            List<User> list = new ArrayList<>();
            list.add(new User("小明",30,"美国国"));
            list.add(new User("小王",30,"泰国"));
            list.add(new User("小狼",30,"日本"));
               return list;
        }
    }

    jsp页面

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>hello springmvc~~~</h1>
    <hr/>
    ${user.name}
    ${user.age}
    ${user.addr}
    <hr/>
    <c:forEach items="${list}" var="user">
    ${user.name}:${user.age}:${user.addr}<br/>
    </c:forEach>
    
    </body>
    </html>

     通用页面跳转

    /* 通用的页面跳转方法*/
        @RequestMapping("/{pageName}")
        public String toPage(@PathVariable String pageName) {
            return pageName;
        }

     mvc设计模式

    MVC设计模式是一种通用的软件编程思想
    在MVC设计模式中认为, 任何软件都可以分为三部分组成:
    (1)控制程序流转的控制器(Controller)
    (2)封装数据处理数据的模型(Model)
    (3)负责展示数据的视图(view)
    并且在MVC设计思想中要求一个符合MVC设计思想的软件应该保证上面这三部分相互独立,互不干扰,每一个部分只负责自己擅长的部分。
    如果某一个模块发生变化,应该尽量做到不影响其他两个模块。这样做的好处是,软件的结构会变得更加的清晰,可读性强。有利于后期的扩展和维,并且代码可以实现复用。

    springmvc的核心组件:

    前端控制器DispatcherServlet

    作用:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。

    处理器映射器HandlerMapping
    作用:根据请求的url查找Handler
    HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

    处理器适配器HandlerAdapter
    作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
    通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

    处理器Handler
    Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
    由于Handler涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler。

    ViewResolver:视图解析器
    作用:负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,
    再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
     
     
     

    第一步:发起请求到前端控制器(DispatcherServlet)
    第二步:前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找
    第三步:处理器映射器HandlerMapping向前端控制器返回Handler
    第四步:前端控制器调用处理器适配器去执行Handler
    第五步:处理器适配器去执行Handler
    第六步:Handler执行完成给适配器返回ModelAndView
    第七步:处理器适配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一个底层对象,包括 Model和view
    第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
    第九步:视图解析器向前端控制器返回View
    第十步:前端控制器进行视图渲染。视图渲染将模型数据(在ModelAndView对象中)填充到request域
    第十一步:前端控制器向用户响应结果

  • 相关阅读:
    AC自动机
    哈希与哈希表
    Trie字典树
    整除
    P3375 【模板】KMP字符串匹配
    KMP算法
    Luogu-P1004 方格取数
    Luogu-P2758 编辑距离
    Luogu-P1018 乘积最大
    Luogu-P1880 [NOI1995]石子合并
  • 原文地址:https://www.cnblogs.com/ming-long/p/11627585.html
Copyright © 2011-2022 走看看