springMVC基本原理
第一步:用户发出请求,如"http://localhost:8080/springmvc/user/reg?method=reg&name=zs"
第二步:服务器接收到请求,发现存在DispatcherServlet,则交给DispatcherServlet进行处理
DispatcherServlet内部通过检查HandlerMapping中是否存在对应的URL,如果有,则交给对应的Controller进行处理
/** List of HandlerMappings used by this servlet */ private List<HandlerMapping> handlerMappings;// 记录URL与Controller的对应关系
第三步:找到对应的Controller之后,开始执行对应的Controller
第四步:Controller执行完毕后:
如果方法返回值为String,则将通过ViewResolver视图处理器进行处理
如果方法返回ModelAndView,则该对象包含了模型与视图的信息(模型用来存放数据,在jsp中通过EL表达式取值)
第五步:DispatcherServlet从ViewResolver或者ModelAndView获取相关信息,返回给服务器
第六步:服务器将结果响应到客户端
==============================================================================
@Controller
spring的Controller是singleton的。
即多个请求将共享使用同一个Contoller。
因此,Controller必须是无状态的(成员变量只能是service对象)
springMVC是通过方法参数来接收客户端传递过来的参数
struts2则是通过在Controller中设置成员变量来接收参数的,struts2的Controller是prototype的
spring3中,通过@Controller即可将类定义为一个控制器类
需要在配置文件中添加component-scan,通知spring扫描对应包下的类,将那些配置了@Controller的类注册到spring容器中
<context:component-scan base-package="com.gc.springmvc.controller"/>
@RequestMapping
配置在类上,则将URL与类绑定,是该类的URL全局配置,对所有方法都有效
通过@RequestMapping(params="method=reg1")来区分该Controller中的哪个方法被调用
配置在方法上,则将URL与方法绑定,该方法的特有配置,仅对该方法有效
@RequestParam
处理客户端传递的参数名称与接收参数名称不一致的问题
通过@RequestParam配置与客户端参数一致的名称,然后由springMVC将值传递给方法中的参数
@SessionAttributes
定义在类级别上,声明当向Model,ModelView,ModelMapping中存入那些key时,需要将其一并存入到session中。
@SessionAttributes({"loginUser","xxx"})
当往Model中放入key为"loginUser"的时候,就会将其存入到session中
@ModelAttribute
用于将session中的某些值取出来赋值给方法的形参
public String userInfo2(@ModelAttribute("loginUser") User user) {...}
即将session中key为"loginUser"的值取出来,赋值给user
==============================================================================
springMVC中方法参数的处理:
如果是客户端传入的参数,则方法的形参名称需要与param名称一致
如果是客户端传入的参数,但方法形参不一致,可以通过@RequestParam进行转换
如果方法的形参是一个对象,则客户端传入的参数必须与对象的property属性完全对应
如果需要Model,ModelAndView,ModelMapping,HttpServletRequest,HttpServletResponse等
则可直接在方法参数中写,springMVC会自动创建并传入
springMVC中方法返回值的处理:
一般返回String或ModelAndView,也支持ModelMapping,Map,List,Set,Object等。
返回String,表示视图的名称,将结合prefix与suffix,匹配对应的jsp
返回ModelAndView,则同时包含视图信息和数据信息
==============================================================================
springMVCd的转发与重定向
return "forward:userlist"; 默认为forword
return "redirect:login"; 指定为重定向