springMVC教程中级(四)Controller中级篇2(传图、json)

简介: 一、前言紧接上一章Controller中级篇1,这篇主要讲图片上传、requestBody和responseBody二、图片上传2.1 虚拟目录配置我们图片等文件上传,在现实项目中,肯定是需要配置图片服务器专业存放的,以前那种存放在本机就out了。

一、前言

紧接上一章Controller中级篇1,这篇主要讲图片上传、requestBody和responseBody

二、图片上传

2.1 虚拟目录配置

我们图片等文件上传,在现实项目中,肯定是需要配置图片服务器专业存放的,以前那种存放在本机就out了。我就例举一样tomcat、jetty的springMVC图片上传。之前页眉配置过,一起来学习学习吧。关于服务器设置我会单独将几章节,大家一起学习吧,我也是边学习变分享吧。

2.1.1 配置jetty虚拟目录

在网上找了很久的哦,还是自己摸索来的,我用的jetty9,直接在webapp文件里面,加入一个任意名字的xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
   "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="contextPath">/pic</Set>
    <Set name="war">E:/java/ycypic</Set>
</Configure>

contextpath:为真实路径
war:真实路径(暂时这么用)

2.1.2 配置tomcat虚拟目录

在tomcat的conf/server.xml 里面修改虚拟目录,在host标签里面加一句:
<Context path="/pic" docBase="E:/java/ycypic" reloadable="true" debug="0"> 
</Context> 
doBase:为真实路径
parh:真实路径

2.2 图片上传解析器配置

2.2.1 导入jar包

    <!--文件上传-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.4</version>
    </dependency>


2.2.2 配置上传文件springmvc.xml

在springmvc里面配置
    <!-- 文件上传 -->
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>

2.2.3 编写上传页面

要点1: form 添加enctype="multipart/form-data",
要点2:file name controller 形参一致:
	<tr>
	<span style="white-space:pre">	</span><td>商品图片</td>
		<td><c:if test="${itemsCustom.pic !=null}">
		<img src="/pic/${itemsCustom.pic}" width=100 height=100 />
		<br />
		</c:if> <input type="file" name="pictureFile" /></td>
	</tr>

全部编辑商品editItem.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" isELIgnored="false">
    <title>修改商品信息</title>

