标签:词语 isp 表单 obj 方式 bytes 参数 oid 设置
1. 使用原生 Servlet
在 HanlderMethod 参数中添加作用域对象
@RequestMapping("demo1") public String demo1(HttpServletRequest abc,HttpSession sessionParam){ //request 作用域 abc.setAttribute("req", "req 的值"); //session 作用域 HttpSession session = abc.getSession(); session.setAttribute("session", "session 的值"); sessionParam.setAttribute("sessionParam","sessionParam 的值"); //appliaction 作用域 ServletContext application = abc.getServletContext(); application.setAttribute("application","application 的值"); return "/index.jsp"; }
2. 使用 Map 集合
1)把map中内容放在request作用域中
2)spring会对map集合通过BindingAwareModelMap进行实例化
@RequestMapping("demo2") public String demo2(Map<String,Object> map){ System.out.println(map.getClass()); map.put("map","map 的值"); return "/index.jsp"; }
3. 使用 SpringMVC 中 Model 接口
把内容最终放入到 request 作用域中.
@RequestMapping("demo3") public String demo3(Model model){ model.addAttribute("model", "model 的值"); return "/index.jsp"; }
4.使用 SpringMVC 中 ModelAndView 类
@RequestMapping("demo4") public ModelAndView demo4(){ //参数,跳转视图 ModelAndView mav = new ModelAndView("/index.jsp"); mav.addObject("mav", "mav 的值"); return mav; }
1.访问资源时相应头如果没有设置 Content-Disposition,浏览器默认按照 inline 值进行处理
inline :能显示就显示,不能显示就下载.
2.只需要修改相应头中 Context-Disposition=”attachment;filename=文件名”
1)attachment 下载,以附件形式下载.
2)filename=值就是下载时显示的下载文件名
3.实现步骤
1)导入 apatch 的两个 jar
2)在 jsp 中添加超链接,设置要下载文件
在 springmvc 中放行静态资源 files 文件夹
<a href="download?fileName=a.rar">下载</a>
3)编写控制器方法
@RequestMapping("download") public void download(String fileName,HttpServletResponse res,HttpServletRequest req) throws IOException{ //设置响应流中文件进行下载 res.setHeader("Content-Disposition", "attachment;filename="+fileName); //把二进制流放入到响应体中. ServletOutputStream os = res.getOutputStream(); String path = req.getServletContext().getRealPath("files"); System.out.println(path); File file = new File(path, fileName); byte[] bytes = FileUtils.readFileToByteArray(file); os.write(bytes); os.flush(); os.close(); }
1. 基于 apache 的 commons-fileupload.jar 完成文件上传.
2. MultipartResovler 作用:
1)把客户端上传的文件流转换成 MutipartFile 封装类.
2)通过 MutipartFile 封装类获取到文件流
3. 表单数据类型分类
1)在<form>的 enctype 属性控制表单类型
2)默认值 application/x-www-form-urlencoded,普通表单数据.(少量文字信息)
3)text/plain 大文字量时使用的类型.邮件,论文
4)multipart/form-data 表单中包含二进制文件内容.
4. 实现步骤:
1)导入 springmvc 包和 apache 文件上传 commons-fileupload 和commons-io 两个 jar
2)编写 JSP 页面(method必须是post方式)
<body> <form action="upload" enctype="multipart/form-data" method="post"> 姓名:<input type="text" name="name"/><br/> 文件:<input type="file" name="file"/><br/> <input type="submit" value="提交"/> </form> </body>
3)配置 springmvc.xml
<!-- MultipartResovler解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="50"></property> </bean> <!-- 异常解析器 --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/error.jsp</prop> </props> </property> </bean>
4)编写控制器类
MultipartFile 对象名必须和<input type=”file”/>的 name 属性值相同
@Controller public class DemoController { @RequestMapping("upload") public String upload(MultipartFile file,String name) throws IOException{ String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".")); //判断上传文件类型 if(suffix.equalsIgnoreCase(".png")){ String uuid = UUID.randomUUID().toString(); FileUtils.copyInputStreamToFile(file.getInputStream(), new File("E:/"+uuid+suffix)); return "/index.jsp"; }else{ return "error.jsp"; } } }
1.跟过滤器比较像的技术.
2.发送请求时被拦截器拦截,在控制器的前后添加额外功能.
1)跟 AOP 区分开.AOP 在特定方法前后扩充(对 ServiceImpl)
2)拦截器,请求的拦截.针对的是控制器方法.(对 Controller)
3.SpringMVC 拦截器和 Filter 的区别
1)拦截器只能拦截器 Controller
2)Filter 可以拦截任何请求.
4.实现自定义拦截器的步骤:
1)新建类实现 HandlerInterceptor
public class DemoInterceptor implements HandlerInterceptor { //在进入控制器之前执行 //如果返回值为false,阻止进入控制器 //控制代码 @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("arg2:"+arg2); System.out.println("preHandle"); return true; } //控制器执行完成,进入到jsp之前执行. //日志记录. //敏感词语过滤 @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("往"+arg3.getViewName()+"跳转"); System.out.println("model的值"+arg3.getModel().get("model")); String word = arg3.getModel().get("model").toString(); String newWord = word.replace("祖国", "**"); arg3.getModel().put("model", newWord); // arg3.getModel().put("model", "修改后的内容"); System.out.println("postHandle"); } //jsp执行完成后执行 //记录执行过程中出现的异常. //可以把异常记录到日志中 @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("arg3:"+arg3); System.out.println("afterCompletion"+arg3.getMessage()); } }
2)在 springmvc.xml 配置拦截器需要拦截哪些控制器
拦截所有控制器
<mvc:interceptors> <bean class="com.bjsxt.interceptor.DemoInterceptor"></bean> </mvc:interceptors>
拦截特定的的 url
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/demo"/> <mvc:mapping path="/demo1"/> <mvc:mapping path="/demo2"/> <bean class="com.bjsxt.interceptor.DemoInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
1. 多个拦截器同时生效时,组成了拦截器栈
2. 顺序:先进后出.
3. 执行顺序和在 springmvc.xml 中配置顺序有关
4. 设置先配置拦截器 A 在配置拦截器 B 执行顺序为
preHandle(A)--> preHandle(B)--> 控制器方法 -->postHandle(B)-->postHanle(A)-->JSP-->afterCompletion(B)-->afterCompletion(A)
标签:词语 isp 表单 obj 方式 bytes 参数 oid 设置
原文地址:https://www.cnblogs.com/sunny-sml/p/12695192.html