SpringMVC

作者: YasA | 来源:发表于2018-08-03 12:05 被阅读0次

    ------ SpringMVC ------

    (1).MVC简介
        - M(Model)
            * 模型负责业务逻辑,包含两层(业务数据、业务处理逻辑)
            * entity dao service 都属于模型层。
            
        - V(view)
            * 视图层负责显示界面,用户交互(收集用户信息)。属于视图的组件是不包含业务逻辑和控制逻辑的jsp
            
        - C(Controller)
            * 控制器是模型层和视图层之间的桥梁,用于控制流程。(Servlet项目中的单一控制器)
            
    (2).什么是 Spring web MVC
        - Spring MVC 是 spring框架一个非常重要的功能模块,实现了MVC结构。
          便于简单、快速开发MVC结构的web程序,SpringMVC提供了API封装了web开发常用的功能,简化了web过程。
    
    (3).Spring Web MVC核心组件(API)
        - DispatcherServlet (控制器,请求入口)
        - HandlerMapping (控制器,请求派发)
        - Controller (控制器,请求处理逻辑)
        - ModelAndView (模型,封装业务处理结果和视图)
        ---
        - ViewResolver (视图,视图显示处理器)
        
    (4).基于xml配置的mvc应用(步骤)
        1.创建web工程,导入Spring MVC 相关开发包。
        2.在src下添加Spring的xml配置文件(名称可以自定义 spring-mvc.xml)
        3.在web.xml中配置DispatcherServlet
        4.创建类实现Controller接口(处理业务逻辑 返回ModelAndView对象)
          创建jsp
        5.spring-mvc.xml 配置映射关系
    
    (5).Controller组件
        - Controller组件负责执行具体的业务逻辑,可以调用Dao组件,编写实现Controller接口及约定的方法。
    
    (6).ModelAndView组件
        - Controller组件约定方法执行后会返回一个ModelAndView对象,该对象可以封装模型数据和视图响应信息
          ModelAndView构造器:
            // viewName 是jsp页面的名称
            // modelAndView(String viewName,Map model)
            ModelAndView(String viewName);
            ModelAndView(String viewName,Map model)
            
    (7).web.xml 通过过滤器解决乱码 
    
    <!-- 配置过滤器 (解决乱码)-->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    /*
    1.测试
    2.登录页面 获取页面登录信息
    */

    // spring-mvc.xml
    /*
    1.维护映射关系(Controller)
    2.组件对象
    3.找到jsp文件路径
    */

    <?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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd     
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
            
            <!-- SimpleUrlHandlerMapping维护映射关系 -->
            <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
                <property name="mappings">
                    <props>
                        <!-- 配置组件 -->
                        <!-- 根据key值寻找组件(prop文本内容匹配bean的id) -->
                        <prop key="/hello.form">helloController</prop>
                        <prop key="/log.form">loginController</prop>
                    </props>
                </property>
            </bean>
            
            <!-- 组件对象 -->
            <bean id="helloController" class="com.controller.HelloController"/>
            <bean id="loginController" class="com.controller.LoginController"/>
            
            <!-- 定义ViewResolver组件  找到jsp文件路径-->
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <!-- 
                prefix:路径前缀
                suffix:路径后缀
                 -->
                <property name="prefix" value="/WEB-INF/jsp/"/>
                <property name="suffix" value=".jsp"/>
            </bean>
    </beans>
    
    

    // web.xml
    /*
    1.配置spring-mvc.xml文件(servlet)
    2.配置过滤器
    */

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        
        <!-- 配置门户 -->
        <welcome-file-list>
            <welcome-file>login.jsp</welcome-file>
        </welcome-file-list>
        
        <!-- 配置过滤器 (解决乱码)-->
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                <!-- 初始化编码 -->
            <init-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <!-- 配置spring-mvc.xml文件 -->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- spring-mvc.xml文件 指定环境配置位置(类路径) -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.xml</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>*.form</url-pattern>
        </servlet-mapping>
        
    </web-app>
    
    

    // HelloController

    package com.controller;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    import com.dao.Emp;
    
    public class HelloController implements Controller {
    
        /* handleRequest 主要功能功能:处理业务逻辑
         * 
         */
        public ModelAndView handleRequest(HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            //测试
            System.out.println("Hello Controller ......");
            // 前台页面获取值
            String name = request.getParameter("name");
            // 创建对象
            Emp emp = new Emp();
            emp.setId(1);
            emp.setName(name);
            emp.setAddress("IGaming");
            // 创建HashMap
            Map map = new HashMap<String, Emp>();
            map.put("e", emp);
            // 重定向 ModelAndView
            return new ModelAndView("index",map);
        }
    
    }
    
    

    // 创建Eemp实体类
    // LoginController

    package com.controller;
    import java.util.HashMap;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    public class LoginController implements Controller {
        /*
            1.获取信息
            2.处理业务逻辑
            3.封装业务处理结果和视图并返回到DispatcherServlet控制器请求入口。
        */
        public ModelAndView handleRequest(HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            // 页面获取信息
            String account = request.getParameter("account");
            String pwd = request.getParameter("pwd");
            // 创建HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            // 把值存到map集合
            map.put("account", account);
            map.put("pwd", pwd);
            // 封装业务处理结果和视图
            return new ModelAndView("index",map);
        }
    
    }
    
    
    (8).重定向
    
    // 重定向到登录页面
    RedirectView rv = new RedirectView("login.jsp");
    return new ModelAndView(rv);
    
    (9).基于注解配置的MVC应用
        - @RequesMapping 注解应用
        - @RequestMapping 可以在类定义的方法定义上
        - @RequesMapping 表明这个类或者方法与哪一个客户请求对应
        
    (10).请求页面参数值
        - SpringMvc获取请求参数有如下几种方法:
            * 用HttpServletRequest获取: request对象可以通过添加处理方法的参数获取
            * 使用@RequesParam注解
            * 使用自动机制封装成bean对象
    
    (11).向页面传值  
        - 当Controller组件处理后,需要jsp传值时,
            - 使用ModelMap参数对象
            - 使用ModelMap参数对象
            - 使用ModelAndView对象
            
            
    (12).重定向视图
        - 重定向方式可以采取以下几种方法:
            * 使用RedirectView 适合返回类型: ModelAndView
                return new ModelAndView();
                
            * 使用redirect:前缀 适合返回类型:字符串类型
                return "redirect:login.jsp";
    

    包结构:
    controller
    dao
    // spring-mvc.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:context="http://www.springframework.org/schema/context"
        xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd     
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
            
            <!-- 组件扫描 -->
            <context:component-scan base-package="com"/>
            
            <!-- 开启请求的注解扫描 -->
            <mvc:annotation-driven/>
            
            <!-- 定义ViewResolver组件  找到jsp文件路径-->
            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/jsp/" />
                <property name="suffix" value=".jsp" />
            </bean>
    </beans>
    
    

    // HelloController

    package com.controller;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    //@RequestMapping("/test") // http://localhost:8080/SpringMvcComment/test/hello.form
    public class HelloController {
        @RequestMapping("/hello.form") // @RequesMapping 注解应用 与   hello.form响应
        public String execute(){
            System.out.println("**********");
            return "index";
        }
        
    }
    
    

    // LoginController

    package com.controller;
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    import com.dao.User;
    
    @Controller
    public class LoginController {
        /*
        // 通过reques请求取值
        @RequestMapping("/log.form")
        public String execute(HttpServletRequest request){
            // 从页面获取值
            String acc = request.getParameter("account");
            String pwd = request.getParameter("pwd");
            // 测试
            System.out.println(acc+"||"+pwd);
            // 转发到index.jsp页面
            return "index";
        }
        */
        
        /*
        // 不通过request请求取值   (String account,String pwd) 对应login.jsp的name属性值
        @RequestMapping("/log.form")
        public String execute(String account,String pwd){
            // 直接从页面得到值
            System.out.println(account+"||"+pwd);
            // 转发到index.jsp页面
            return "index";
        }
        */
        
        /*
        // 不同名如何取值?  通过注解@RequestParam("pwd")
        @RequestMapping("/log.form")
        public String execute(String account,@RequestParam("pwd") String password){
            System.out.println(account + "||" + password);
            return "index";
        }
        */
        
        /*
        // 当需要取多个值的时候? 使用自动机制封装成bean对象
        @RequestMapping("/log.form")
        public String execute(User user){
            System.out.println(user.getAccount()+"||"+user.getPwd());
            return "index";
        } 
        */
        
        /*
        // 通过request页面传值
        @RequestMapping("/log.form")
        public String execute(User user,HttpServletRequest request){
            // 通过request绑定数据
    //      request.setAttribute("user", user);
            
            // 通过session绑定数据
            HttpSession session = request.getSession();
            session.setAttribute("u", user);
    //      return "index";
            // 重定向
            return "redirect:index.jsp";
            
        }
        */
        
        /*
        // 使用ModelMap向页面传值
        @RequestMapping("/log.form")
        public String execute(String account,@RequestParam("pwd") String password,ModelMap map){
            // 调用.addAttribute() 方法添加数据到ModelMap
            map.addAttribute("acct", account);
            map.addAttribute("pwd", password);
            // 转发到index.jsp页面
            return "index";
        }
        */
        
        /*
        // 使用ModelAndView向页面传值
        @RequestMapping("/log.form")
        public ModelAndView execute(HttpServletRequest request){
            // 获取请求资源路径
            String path = request.getRequestURI();
            System.out.println(path);
            // 从页面获取值
            String account = request.getParameter("account");
            String pwd = request.getParameter("pwd");
            // 创建HashMap存值(传值到页面)
            Map<String, Object> map = new HashMap<String, Object>(); // <String,String>也可以
            map.put("acct", account);
            map.put("pwd", pwd);
            // 重定向
            return new ModelAndView("index",map);
            
        }
        */
        
        /*
        @RequestMapping("/log.form")
        public String execute(User user,ModelMap map){
            map.addAttribute("acct", user.getAccount());
            map.addAttribute("pwd", user.getPwd());
            // 重定向
            return "index";
            
        }
        */
    }
    
    

    // jsp目录 index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
            <title>测试页面</title>
        </head>
        <body>
            <!-- ***${user.account }***${user.pwd }*** -->
            <!-- ***${u.account }***${u.pwd }*** -->
            <!-- ***${acct }***${pwd }***  -->
            ***${acct}***${pwd }***
        </body>
    </html>
    
    

    相关文章

      网友评论

          本文标题:SpringMVC

          本文链接:https://www.haomeiwen.com/subject/tveyvftx.html