springMvc(二)

这篇博客详细介绍了SpringMVC中返回值的处理,包括String作为内容输出、任意类型返回、自定义类型、基本数据类型、List和Map集合类型的返回。还探讨了解决返回值字符串时可能出现的乱码问题。此外,文章还讲解了SpringMVC的文件上传和下载功能,包括使用MultipartFile处理文件上传,以及如何实现异步图片上传并回显。最后,提到了文件下载的实现和验证码的生成控制器。
摘要由CSDN通过智能技术生成

springmvc笔记

复习:
mvc:一种软件的设计思想,设计模式 ,
m:model
v: 视图 (jsp freemark jsf themeleaf(html)->springboot )
c:
前后端分离 : 写前端(js: node.js angular.js vue.js)
后端:java python .net

Springmvc:(ssm 微服务)
@Controller: spring框架的注解(类上,被扫描了控制器)
<context: 全局

@RequestMapping: spring框架中的web块的springmvc子块的注解
<mvc: 子块

自定义转换器:
Convertor《当前类型,目标类型》
配置: 配置转换器 使用springmvc提供工具类 ConversionServiceFactoryBea

课程目标
1:返回值的处理
2:文件的上传和下载
3: 生成验证码

返回值处理

1.String 作为内容输出
如果方法声明了注解 @ResponseBody ,将内容或对象作为 HTTP 响应正文返回,并调 用适合 HttpMessageConverter 的 Adapter 转换对象,写入输出流。这时的 String 不再是路径而是内容。
@RequestMapping("/r4")
@ResponseBody
public String return4() {
//返回值作为HTTP 响应正文返回
return “返回值为String”;
}
发现中文件出现乱码,讲解完返回值类型再去解决springmvc返回值String作为响应体中文件乱码的问题。
解决乱码的方法:
1.单一方法修改
2.统一修改
在springmvc.xml 加入
mvc:annotation-driven
<mvc:message-converters register-defaults=“true”>



</mvc:message-converters>
</mvc:annotation-driven>

2:返回值为任意类型
1.返回类型为自定义类型
Product 本身,而非视图, Spring 会选择一个合适的方式解析对象,默认是 json ,需手动导入jackjson相关的jar包。
否则报错:No converter found for return value of type
@RequestMapping("/r8")
@ResponseBody
public Dog return8(){
Dog dog=new Dog(“tomer”,2);
return dog;
}

2.返回值为基本数据类型

如果确实需要直接将基本数据类型返回,则可以使用注解 @ReponseBody。需手动导入jackjson相关的jar包。
@RequestMapping("/r9")
@ResponseBody
public Integer return9(){
return 9527;
}

3.返回值为List集合类型
4.返回值为Map集合类型
Springmvc的文件上传
1: 导入工具包:
commons-fileupload.jar
commons-io.jar

2: 配置springmvc上传文件的工具springmvc.xml

 <!--  处理文件上传的工具类  -->
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 通过属性来规范上传文件的信息 -->          
    <property name="defaultEncoding" value="UTF-8"></property>
    <!-- 上传文件的最大字节数  -->
    <property name="maxUploadSize" value="5000000"></property>        
 </bean>

3: 设置表单的提交方式
设置表单的提交方式method=”post” enctype=”multipart/form-data”:表单中的数据已二进制的字节的方式传入到服务器

标题:
文件:
文件:

4: 书写上传代码:
springmvc提供了一个工具类 MultipartFile 处理文件上传的
/*
* MultipartFile 包含了上传文件的信息
* 开发: 文件服务器(静态资源) 图片 文本文档…
*/
@RequestMapping("/upload")
public String upload(@RequestParam(“myFiles”)MultipartFile[] myFiles) throws IllegalStateException, IOException {
String path = “C:\Users\tan\Desktop\img”;
if(myFiles!=null&&myFiles.length>0) {
for (MultipartFile multipartFile : myFiles) {
if(multipartFile.getSize()>0) {
String fileName = multipartFile.getOriginalFilename();
File file = new File(new File(path),fileName);
multipartFile.transferTo(file);
}
}
}
else {
System.out.println(“没有文件上传!!”);
}
return “success”;
}

Springmvc异步图片上传并回显

1.Upload.jsp

2.FileUploadController

@RequestMapping("/uploadAndShow")
@ResponseBody
public String uploadAndShow(@RequestParam(“upload”)MultipartFile myFiles) throws IllegalStateException, IOException {
String path = “C:\Users\tan\Desktop\img”;
String fileName = myFiles.getOriginalFilename();
File file = new File(new File(path),fileName);
myFiles.transferTo(file);
return fileName;
}
3.设置映射路径到本地目录文件夹

文件下载

1、前端页面
下载文件

2、controller下载代码
@Controller
public class DownloadController {
@RequestMapping("/download")
public ResponseEntity<byte[]> download(String fileName) throws IOException {
HttpHeaders headers = new HttpHeaders();
File file = new File(new File(“C:\Users\tan\Desktop\img”),fileName);

    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
    headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"),"ISO-8859-1"));    
   
    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
                                          headers, HttpStatus.OK); 
}

}

生成验证码

编写验证码生成控制器
public void getImage(HttpServletRequest request, HttpServletResponse response,HttpSession session)
throws ServletException, IOException {

	// 1 高和宽
	int height = 30;
	int width = 60;
	String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
	Random random = new Random();

	// 2 创建一个图片
	BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

	// 3 获得画板
	Graphics g = image.getGraphics();
	// 4 填充一个矩形
	// * 设置颜色
	g.setColor(Color.BLACK);
	g.fillRect(0, 0, width, height);

	g.setColor(Color.WHITE);
	g.fillRect(1, 1, width - 2, height - 2);
	// * 设置字体
	g.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 25));

	String code = "";
	// 5 写随机字
	for (int i = 0; i < 4; i++) {
		// 设置颜色--随机数
		g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));

		// 获得随机字
		int index = random.nextInt(data.length());
		String str = data.substring(index, index + 1);
		code+=str;
		// 写入
		g.drawString(str, width / 6 * (i + 1), 20);

	}

	// 6 干扰线

// for (int i = 0; i < 3; i++) {
// // 设置颜色–随机数
// g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
// // 随机绘制先
// g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
// // 随机点
// g.drawOval(random.nextInt(width), random.nextInt(height), 2, 2);
// }

	session.setAttribute("verifyCode", code);
	// end 将图片响应给浏览器
	ImageIO.write(image, "jpg", response.getOutputStream());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值