SpringMVC的用法笔记

1. springmvc都做了什么

1.Controller为中心完成对系统流程的控制管理
2.从请求中搜集数据
3.对传入的参数进行验证
4.将结果返回给视图
5.针对不同的视图提供不同的解决方案
6.针对jsp视图技术提供标签库
7.拦截器
8.上传文件

2. spring -mvc的结构

  • DispatcherServlet:中央控制器,把请求给转发到具体的控制类。
  • Controller:具体处理请求的控制器(配置文件方式需要配置,注解方式不用配置)
  • handlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略。
  • ModelAndView:服务层返回的数据和视图层的封装类(无论是配置文件还是注解都不需要配置)。
  • ViewResolver & View:视图解析器,解析具体的视
  • Interceptors :拦截器,负责拦截我们定义的请求然后做处理工作(无论是配置文件方式还是注解都需要先创建再配置)。

3.mvc模式图

在这里插入图片描述

4. mvc流程

在这里插入图片描述

5. SpringMVC相关配置

在web.xml中配置中央控制器:
  <!-- 
  	中央控制器
   -->
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
springmvc的核心配置文件

文件的命名规则:中央控制器(servlet的名称)的名称+“-servlet.xml”。
其默认位置是在:WEB-INF下。如需要修改其位置,需要对其web.xml中的位置进行init初始化。
在这里插入图片描述

6. 三种handlerMapping映射策略

  1. BeanNameUrlHandlerMapping (默认)
<!-- 按着controller的name来映射寻找controller,默认存在 -->					
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
  1. SimpleUrlHandlerMapping
<!-- 使用简单url来映射 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/hello1.do">myController</prop>
			</props>
		</property>
	</bean>
  1. ControllerClassNameHandlerMapping

<!-- 控制类的类名控制器,访问时类名首字母需要小写 -->
	<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>

7. 视图解析器

视图解析器时来帮助视图对Controller返回的字符串进行字符串解析,跳转到相应的页面。
在这里插入图片描述

8. 控制器的类别

1.ParameterizableViewController(参数控制器)

<bean name="/toIndex.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
		<!-- 配置你所要跳转到视图的名称 -->
		<property name="viewName" value="index"></property>
	</bean>
  1. AbstractCommandController(命令控制器)
    在这里插入图片描述在这里插入图片描述3. FormController(表单控制器)
    1.只支持post请求方式
    2.表单控制器有简单的验证功能
    3.如果提交失败返回表单页面,如果提交成功就跳转到成功页面
    4.有收集表单数据的功能
    在这里插入图片描述在这里插入图片描述5.日期类型转换
    需要重写initBinder方法
    在这里插入图片描述

9 拦截器

拦截器时在客户端发送请求之后,还未到到controller之前的拦截,可用于用户的登录拦截等等。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

10 文件上传

上传文件配置:

<!-- bean的id是multipartResolver,不能随便定义 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 以字节为单位 -->
<property name="maxUploadSize" value="1024000"></property>
</bean>
		

上传前台页面编写:
其中enctype一定为multipart/form-data 复杂类型,不然后台无法接收到数据

   	<form action="upload/uploadPic.do" method="post" enctype="multipart/form-data">
   		<input type="file" name="pic">
   		<input type="submit" value="提交">
   	</form>

上传逻辑编写:

@RequestMapping("/uploadPic.do")
	public String uploadPic(HttpServletRequest request) throws IOException{
		//转换request,将其转成MultipartHttpServletRequest 
		MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
		//获得文件
		MultipartFile file = mr.getFile("pic");
		//获得文件的字节数组
		byte[] fbyte = file.getBytes();
		//获得当前时间的最小精度,精确到三位毫秒
		String fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
		//再加三位随机数
		Random random = new Random();
		for(int i = 0; i < 3; i++){
			fileName = fileName + random.nextInt(10);
		}
		//获得文件的原始文件名
		String oriFileName = file.getOriginalFilename();
		//后缀
		String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
		//获得项目的部署路径
		String realPath = request.getSession().getServletContext().getRealPath("/");
		//组装图片的全路径
		String picPath = realPath + "\\upload\\"+fileName+suffix;
		//定义输出流
		OutputStream out = new FileOutputStream(new File(picPath));
		out.write(fbyte);
		out.flush();
		out.close();
		
		return "success";

11 注解开发

一般情况下,项目开发中大部分都是用的注解开发,因为快捷方便。

注解配置:

<mvc:annotation-drivern/>
<context:component-scan base-package="扫描包的位置"/>

@controller:标识当前类是控制层的一个具体的实现
@requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值