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