SpringMVC的使用(二)

restful风格

  1. 需要指定前端控制器的url-mapping 为 /

  2. 配置静态资源文件的处理 <mvc:default-servlet-handler />

  3. 在地址栏参数的位置使用占位符 {占位符key} 在参数接收的位置使用@PathVariable(占位符key)

后台返回值

  1. 跳转页面 转发或者重定向 一定指向页面 传递数据使用request容器
    a.返回ModelAndView viewName设置成跳转页面的字符串 传递数据 addObject(key,value)
    b.直接返回String 就是跳转页面的字符串 传递数据request.setAttribute(key,value)

  2. ajax只获取数据 没有页面跳转 response.getWriter().print()
    a.必须要加 @ResponseBody 指定我们响应 类似 response.getWriter().print()
    b.springMVC支持原本的传递JSON字符串的方式(springMVC中的HandlerAdapter中可以设置message-converters(转换器) 指定了fastjson的支持可以直接返回任何对象)

上传文件和图片

  1. 文件上传的路径
         a.将路径设置成项目的目录 (简单,能直接访问到图片 导致项目越来越大 不好维护)
         b.设置虚拟路径
              图片访问目录 == 图片的实际目录
              idea配置虚拟路径
                 1.使用tomcat自带的配置文件配置虚拟路径 在host 标签中配置一下内容
                    <Context path="/pic" docBase=“e://xxx/” />
                    path代表虚拟路径 docBase代表实际路径
                 2.使用idea的部署 来部署虚拟路径
                    在tomcat配置 deployment中指定实际路径,在路径的下面指定虚拟路径

  2. 文件上传 fileUpload组件
         a.加入jar包 common-fileupload common-io
         b.将upload组件配置到spring容器中去 见配置文件
         c.编写文件上传页面
             form表单
                 1.设置 enctype=“multipart/form-data”
                 2.设置请求模式为post
             ajax上传文件
                 1.获取表单的formData对象,参数是表单的DOM对象
                 2.调用ajax
                    type:post
                    contentType: false
                    processData: false
                    data:表单的formData对象
         d.后台控制层使用MultipartFile 来接收上传的文件(获取文件的文件名,获取上传的实际路径(properties工具类实现),得到上传文件的实际目录)
             MultipartFile.transferTo 复制文件

  3. 多文件上传
    将MultipartFile设置成数组 后台循环即可

示例

mvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.igeek.action"></context:component-scan>
    <!--处理器驱动-->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 配置Fastjson支持 -->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json</value>
                    </list>
                </property>
                <property name="features">
                    <!--
                        Fastjson的SerializerFeature序列化属性:
                            QuoteFieldNames———-输出key时是否使用双引号,默认为true
                            WriteMapNullValue——–是否输出值为null的字段,默认为false
                            WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
                            WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
                            WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
                            WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
                     -->
                    <list>
                        <value>QuoteFieldNames</value>
                        <value>WriteMapNullValue</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--默认是jsp的视图-->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <!-- 配置逻辑视图的前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 配置逻辑视图的后缀 -->
        <property name="suffix" value=".jsp" />
        <!--前缀+视图字符串+后缀-->
    </bean>


    <!-- 对静态资源文件的访问 方案一 (二选一) -->
    <mvc:default-servlet-handler />

    <!--上传文件组件-->
    <!--id固定multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置文件上传的大小-->
        <property name="maxUploadSize" value="2000000"></property>
    </bean>

</beans>
@Controller
@RequestMapping("/login")
public class LoginAction {
    @RequestMapping("rest/{username}/{age}")
    public ModelAndView getRestFul(@PathVariable("username") String username, @PathVariable("age") String age){
        System.out.println(username + " " + age);
        System.out.println("进入了后台");
        ModelAndView view = new ModelAndView();
        view.setViewName("login");
        view.addObject("username",username);
        view.addObject("age",age);
        return  view;
    }

    /*ajax获取后台数据*/
    @RequestMapping("getName")
    @ResponseBody
    public List<ParBean> getName(){
        ParBean par = new ParBean("xiaowang",10,"A");
        ParBean par1 = new ParBean("xiaozhang",20,"B");
        List<ParBean> list = new ArrayList<>();
        list.add(par);
        list.add(par1);
        return list;
    }

    @RequestMapping("file")
    public String fileUpload(@RequestParam("myFile") MultipartFile myFile,HttpServletRequest request){
        //获取文件的文件名
        String fileName =myFile.getOriginalFilename();
        System.out.println(fileName);
        //获取需要上传到的位置
        String path = PropertiesUtil.getProp("REAL_PATH")+fileName;
        File f = new File(path);
        //文件复制
        try {
            myFile.transferTo(f);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String xuniPath = PropertiesUtil.getProp("XUNI_PATH")+fileName;
        request.setAttribute("pic",xuniPath);
        return "success";
    }
    
    @RequestMapping("file1")
    @ResponseBody
    public String fileUpload1(@RequestParam("myFile") MultipartFile[] allFile){
        if(allFile!=null){
            for (MultipartFile myFile:allFile) {
                //获取文件的文件名
                String fileName =myFile.getOriginalFilename();
                System.out.println(fileName);
                //获取需要上传到的位置
                String path = PropertiesUtil.getProp("REAL_PATH")+fileName;
                File f = new File(path);
                //文件复制
                try {
                    myFile.transferTo(f);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                String xuniPath = PropertiesUtil.getProp("XUNI_PATH")+fileName;
            }
        }

        return "";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值