Spring Mvc
1.Spring mvc工作原理
1.客户端将请求提交到DispatcherServlet
2.由DispatcherServlet寻找一个或多个HanderMappering找到处理请求的controller
3.DispatcherServlet将请求提交到Controller
4.Controller调用业务逻辑处理后,返回ModelandView
5,Dispatcher寻找一个或多个ViewResolver,找到modelandview指定的视图
5.视图负责将结果返回给客户端
2.
2.基于注解的控制器类
springMVC使用扫描机制找到控制器类
<context:component-sacn base-package=“controller”/>
如何编写?
1.方法级别注解
@controller写在请求处理方法类的上方
@RequestMapping(value="/")写在方法上方 包括模块和功能点
2.类级别注解
@controller写在请求处理方法类的上方
@RequestMapping(value="/模块")写在类名上方
@RequestMapping(value="/功能点")写在方法上方
3.接收请求参数的方式
(1) 通过实体bean接收请求参数,实体bean属性和表单元素同名。
(2) 通过处理方法的形参接收请求参数,处理方法的形参和表单元素同名。
(3) 通过HttpServletRequest接收请求参数
(4) 通过@ModelAttribute接收请求参数
@modelAttribute(“user”)与model.addAttribute(“user” user)功能相同
4.转发和重定向区别
(1) 转发是服务器行为,重定向是客户端行为;
(2) 转发:地址栏显示第一次访问的路径。
(3) 转发:浏览器只发出过一次访问请求。
(4) 重定向:地址栏显示重定向的路径,发生变化。
(5) 重定向:浏览器做了两次访问请求。
增删查改
@Controller (1分)
@RequestMapping("/goods") (2分)
public class GoodsController { (1分)
@Autowired
private GoodsService goodsService;
(8分)
@RequestMapping(value = "/input")
public String inputGoods(Model model) {
model.addAttribute("goods", new Goods());
return "userAdd";
}
(8分)
@RequestMapping(value = "/add")
public String addGoods(@ModelAttribute Goods goods, Model model) {
if (goodsService.addGoods(goods)) {
return "redirect:/goods/list";
} else {
return "addGoods";
}
}
}
3.类型转换和格式化
converter和formatter的区别:
converter可以是从任意源类型转换任意目标类型,内置类型多
formatter是从string转换成任意类型,被拆成printerconverter和parserconverter 常用
4.数据绑定和表单标签库
数据绑定的作用:1.不需要手动将string转换成所需要的类型
2.输入验证失败后 会生成新的html表单,无需重新输入字段
数据绑定的几层含义:1.绑定请求参数输入值到领域模型
2.模型数据到视图的绑定
3.模型数据到表单元素的绑定
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<form:form modelAttribute="goods" action="goods/add"> (3分)
<form:input path="goodsname"/>
<form:input path="goodsprice"/>
<form:input path="goodsnum"/>
<input id="submit" type="submit" value="添加">
</form:form>
5.EL与JSTL
EL
默认会从 page,request,session,application获取
如 ${requestscope.array[0].name}
JSTL
标签名
<%@ taglib uri="" prefix="c"%>
<table border="2">
<c:forEach var="i" begin="1" end="9" >
<tr>
<c:forEach var="j" begin="1" end="${i}" >
<td>
${i} * ${j} = ${i*j}
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
varStatus="status"代表迭代变量的状态,包括count,index