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

框架SpringMVC笔记系列 二 传值

2015-03-18 00:21 411 查看
主题:SpringMVC(第一节中再回顾复习一次)

学习资料参考网址:

1.http://www.icoolxue.com

2.http://haohaoxuexi.iteye.com/blog/1343761(Great!)

3.推荐:http://haohaoxuexi.iteye.com/ (backUp)

1、Spring MVC中的若干基本注解。(基于注解的Spring MVC简单介绍)

  SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个请求给Handler,Handler处理之后,再返回给相应的视图和模型.即(ModelAndView)。在使用注解的SpringMVC中,处理器Handler是基于@Controller和@RequestMapping这两个注解的,@Controller申明一个处理器类,@RequestMapping申明对应请求的映射关系。这样就可以提供一个非常灵活的匹配和处理方式。

  DispatcherServlet是一种Servlet,它继承自HttpServlet,我们Spring MVC中的所有请求都要交给DispatcherServlet,所以我们在web.xml中要配置DispatcherServlet.如下:

<servlet>

<servlet-name>blog</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>blog</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

 [b] 在这个配置文件中,我们申明了一个名字为blog的DispatcherServlet。该Servlet将处理所有以.do结尾的请求。在初始化DispatcherServlet的时候,Spring MVC默认会在/WEB-INF/目录下,寻找一个[servlet-name]-servlet.xml的配置文件(即blog-servlet.xml),来初始化里面的bean对象。。当然,如果我们不想使用默认的“配置文件的位置”,那么可以来配置。[/b]

<servlet>

<servlet-name>blog</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/blog-servlet.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>blog</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

  如上,我们配置了配置文件的所在位置。

  DispatcherServlet会利用一些特殊的bean来处理Request请求和生成相应的视图返回。关于视图的返回,Controller只负责传回来一个值(通过model.addAttribute()方式或者Map<key, value>方式),它只负责传回一个值。最终到底返回的是什么视图,是由ViewResolver视图解析器来控制的。它可以控制返回视图基于jsp的,或者基于xml的等。我们在jsp中常用的视图解析器是InternalResourceViewResolver,它会要求有一个前缀和后缀。我们在blog-servlet.xml配置文件中,配置如下:

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/" />

<property name="suffix" value=".jsp" />

</bean>

[b]  如上,根据Controller传递回来的值拼接后,路径:http://localhost:8080/web-app/WEB-INF/值.jsp[/b]

[b]  在Spring MVC中,Controller不需要继承什么类,也不需要实现什么接口。一切使用了@Controller进行标记的类都是Controller。有了Controller之后,我们是怎么请求一个Controller的具体的方法。它是通过一个@RequestMapping来标记的。@RequestMapping可以标记在类上,也可以标记在方法上。当方法上和类上都标记了@RequestMapping的时候,则访问方法的url就是类上的加上方法上的。[/b]

@Controller

@RequestMapping("/blog")

public class BlogController {

@RequestMapping("/index")

public String index(Map<String, Object> map) {

return "blog/index";

}

}

[b]  如上,当类上有@RequestMapping的时候,url就是/blog/index.当无时,url为仅为/index.[/b]

[b]  在RequestMapping属性中,还可以指定一个属性method,method=RequestMethod.GET或者method=RequestMethod.POST。[/b]

[b]@Controller [/b]

@RequestMapping("/blog")

public class BlogController {

@RequestMapping(value="/*/index", method=RequestMethod.Get)

public String index(Map<String, Object> map) {

return "blog/index";

}

}

  如上,只有Get方式才可以访问该方法,@RequestMapping还支持通配符 * .关于一些详细的参数规则,可以参照:http://haohaoxuexi.iteye.com/blog/1343761

2、在Controller的方法中,如果需要WEB元素HttpServletRequest,HttpServletResponse和HttpSession,只需要在给方法一个对应的参数,那么在访问的时候SpringMVC就会自动给其传值,但是需要注意的是在传入Session的时候如果是第一次访问系统的时候就调用session会报错,因为这个时候session还没有生成。

3、Controller给视图层传值。

  我们给view层返回一个ModelAndView,其中,Model就是一个Map,里面存放了一对对的键值对,其可以直接在页面上使用。(页面上用${key},jsp页面中会显示values值。当要传多个值的时候,我们可以把多个值封装在一个对象中)。view是一个字符串,表示的是一个view的名称,结合prefix和suffix,我们可以拼接出完整的访问路径。那么,你想。我们可以仅仅返回一个Model,或者仅仅返回一个View,或者都返回,再或者什么都不返回。

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