本次依然使用最原始的技术操作,实现数据的CRUD功能,但是数据依然以VO类的形式返回.
项目名:SpringMVCProject
1.建立一个Message.java类,这个类里面负责数据的接受操作;
package cn.zwb.vo; import java.io.Serializable; import java.util.Date; public class Message implements Serializable { private Integer mid; private String title; private Double price; private Date pubdate; public Integer getMid() { return mid; } public void setMid(Integer mid) { this.mid = mid; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Date getPubdate() { return pubdate; } public void setPubdate(Date pubdate) { this.pubdate = pubdate; } }
2.定义Action
(如果使用的是Struts1.x,Struts2.x都需要去继承一个父类)
范例:定义MessageActon
package cn.zwb.action; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import cn.zwb.vo.Message; @Controller //现在这里定义了控制器 @RequestMapping("/pages/back/message/*")//整体的访问路径 public class MessageAction { @RequestMapping("hello_demo") //为demo方法定义子路径 public void insert(Message msg){ System.out.println(msg); } }
下面由于是第一次执行,所以现在可以直接利用地址重写的方式传递所需要的数据
http://localhost:8080/SpringMVCProject/pages/back/message/hello_demo.action?mid=1&title=hahahah&price=1.1&type.type=lalalal
结果:Message [mid=1, title=hahahah, price=1.1, pubdate=null, type=Type [type=lalalal]]
此时的代码之中可以发现最大的特点在于,控制器里面不需要再去编写类属性来接收参数,所有的参数都直接放到了处理的业务方法上,同时避免了那些实例化对象问题.
而在整个操作过程之中最为关键问题是:传递的参数只需要传递属性名称即可,如果是一些引用的关系,则只需要按照"."排列即可.
在Spring MVC之中还可以设计某一个业务方法的处理的请求类型.
@RequestMapping(value="hello_demo",method=RequestMethod.GET)
如果使用此类的语句表示配置的方法只能够使用GET请求模式进行触发,也可以修改成POST请求:
@RequestMapping(value="hello_demo",method=RequestMethod.POST)
如果业务处理的方法设置为了POST请求,那么就表示只能够由表单提交到此方法上,如果使用了GET提交,则出现以下错误信息:
如果现在某个业务操作方法即支持了GET,又支持了POST请求处理,那么就不要去写上method,
@RequestMapping(value="hello_demo")
对于返回值的处理,在Spring MVC里面有一些要求了,在正常的开发环境之中,往往都会提供有一个forward.jsp的页面,这个页面的功能是进行操作完成后的信息提示.
范例:定义forward.jsp页面
<body> <script type="text/javascript"> window.alert("${msg}"); window.location="<%=basePath%>${url}" </script> </body>
如果现在由一个控制器跳转到forward.jso页面,那么至少需要以下内容:
控制器需要知道forward.jsp页面路径;
控制器需要传递若干个request属性.
正因为很多的开发者都会面临同样的问题,所以在Spring MVC里面就专门设计了一个类:org.springframework.web.portlet.ModelAndView,而在这个类里面定义有如下的操作方法:
构造方法:
public ModelAndView()
构造方法:跳转的路径地址
public ModelAndView(java.lang.String viewName)
保存属性:
public ModelAndView addObject(java.lang.String attributeName,
java.lang.Object attributeValue)
范例:
package cn.zwb.action; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import cn.zwb.vo.Message; @Controller //现在这里定义了控制器 @RequestMapping("/pages/back/message/*")//整体的访问路径 public class MessageAction { @RequestMapping(value="hello_demo") //为demo方法定义子路径 public ModelAndView insert(Message msg){ ModelAndView mav=new ModelAndView("/forward.jsp"); mav.addObject("msg", "消息信息添加成功").addObject("url","index.jsp"); System.out.println(msg); return mav; } }
通过以上的程序分析就可以总结出Spring MVC设计的优势;
避免了过于复杂的页面跳转路径的配置操作;
避免了项目之中出现过多的"."作为参数的情况.
通过以上可以发现,ModelAndView包装了跳转路径,包装了request属性