struts是基于MVC设计模型的一只开源框架,它作为一个前端过滤器(拦截器),将用户的请求拦截分发给后端处理,并依赖一定的约定给出响应。
而Restful是一种简约规范的设计风格,层次分明的同时更易前端缓存。
在REST中,每一个对象都是通过URL来表示的,对象用户负责将状态信息打包进每一条消息内,以便对象的处理总是无状态的。
于是开发人员可以轻松使用 Ajax 和 RESTful Web 服务一起创建丰富的界面。
使用struts开发restful风格网站,需经过一下几个主要步骤。
首先在web.xml中配struts拦截器
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在struts.xml无需过多配置,简单几句即可。
<struts>
<!-- 关闭动态方法 action:方法名 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<!-- 启用开发者模式 -->
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="utf-8"/>
</struts>
以简单的注册为例,在前端发送ajax请求:
$.ajax({
type:"post",
data:$("#myform").serialize(), //表单序列化,需给每个input标签name属性,对应后台的模型对象属性
url:"voteUser_register.action", //后端的action处理地址
dataType:"json", //返回json数据
success:function(data){
if(data.code== 1){
alert("注册成功!");
location.href="login.html";
}else{
alert("注册失败!原因"+data.msg);
}
}
});
后端采用注解方案,当前端请求地址为voteUser_register.action时,其对应处理的方法是register(),调用方法成功返回success后返回一个jsonModel(json数据)给客户端,完成注册步骤。
且需要在其对应的action方法中配置
@Namespace(“/”) //路径
@ParentPackage(“json-default”) //继承包
@Action(value="/voteUser_register",results=@Result(type="json",name="success",params={"root","jsonModel","excludeNullProperties","true","noCache","true"}))
//root,指返回对象 excludeNullProperties 指去除json数据中的空值 ,noCache 指无缓存,键值对形式配置
public String register(){
jsonModel = new JsonModel();
if(user.getUname()!=null&&user.getPwd()!=null){
try{
service.saveOrUpdate(user);
jsonModel.setCode(1);
}catch(Exception e){
e.printStackTrace();
jsonModel.setCode(0);
jsonModel.setMsg("user dose not exit");
}
}else{
jsonModel.setCode(0);
jsonModel.setMsg("user dose not exit");
}
return "success";
}