您的位置:首页 > 编程语言 > Java开发

springMVC 知识点整理PART 2(控制器与视图之间数据的)

2017-05-16 16:10 471 查看
1.控制器传递数据给视图

控制器中的方法返回值可选:String类型及ModelAndView

1. String 返回类型的方法,则需要在方法上加上参数HttpServletRequest 及 HttpServletResponse对象,借助Request对象的SetAttribute方法进行存储数据。再在视图页面中通过EL表达式来获取数据并显示。

public String list(HttpServletRequest request,HttpServletResponse response){
System.out.println("list方法被执行");
//如果我需要把一些数据传递到页面中去,又如何处理
List<String> list=new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("message","你好!");
request.setAttribute("list",list);
return "studentList";
}
2. ModelAndView类型返回的方法,在ModelAndView对象中直接传递数据给视图。

@RequestMapping("/add")
public ModelAndView add(){
System.out.println("add方法被执行");
Map<String,Object> map=new HashMap<String,Object>();
map.put("a","1111");
map.put("b","2222");
map.put("c","3333");
map.put("d","4444");
return new ModelAndView("studentList","map",map);
}

2.从视图传入数据到控制器

1. 在方法上加参数,注意,参数名必须要与表单的元素的name属性名一致,少量数据推荐使用

2. 通过HttpServletRequest对象获取,少量数据推荐使用

3. 如果数据量比较大,就采用实体封装方式来实现,推荐用法。

3.[b]Post提交中文乱码的问题[/b]

springMVC提供了一个过滤器org.springframework.web.filter.CharacterEncodingFilter,类,解决了表单post提交时的中文乱码问题,需要在web.xml文件中对这个过滤器进行配置

4.注解配置请求方式get,post

//value:表示请求的URLmethod=RequestMethod.GET:表示此方法只用于get请求

@RequestMapping(value="/add",method=RequestMethod.GET)

public ModelAndView add(){}

//method=RequestMethod.POST:表示此方法用于post请求@RequestMapping(value="/add",method=RequestMethod.POST)

public ModelAndView add(Studntstudent){}

 

注意,如果没有设置method 属性,则此方法Get请求与Post请求都可以访问到。

那么在什么情况下需要有2个方法??

当页面有表单的情况下,通常控制器中就需要2个方法。一个方法用于Get请求,一个方法用于Post请求。
5.静态资源访问

在一个项目中,有一些资源属于静态资源(img 、 css 、 js ),与服务器无关。

但是web.xml文件中针对springMVC 的配置是: /

<servlet-mapping>

<servlet-name>springMVC</servlet-name>

<!--/表示所有的请求都进行拦截 开发中有人也这样配置 *.do 
切记:不能 /* 配置,这种配置是错误的。-->

<url-pattern>/</url-pattern>

 

/这种配置表示拦截所有请求,从而导致把所有的请求都进行了拦截,连静态资源也被拦截了,导致静态资源不可访问。

如何解决?在springMVC-servlet.xml 的配置文件中进行设置,对静态资源不进行拦截。

 

<!-- 静态资源的访问配置-->

<mvc:resourceslocation="/images/"mapping="/images/**"/>

<mvc:resourceslocation="/js/"mapping="/js/**"/>

<mvc:resourceslocation="/css/"mapping="/css/**"/>
6.文件上传

1.导包

2. 表单的设置

    form中设置属性enctype="multipart/form-data"

3. 通过springMVC中自带的类:CommonsMultipartResolver来实现上传文件的设置,在springMVC-serlvet.xml配置文件的配置,设置文件上传的一些属性(文件大小、缓冲区、字符编码...)

4. 多文件上传功能代码

// 必须要带一个Request对象

    @RequestMapping("/upload")

    public String upload(HttpServletRequestrequest) {

        try {

            // 将请求的上下文封装成为 CommonsMultipartResolver对象: 多部分解析器

            CommonsMultipartResolver cmr = new CommonsMultipartResolver(request

                    .getSession().getServletContext());

            // 判断表单是否是文件上传 ,包含enctype="multipart/form-data"属性

            if (cmr.isMultipart(request)) {

                MultipartHttpServletRequest mhsr=

(MultipartHttpServletRequest)request;

                // 获取所有的文件

                Iterator files =mhsr.getFileNames();

                // 循环每一个文件,并上传

                while (files.hasNext()) {                  

                    // 取出其中的一个文件

                    MultipartFile mf =mhsr.getFile(files.next().toString());

                    if (mf !=
null) {

                        // 生成上传的路径 getOriginalFilename()取得文件名

                        String path = request.getSession().getServletContext()

                                  .getRealPath("/userfile/") +

mf.getOriginalFilename();

                        // 上传文件

                        mf.transferTo(new File(path));

                    }

                }

            }

        } catch (Exception e) {

            System.out.println("有错误:"+e.getMessage());

        }

        return"fileUpload";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: