Spring框架学习笔记3——MVC

Spring MVC架构图

M——模型(Model)
数据,dao,bean
V——视图(View)
网页、JSP,用来展示模型中的数据
C——控制器(Controller)
把不同的Model显示到不同的View上,Servlet扮演这样的角色。

一、通过XML配置/注解配置的方式创建例子

XML配置

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

web.xml
拦截所有的请求,交由Spring MVC的后台控制器来处理。
<?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">

    <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>
    <bean id="helloController" class="controller.HelloController"></bean>
</beans>
Spring MVC的映射配置文件
package controller;

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

public class HelloController implements Controller {

	public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
		ModelAndView mav = new ModelAndView("index.jsp");//表示视图的是index.jsp
		mav.addObject("message", "Hello Spring MVC");//模型数据的是 message,内容是 “Hello Spring MVC”
		//通过 ModelAndView 对象把模型和视图结合在一起
		return mav;
	}
}

Controller
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
 
<h1>${message}</h1>

index.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"
       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"/>
    <!--删除XML的配置,增加一句组件扫描-->
</beans>
package controller;

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

@Controller
//声明控制器
@RequestMapping("/adress")
//如果作用在类上,那么相当于给该类所有配置的映射地址前加上了一个地址。
//即访问地址:localhost/adress/hello
public class HelloController{

	@RequestMapping("/hello")
	//路径/hello会映射到该方法上
	public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
		ModelAndView mav = new ModelAndView("index");
		mav.addObject("message", "Hello Spring MVC");
		return mav;
	}
}

为防止数据泄露,将JSP 文件配置在【WEB-INF】文件夹中的【page】文件夹下
【WEB-INF】是 Java Web 中默认的安全目录
在 dispatcher-servlet.xml 文件中做如下配置:

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/page/" />
    <property name="suffix" value=".jsp" />
</bean>
该解析器是遵循着一种约定:会在视图名上添加前缀和后缀,进而确定一个 Web 应用中视图资源的物理路径的。
前缀:/WEB-INF/page/
逻辑视图名:index
后缀:.jsp

二、Spring MVC请求跟踪:

1、请求到达DispatcherServlet(前端控制器)
Servlet拦截HTTP请求,并将请求发送给Spring MVC控制器。
2、处理器映射(HandlerMapping)
处理器映射会根据请求所携带的URL信息来进行决策,使DispatchServlet确定请求下一站。
3、DispatchServlet将请求发送给选中的控制器,到达控制器,请求卸下负载(用户请求)等待控制器处理完这些信息。
4、控制器将返回信息(Model)打包,并且表示出用于渲染输出的视图名(逻辑视图名),接下来将模型和视图名(封装到ModelAndView)发送回DispatcherServlet。
5、视图解析器
将逻辑视图名匹配为一个特定的视图实现。
6、视图
交付模型数据,视图使用模型数据渲染出结果,结果通过响应对象传递给客户端。

补充:
1、使用 @RequestParam("前台参数名") 来注入
@RequestParam 注解有三个变量:
value :指定 name 属性的名称是什么,value 属性都可以默认不写
required :是否必须要有该参数,可以设置为【true】或者【false】
defaultvalue :设置默认值
要求:前台参数名字必须和模型中的字段名一样

2、文件上传
2.1导包
commons-io-1.3.2.jar 和 commons-fileupload-1.2.1.jar
2.2配置上传解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

2.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>

2.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.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

	@RequestMapping("/upload")
	public void upload(@RequestParam("picture") MultipartFile picture) throws Exception {
		System.out.println(picture.getOriginalFilename());
	}

	@RequestMapping("/test2")
	public ModelAndView upload() {
		return new ModelAndView("upload");
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值