</head>
<body>
<form id="itemForm" action="${pageContext.request.contextPath }/items/editItemSubmit" method="post">
    <input type="hidden" name="id" value="${itemsCustom.id}"/>
    <input type="hidden" name="pic" value="${itemsCustom.pic}"/>
    修改商品信息:
    <table width="100%" border=1>
        <tr>
            <td>商品名称</td>
            <td><input type="text" name="name" value="${itemsCustom.name}"/></td>
        </tr>
        <tr>
            <td>商品价格</td>
            <td><input type="text" name="price" value="${itemsCustom.price}"/></td>
        </tr>
        <tr>
            <td>商品生产日期</td>
            <td><input type="text" name="createtime"
                       value="<fmt:formatDate value="${itemsCustom.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
        </tr>
        <tr>
            <td>商品图片</td>
            <td>
                <c:if test="${itemsCustom.pic!=null}">
                    <img src="/pic/${itemsCustom.pic}" width=100 height=100/>
                    <br/>
                </c:if>
                <input type="file" name="pictureFile"/>
            </td>
        </tr>
        <tr>
            <td>商品简介</td>
            <td>
                <textarea rows="3" cols="30" name="detail">${itemsCustom.detail}</textarea>
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="提交"/>
            </td>
        </tr>
    </table>

</form>
</body>

</html>

2.2.3 编写上传controller

要点1:pictureFile与我们jsp页面参数名称保证一直
要点2:我们的上传路径地址与我们的虚拟目录保持一致(一般通过propertity文件读取或者数据库读取)
 /**
     * 修改商品属性
     * @return
     */
    @RequestMapping("/editItemSubmit")
    public String editItemSubmit(Integer id,@ModelAttribute(value="itemsCustom") ItemsCustom itemsCustom, MultipartFile pictureFile
    ) throws Exception {
//
        if(pictureFile!=null){
            //原始文件名称
            String pictureFile_name =  pictureFile.getOriginalFilename();
            //新文件名称
            String newFileName = UUID.randomUUID().toString()+pictureFile_name.substring(pictureFile_name.lastIndexOf("."));

            //上传图片
            File uploadPic = new java.io.File("E:/java/ycypic"+newFileName);

            if(!uploadPic.exists()){
                uploadPic.mkdirs();
            }
            //向磁盘写文件
            pictureFile.transferTo(uploadPic);
            itemsCustom.setPic(newFileName);
        }

        itemsService.updateItem(id, itemsCustom);
        //返回修改页面
       // return "order/editItem";
        //重定向  request数据无法共享,url地址栏会发生变化的 页面地址:editItemSubmit
       return  "redirect:queryItems";
        //转发   request数据可以共享,url地址栏不会变化 页面地址:queryItems
        //return  "forward:queryItems";
    }

2.2.3 乱码问题

注意:我在这里遇到乱码,因为url-pattern 是斜杠+星号,我都差点搞错,忘记加星号。整了好久
    <!-- 设置servlet编码开始 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 设置servlet编码结束 -->



三、Json格式转

我们日常用的都是json数据,特别是喜欢用空间的小伙伴,这就是json数据的转换。但是不知道你注意没有,我们的url拦截没有.action或者.do等,我们属于restful格式(后面讲)所以我们引入静态资源需要配置
3.0引入静态资源web.xml,引入js结尾的资源
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

3.1引入jar包

    <!--================json转换3人组文件上传(MappingJackson2HttpMessageConverter)==========-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.6.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.6.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.6.1</version>
    </dependency>

3.2 配置springmvc.xml

依然是修改适配器
    <!--3、=============================处理器适配器HandlerAdapter====================================-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <!-- 3.1 在webBindingInitializer中注入自定义属性编辑器、自定义转换器 -->
           <property name="webBindingInitializer" ref="customBinder"></property>
        <!--3.2  加入 json数据的消息转换器 MappingJacksonHttpMessageConverter依赖Jackson的包 -->
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
            </list>
        </property>
    </bean>

3.3编写jsp页面


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head><base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>json测试</title>
<script type="text/javascript" src="<%=basePath%>pages/jsp/js/jquery-1.9.1.min.js"></script>
<script type="text/javascript">

//请求json响应json
function requestJson(){
	$.ajax({
		url:"${pageContext.request.contextPath }/json/requestJson",
		type:"post",
		contentType:"application/json;charset=utf-8",
		//请求json数据,使用json表示商品信息
		data:'{"name":"手机","price":1999}',
		success:function(data){
			alert(data.name);
		}
	});

}
//请求key/value响应json
function responseJson(){
	
	$.ajax({
		url:"${pageContext.request.contextPath }/json/responseJson",
		type:"post",
		//contentType:"application/json;charset=utf-8",
		//请求key/value数据
		data:"name=手机&price=1999",
		success:function(data){
			
			alert(data.name);
		}
		
		
	});
	
}
</script>
</head>
<body>

<input type="button" value="请求json响应json" onclick="requestJson()"/>
<input type="button" value="请求key/value响应json" onclick="responseJson()"/>
</body>
</html>


3.4编写controller


package com.ycy.controller;

import com.ycy.dto.ItemsCustom;
import com.ycy.model.Items;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created by Administrator on 2015/9/30 0030.
 */
@Controller
@RequestMapping("/json")
public class ItemJson {

    @RequestMapping("/requestPage")
    public String requestPage() throws Exception {
        return "jsontest";

    }

    // 商品修改提交json信息,响应json信息
    @RequestMapping("/requestJson")
    @ResponseBody
    public Items editItemSubmit_RequestJson(@RequestBody Items items) throws Exception {
        System.out.println(items);
        //itemService.saveItem(items);
        return items;

    }


    // 商品修改提交json信息,响应json信息
    @RequestMapping("/responseJson")
    @ResponseBody
    public Items responseJson( Items items) throws Exception {
        System.out.println(items);
        //itemService.saveItem(items);
        return items;

    }
}

3.5 总结json

我们用到json特别注意就是我们需要用js,注意静态资源引入。还有就是我们json配置到springmvc里面,我们已经用了 MappingJackson2HttpMessageConverter

,很多教程都不是2代的,我们当然用最新的。

目录
相关文章
|
1月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
57 2
|
1月前
|
XML Java 应用服务中间件
SpringMvc的具体操作,如何配置springMvc(完整教程)
一个完整的Spring MVC配置教程,包括引入依赖、配置Tomcat、设置DispatcherServlet、编写Spring配置文件、创建Controller以及测试结果。
162 0
SpringMvc的具体操作,如何配置springMvc(完整教程)
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
134 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
3月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
3月前
|
JSON 前端开发 Java
Spring MVC返回JSON数据
综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
170 4
下一篇
无影云桌面