高级参数的绑定

1.数组类型的参数绑定

基于批量删除商品的操作完成参数传递

SpringMVC框架(2)

这里是用CheckBox进行选择

SpringMVC框架(2)

 

2.List类型的绑定

基于批量修改商品操作完成参数的传递

SpringMVC框架(2)

控制器

SpringMVC框架(2)

pojo

SpringMVC框架(2)

 

@RequestMapping注解的使用

1.路径映射可以是数组

SpringMVC框架(2)

也就是我们可以通过多个访问路径访问

 

[email protected]可以加在类头部,用于目录分级管理

SpringMVC框架(2)

用于分目录管理的话就需要在访问路径上加上/item

 

3.限定请求方法

SpringMVC框架(2)

这里我们可以限制提交的方式,上面写法就是post和get提交方式都可以,也是默认的方式

 

3.Controller方法返回值

(1)返回ModelAndView

SpringMVC框架(2)

(2)返回void

1)request

SpringMVC框架(2)

SpringMVC框架(2)

2)response

SpringMVC框架(2)

(3)返回String(也就是返回视图的名字)

SpringMVC框架(2)

 

redirect和forward

SpringMVC框架(2)

 

 

SpringMVC的异常处理

思想:做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好地提示用户。

 

步骤:

(1)创建全局异常处理器

SpringMVC框架(2)

 

(2)配置异常处理器

SpringMVC框架(2)

 

(3)测试访问queryVoid.action

SpringMVC框架(2)

 

更加智能的解决方案

(1)自定义异常类

SpringMVC框架(2)

(2)修改异常处理器

SpringMVC框架(2)

 

(3)测试访问queryVoid.action

SpringMVC框架(2)

 

 

图片上传处理(要用post提交,不能用get)

(1)在tomcat中进行虚拟路径的配置(方便我们从本地拿图片)

eclipse中的配置

SpringMVC框架(2)

myeclipse的配置

SpringMVC框架(2)

 

(2)引入相关的jar包

SpringMVC框架(2)

 

(3)在springmvc.xml中配置多媒体解析器

SpringMVC框架(2)

 

(4)jsp的修改(注意图片上传的src中的虚拟路径)

SpringMVC框架(2)

 

(5)编写图片上传处理代码(重点)

SpringMVC框架(2)

 

 

JSON的数据交互

(1)加入jar包

SpringMVC框架(2)

 

(2)编码

SpringMVC框架(2)

 

 

SpringMVC实现Restful

编码

SpringMVC框架(2)

 

测试

测试直接访问url{http://localhost:8080/项目名/item/1.action}即可。

如果想要测试的时候不写action的话,也就是测试直接访问url{http://localhost:8080/项目名/item/1},那么就要在web.xml中将拦截的url-parrten中的*.action换成/,注意不能换成/*,不然jsp也会被拦截而使用不了。

 

 

拦截器

拦截器开发流程

(1)创建拦截器

1)一号拦截器

package com.itheima.springmvc.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 自定义拦截器
 * @author Steven
 *
 */
public class MyInterceptor implements HandlerInterceptor {

	//方法执行后被执行
	//处理异常,清资源,记录日志等等
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("MyInterceptor.afterCompletion.......");
	}

	//方法执行之后,返回ModelAndView之前被执行
	//设置页面的共用参数等等
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("MyInterceptor.postHandle.......");
	}

	//进入方法前被执行
	//登录拦截,权限验证等等
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("MyInterceptor.preHandle.......");
		//true放行,false拦截
		return true;
	}

}

 

2)二号拦截器,复制一号,修改一下系统输出消息

package com.itheima.springmvc.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 自定义拦截器
 * @author Steven
 *
 */
public class MyInterceptor2 implements HandlerInterceptor {

	//方法执行后被执行
	//处理异常,清资源,记录日志等等
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("MyInterceptor2.afterCompletion.......");
	}

	//方法执行之后,返回ModelAndView之前被执行
	//设置页面的共用参数等等
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("MyInterceptor2.postHandle.......");
	}

	//进入方法前被执行
	//登录拦截,权限验证等等
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("MyInterceptor2.preHandle.......");
		//true放行,false拦截
		return true;
	}

}

 

(2)配置拦截器

SpringMVC框架(2)

 

SpringMVC框架(2)

 

拦截器案例

思路

1.有一个登录页面,需要写一个controller访问页面

2.登录页面有一提交表单的动作。需要在controller中处理。

       1)判断用户名密码是否正确

       2)如果正确 想session中写入用户信息

       3)返回登录成功,或者跳转到商品列表

3.拦截器

       1)拦截用户请求,判断用户是否登录

       2)如果用户已经登录。放行

       3)如果用户未登录,跳转到登录页面。

 

(1) login.jsp

SpringMVC框架(2)

 

(2) UserController

SpringMVC框架(2)

 

(3) LoginInterceptor拦截器编码

SpringMVC框架(2)

 

(4) 拦截器配置

SpringMVC框架(2)

 

 

 

乱码的解决

乱码问题{
 提交问题{
    post乱码:过滤器解决;
    get乱码:tomcat配置 URIEncoding="utf-8"
 }

 响应乱码{
    response乱码:获取getWriter之前,response.setCharacterEncoding("utf-8");
 }
 
}

 

相关文章: