spring_mvc

SpringMVC

一、导包

二、配置web.xml,加入核心功能处理器


 



  	
  	dispatcherServlet
  	org.springframework.web.servlet.DispatcherServlet
  	
  	
  		contextConfigLocation
  		classpath:spring.xml
  	
  
  
  	dispatcherServlet
  	/
  

三、Controller的三种写法

  • Controller第一种写法:实现Controller接口重写handleRequest方法
public class Mycontroller implements Controller{

@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
	ModelAndView mav=new ModelAndView();
	mav.setViewName("success.jsp");
	return mav;
    }
}
  • Controller的第二种写法:实现HttpRequestHandler接口,重写handleRequest方法
    spring_mvc_第1张图片

  • 全注解开发(推荐)
    spring.xml
    spring_mvc_第2张图片

四、springmvc的访问跳转

1、转发
转发使用关键字forward
2、重定向
重定向使用关键字redirect

五、springmvc执行流程

Springmvc工作流程描述(简易)
1. 客户端请求提交到DispatcherServlet
2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到 处理请求的handler。
3. DispatcherServlet将请求转发给到handler。
4. 通过HandlerAdatper执行handler调用业务逻辑处理后,返回ModelAndView
5. DispatcherServlet查询一个或多个ViewResoler视图解析器,将model渲染到viewss。
6.将viewss结果显示到客户端。

六、参数赋值

  1. 简单数据类型赋值
    spring_mvc_第3张图片
  2. 对象赋值
    spring_mvc_第4张图片
  3. 数值赋值
    spring_mvc_第5张图片
  4. restful风格
    spring_mvc_第6张图片
  5. 日期类型(不能直接处理,必须使用转换器)
    spring_mvc_第7张图片
  • 定义转换器
    spring_mvc_第8张图片
  • spring.xml中注册转换器
    spring_mvc_第9张图片
  • 引用转换器
    enter description here

七、静态资源访问




spring_mvc_第10张图片

八、拦截器


	
		
		
		
		
		
		
		
		
		
	

//自定义拦截器
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
		Object o=request.getSession().getAttribute("user");
		System.out.println("进入拦截器");
		//不为空,已登录放行;
		if(o!=null){
			//放行
			System.out.println("放行");
			return true;
		}
		System.out.println("拦截");
		return false;
}

九、springmvc验证器

对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证

  1. 导包(四个)
  2. 在spring.xml的配置文件中添加验证器的配置信息


	



  1. 定义校验器空接口用于分类
  2. 在实体类属性上对其校验和分组
@NotNull(message="用户名不能为null",groups={UserLoginValidation.class,UserRegisterValidation.class})
	@Pattern(regexp="^[a-zA-Z][a-zA-Z0-9_]{5,11}$",message="用户名只能以字母开头,包含字母,数字,下划线 共5-12位",groups={UserRegisterValidation.class})
	private String username;
  1. 控制器中使用
public class UserController {

	@RequestMapping(value="/register.do",method={RequestMethod.POST})
	public String register(@Validated(value={UserRegisterValidation.class})User user,
			BindingResult result,HttpSession session){
		Map map=new HashMap<>();
		if(result.hasErrors()){
			List errors=result.getFieldErrors();
			for (FieldError fieldError : errors) {
				String field=fieldError.getField();//拿到错误项
				String message=fieldError.getDefaultMessage();//拿到错误提醒
				System.out.println(field+" "+message);
				map.put(field, message);
			}
			session.setAttribute("map", map);
			return "redirect:register.jsp";
		}
		return "login.jsp";
	}
}

十、文件上传下载

1.导入包(2个)
2.设置form:

上传头像:
  1. spring.xml配置文件上传解析器

	
		
	

4.controller配置

//上传图片
	@RequestMapping("/upload.do")
	public String upload(MultipartFile icon,HttpServletRequest request,Model model) throws IOException{
		//把文件对象读入到流中
		InputStream is=icon.getInputStream();
		//获取文件的名字
		String filename=icon.getOriginalFilename();
		//根据请求对象获取images文件夹的路径
		String realpath=request.getServletContext().getRealPath("/images");
		filename = getFileName(filename);
		//根据文件夹和文件名得到一个输出流对象
		OutputStream os=new FileOutputStream(new File(realpath,filename));
		IOUtils.copy(is, os);
		model.addAttribute("filename",filename);
		
		os.flush();
		os.close();
		is.close();
		
		return "success.jsp";
	}
	public String getFileName(String fileName){
		//获取后缀文件名
		String extension=FilenameUtils.getExtension(fileName);
		//使用uuid和当前日期的毫秒数来作为文件名字
		String finalname=UUID.randomUUID().toString()+new Date().getTime()+"."+extension;
		return finalname;
	}
//下载图片
@RequestMapping("/download.do")
	public void download(String name,HttpServletRequest request,HttpServletResponse response) throws IOException{
		//设置相应的内容:下载,预览"attachment;filename="为下载;
		response.setHeader("content-Disposition", "filename="+name);
		//获取项目名加文件夹路径
		String path=request.getServletContext().getRealPath("/images");
		//通过路径和文件名创建文件对象
		File file=new File(path,name);
		//把该文件读入输入流
		InputStream is=new FileInputStream(file);
		
		OutputStream os=response.getOutputStream();
		
		IOUtils.copy(is, os);
		os.flush();
		os.close();
		is.close();
	}
	public String disFilename(HttpServletRequest request,String filename) throws UnsupportedEncodingException{
		String userAgent = request.getHeader("User-Agent");
		if(userAgent.toUpperCase().indexOf("FIREFOX")>=0){
			filename = "=?UTF-8?B?"+(new String(Base64.encodeBase64(filename.getBytes("utf-8"))))+"?=";
		}else{
			filename = URLEncoder.encode(filename, "utf-8");
		}
		return filename;
	}

web.xml配置汇总(ctrl+shift+t寻找关键词):

1.DispatcherServlet: spring.xml


	dispatcherServlet
	org.springframework.web.servlet.DispatcherServlet
	
		contextConfigLocation
		classpath:spring.xml
	
	1


	dispatcherServlet
	/

2.CharacterEncodingFilter: 字符集过滤器


	characterEncodingFilter
	org.springframework.web.filter.CharacterEncodingFilter
	
		encoding
		utf-8
	


	characterEncodingFilter
	/*

spring.xml配置汇总(ctrl+shift+t寻找关键词)

1.CommonsMultipartResolver: 文件上传下载


	

2.LocalValidatorFactoryBean: 验证器



	



3.FormattingConversionServiceFactoryBean: 转换器


	
	
		
			
			
		
	





4.InternalResourceViewResolver: 视图解析器


	
	

5.拦截器自定义

你可能感兴趣的:(Java技术)