spring mvc之四:数据回显与json

前言

比较struts2与spring mvc
实现机制:
Struts2是基于过滤器实现的。
Springmvc基于servlet实现。Servlet比过滤器快。

运行速度:
Struts2是多列
请求来了以后,struts2创建多少个对象:
ActionContext,valuestack,UserAction,ActionSuport,ModelDriven
Springmvc是单列

参数封装来分析:
Struts基于属性进行封装。
Springmvc基于方法封装。

页面回显:
查询所有
构造一组list数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@RequestMapping("userlist")
//model 相当于application域对象
public String userlist(Model modal){
List<User> list=new ArrayList<>();
User u1=new User();
u1.setId(1);
u1.setSex("1");
u1.setAddress("lol");
u1.setUsername("1");
u1.setBirthday(new Date());
User u2=new User();
u2.setId(1);
u2.setSex("1");
u2.setAddress("lol");
u2.setUsername("1");
u2.setBirthday(new Date());
list.add(u1);
list.add(u2);
modal.addAttribute("userlist", list);
return "login";
}

页面回显(利用jstl标签回显)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>//声明此标签
<body>
<table border="1" style="color: blue">
<tr>
<td>姓名</td>
<td>生日</td>
<td>性别</td>
<td>地址</td>
<td>操作</td>
</tr>
<c:forEach items="${userlist }" var="user">
<tr>
<td>${user.username }</td>
<td>${user.birthday }</td>
<td>${user.sex }</td>
<td>${user.address }</td>
<td>
<a href="${pageContext.request.contextPath }/test/update?id=${user.id }">delete</a>
</td>
</tr>
</c:forEach>
</table>
</body>

注意此处有个delete

delete

利用?的方法,无疑将值显示的传过去,很不安全

测试:在浏览器中输入http://localhost:100/springmvc2/test/userlist.do

可以取出集合中的数据,同时delete中有显示id=参数传过去了

URL模版映射

url模版映射是restfull软件架构
Web.xml拦截方式:在rest目录下所有请求都被拦截,servlet可以拦截目录
配置如下:

1
2
3
4
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

():匹配接受页面Url路径参数
@Pathariable:()里面参数注入后面参数里面

1
2
3
4
5
6
@RequestMapping("update/{id}")
public String update(@PathVariable Integer id){
System.out.println(id);
return "redirect:/test/userlist.do";
}

页面修改:

delete

测试:同样输入相同地址,会发现href代参直接变成/参数

转发和重定向

转发
关键字:forward
本类进行转发:
本类方法与方法之间进行forward
转发方式:

return “forward : /test/userlist.do”;

跨类进行转发:
转发方式:return ”forward:/items/userlist.do“;
其中items是类前面的路径声明

重定向
关键字:redirect
本类进行重定向:
本类方法与方法之间进行redirect
重定向方式:

return “redirect:/test/userlist.do”;

跨类进行重定向:
转发方式:return ”redirect:/items/userlist.do“;

@responseBody和@RequestBody

@responseBody把后台pojo转换json对象,返回到页面。
@RequestBody接受前台json数据,把json数据自动封装javaBean。

下面以一个实例说明
这里ajax传递json数据用jquery来模拟

步骤一:导入jar包(jackson-core-asl-1.9.11.jar和jackson-mapper-asl-1.9.11.jar)
加入jquery
在springmvc.xml文件中声明对json数据的支持

1
2
3
4
5
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</property>
</bean>

页面传递ajax格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
function requestjson(){
//模拟了一个json格式数据
var jsonobj=JSON.stringify({"username":"11","sex":"man","address":"ok"});
$.ajax({
type:'POST',
url:'<%=path%>/test/requestjson.do',
//申明传递的是json格式
contentType:'application/json;charset=utf-8',
//传递的数据
data:jsonobj,
//如果成功,返回数据
success:function(data){
alert(data.username);
}
})
}
</script>
<body>
<form action="">
<input type="text" name="username1" onclick="requestjson();"/>
</form>
</body>

后台代码:

1
2
3
4
5
6
@RequestMapping("requestjson")
public @ResponseBody User requestjson(@RequestBody User user){
System.out.println(user.getSex());
return user;
}

此处声明了接受的参数和返回的都是json数据格式

测试:在浏览器输入http://localhost:100/springmvc2/index.jsp
通过点击文本,后台会打印参数,同时返回一个user对象给前台,并显示出来

pojo,后台返回json
前台请求数据构造:key=value&key=value.
首先是页面

1
2
3
4
5
6
7
8
9
$.ajax({
type:'POST',
url:'<%=path%>/user/requestjson1.do',
data:'username=lol&address=zwl',
success:function(data){
alert(data.username);
}
})

1
2
3
4
5
6
7
后台代码:
@RequestMapping("requestjson1")
public @ResponseBody User requestjson1(User user){
System.out.println(user.getAddress());
return user;
}

最后在springmvc中配置的前两个设配器,我们可以通过一个注解声明代替

不仅如此,它还自动包括了json数据格式声明等等
即默认创建注解处理器映射器,注解处理器适配器。提供json格式支持。

热评文章