spring MVC分离了控制器、模型对象。工作过程如下:
1.Spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller 。
3.DispatcherServlet请请求提交到目标Controller 。
4.Controller进行业务逻辑处理后,会返回一个ModelAndView 。
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象。
6.视图对象负责渲染返回给客户端。
springMVC例子解读:
HelloWorldController代码注释如下:
package cn.training.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import cn.training.UserBean.UserBean; import cn.training.service.*; //找到名为HelloWorldController这个类 @Controller("HelloWorldController") //访问路径 @RequestMapping("/") //HelloWorldController类 public class HelloWorldController { //自动注入标签 @Autowired //声明一个Helloservice变量 Helloservice helloservice; //以GET方式请求访问路径 @RequestMapping(value = "/", method = RequestMethod.GET) //带一个参数的initLogin( )方法 public String initLogin(Model model) { //转到helloWorld。jsp页面 return "helloWorld"; } //以POST方式访问路径 @RequestMapping(value="/init", method=RequestMethod.POST) //带两个参数的initLogin2( )方法 public String initLogin2(UserBean userbean,Model model) { //声明一个UserBean变量,并调用Helloservice类中的searchservice()方法,将得到的值赋给userbean1 UserBean userbean1= helloservice.searchservice(userbean); //将userbean更改设置为userbean1 model.addAttribute("userbean",userbean1); //跳转到login,jsp页面 return "login"; } }
Helloservice页面注释如下:
package cn.training.service; import org.springframework.stereotype.Service; import cn.training.UserBean.UserBean; //@Service用于标注业务层组件 @Service //Helloservice类 public class Helloservice { public UserBean searchservice(UserBean fim){ //将fim的userid设置为test fim.setUserId("test"); return fim; } }
UserBean.java、helloWorld.jsp、login.jsp、web.xml、springMVC-servlet.xml等页面内容省略。
注意事项:
当创建一个 Controller ,需直接或间接地实现 org.springframework.web.servlet.mvc.Controller 接口。
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
@RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。RequestMapping注解有六个属性,下面我们把它分成三类进行说明。
1. value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式;
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
2. consumes,produces;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3. params,headers;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
${userbean.userId}表示取出userbean中的userId。
<form action="init" method="POST"> <input name="jsd" type="text"/> <button name="submit" type="submit">login</button> </form>
通过这段代码。我知道了XML文件中有很多组建和控件可以使用,例如这儿就用到了文本框和提交按钮。
在这样的项目里,涉及的页面比较多,应注意名称的规范性与一致性,以避免低级的错误。