springMVC

springMVC

1:配置与流程

1:DispatcherServlet

前置控制器,前端请求拦截器,Http拦截器,配置在web.xml中,拦截前端请求

<!--配置到springring容器中-->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--启动顺序,越小优先级越高-->
    <load-on-startup>1</load-on-startup>
</servlet>
<!--拦截前端请求-->
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

2:HandlerMapping

处理映射器,DispatcherServlet,选择合适的映射器,讲前端请求交给合适的控制器来(Controller)处理,配置在dispatcher-servlet.xml,并且注入到ioc

<!--在ioc注册映射器-->
<bean id="simpleUrlHandlerMapping"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <!-- /hello 路径的请求交给 id 为 helloController 的控制器处理-->
            <prop key="/hello">helloController</prop>
        </props>
    </property>
</bean>

3:Controller

控制器,处理DispatcherServlet递送过来的请求,代码逻辑区域,在dispatcher-servlet.xml中注册到ioc

<!--在ioc注册控制器-->
<bean id="helloController" class="controller.HelloController"></bean>

4:ModelAndView

模型和视图,处理控制器的模型(数据)和视图(逻辑视图名字,jsp…),并将*模型和视图名发送给DispatcherServlet

public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
    // 处理逻辑
    ....
    // 返回给 DispatcherServlet
    return mav;
}

5:ViewResolver

视图解析器,为返回到DispatcherServlet 中的逻辑视图,匹配合适的物理视图(jsp…)

6:View

视图,通过View对象的render()方法进行视图渲染,得到页面

2:入门使用

1:配置式

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">
    
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
    
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
    
<!--配置到springring容器中-->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--启动顺序-->
    <load-on-startup>1</load-on-startup>
</servlet>
    
<!--拦截前端请求-->
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2:dispatcher-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">
    <!--在ioc注册映射器-->
    <bean id="simpleUrlHandlerMapping"
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <!-- /hello 路径的请求交给 id 为 helloController 的控制器处理-->
                <prop key="/hello">helloController</prop>
            </props>
        </property>
    </bean>
    <!--在ioc注册控制器-->
    <bean id="helloController" class="controller.HelloController"></bean>
</beans>
3:index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hello</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>

4:controller
package controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mav = new ModelAndView("index.jsp");
        mav.addObject("message", "Hello Spring MVC");  return mav;
    }
}

2:注解式

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">
    
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
    
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
    
<!--配置到springring容器中-->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--启动顺序-->
    <load-on-startup>1</load-on-startup>
</servlet>
    
<!--拦截前端请求-->
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2:dispatcher-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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--组件扫描,针对注解-->
    <context:component-scan base-package="controller"/>
</beans>
3:index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hello</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
4:controller
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController  {
@RequestMapping("/hello")
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
    ModelAndView mav = new ModelAndView("index.jsp");
    mav.addObject("message", "Hello Spring MVC");  return mav;
}
}

3:优化式

1:ViewResolve详细配置

增强用户体验,防止信息泄露

<!--在dispatcher-servlet.xml配置视图解析器-->
<!--目的:在/WEB-INF/page/下存放所需视图文件,防止通过直接访问根目录,如localhost/index.jsp导致信息泄露-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/page/" />
    <property name="suffix" value=".jsp" />
</bean>
2:demo
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">
    
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
    
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
    
<!--配置到springring容器中-->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--启动顺序-->
    <load-on-startup>1</load-on-startup>
</servlet>
    
<!--拦截前端请求-->
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2:dispatcher-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"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--组件扫描,针对注解-->
<context:component-scan base-package="controller"/>

<!--视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/page/" />
    <property name="suffix" value=".jsp" />
</bean>

</beans>
3:HelloController
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;



@Controller
public class HelloController  {
@RequestMapping("/hello")
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
    ModelAndView mav = new ModelAndView("hello");
    mav.addObject("message", "Hello Spring MVC");  return mav;
}
}

4:index.jsp
<%--
  Created by IntelliJ IDEA.
  User: chenht
  Date: 2020/7/13
  Time: 8:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <h1>page</h1>
    <title>page_hello</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>

5:目录

在这里插入图片描述

3:数据交互

1:得到前端数据

目录

在这里插入图片描述

test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<h1>参数传递到控制器</h1>
<title>paramToController</title>
</head>
<body>

<form action="/param" role="form">
用户名:<input type="text" name="userName"><br/>
密码:<input type="text" name="password"><br/>
<input type="submit" value="提  交">
</form>
<h1>${message}</h1>
</body>
</html>
1:HttpServletRequest
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class ParamController {
@RequestMapping("/param")
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
    String userName = httpServletRequest.getParameter("userName");
    String password = httpServletRequest.getParameter("password");
    System.out.println(userName);
    System.out.println(password);
    ModelAndView mav = new ModelAndView("hello");
    mav.addObject("message", "Hello Spring MVC");  return mav;
}
}

