本次依然使用最原始的技术操作,实现数据的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属性