2:同名匹配规则

耦合度高

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class ParamController {
@RequestMapping("/param")
    //userName =test.jsp中的userName,password =test.password
public ModelAndView handleRequest(String userName, String password) throws Exception {
    System.out.println(userName);
    System.out.println(password);
    ModelAndView mav = new ModelAndView("hello");
    mav.addObject("message", "Hello Spring MVC");  return mav;
}
}
3:注解@RequestParam
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class ParamController {
@RequestMapping("/param")
public ModelAndView handleRequest(@RequestParam("name") String userName,
                                  @RequestParam("word")  String password) throws Exception {
    System.out.println(userName);
    System.out.println(password);
    ModelAndView mav = new ModelAndView("hello");
    mav.addObject("message", "Hello Spring MVC");  return mav;
}
}

在这里插入图片描述

value : name 属性的名称是什么,value 属性都可以默认不写
required :是否必须要有该参数,可以设置为【true】或者【false】
defaultvalue :设置默认值
4:模型传参

*要求=====前台参数名字必须和模型中的字段名一样*

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import pojo.User;


@Controller
public class ParamController {
@RequestMapping("/param")
public ModelAndView handleRequest(User user) throws Exception {
    System.out.println(user.getUserName());
    System.out.println(user.getPassword());
    ModelAndView mav = new ModelAndView("hello");
    mav.addObject("message", "Hello Spring MVC");  return mav;
}
}

在这里插入图片描述

2:展示后台数据

在这里插入图片描述

test2.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" import="java.util.*" isELIgnored="false" %>
<html>
<head>
    <title>Spring MVC 数据回显</title>
</head>
<body>
<h1>回显数据:${message}</h1>
</body>
</html>
1:HttpServletRequest

RepsonseController

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class RepsonseController {
    @RequestMapping("/value")
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        httpServletRequest.setAttribute("message","成功!");
        return new ModelAndView("test2");
    }
}

2:ModelAndView

RepsonseController

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class RepsonseController {
@RequestMapping("/value")
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
    ModelAndView mv=   new ModelAndView("test2");
    httpServletRequest.setAttribute("message","成功!");
    mv.setViewName("test2");
    return  mv;
}
}
3:Model
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class RepsonseController {
@RequestMapping("/value")
public String handleRequest(Model model) throws Exception {
    model.addAttribute("message","成sssssssssssssssssssssssssss功!");
    return  "test2";
}
}
4:@ModelAttribute
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class RepsonseController {

@ModelAttribute
public void model(Model model) {
    model.addAttribute("message", "wwwwwwwwwwwwwwwwwwww");
}

@RequestMapping("/value")
public String handleRequest() throws Exception {
    return  "test2";
}
}

这样写就会在访问控制器方法 handleRequest() 时,会首先调用 model() 方法将 message 添加进页面参数中去,在视图中可以直接调用,但是这样写会导致该控制器所有的方法都会首先调用 model() 方法,但同样的也很方便,因为可以加入各种各样的数据。

3:客户端跳转

前面不管是地址 /hello 跳转到 index.jsp 还是 /test 跳转到 test.jsp,这些都是服务端的跳转,也就是 request.getRequestDispatcher("地址").forward(request, response);

方式一

@RequestMapping("/jump")
public ModelAndView jump() {
ModelAndView mav = new ModelAndView("redirect:/value");
return mav;
}

方式二

@RequestMapping("/jump")
public String jump() {
return "redirect: ./hello";
}

4:处理乱码

针对post方法,同servlet,直接作用在request上

在web.xml中添加配置

<filter>
    <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

5:上传文件

1:jar

注意: 需要先导入 commons-io-1.3.2.jarcommons-fileupload-1.2.1.jar 两个包

2:web.xml配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
3:jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试文件上传</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="picture">
    <input type="submit" value="上 传">
</form>
</body>
</html>
4:controller
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

//接收uplode页面传递过来的数据,并进行业务逻辑
@RequestMapping(value = "/upload" ,method = {RequestMethod.POST})
public String upload(@RequestParam("picture") MultipartFile picture) throws Exception {
    System.out.println(picture.getOriginalFilename());
    //跳转到指定的url路径或者页面
    return "redirect:/value";
   // return "redirect:/index.jsp";
}

//跳转到uplode页面
@RequestMapping("/test2")
public ModelAndView upload() {
    return new ModelAndView("upload");
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值