取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。
<c:set var="ctx" value="${pageContext.request.contextPath}/"/>
<script type="text/javascript" src="${ctx}/static/jquery/1.8.3/jquery-1.8.3.min.js"></script>
该页面默认跳转到main/sms/task/index Controller
<script type="text/javascript">
location.href = '${ctx}' + '/main/sms/task/index';
</script>
@RequestMapping配置该Controller的浏览器访问路径。
ModelAndView:
控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
@Controller
@RequestMapping("model")
public class ModelController {
@RequestMapping("register")
public ModelAndView register(User user){
ModelAndView mv = new ModelAndView("home");//jsp视图
mv.addObject("user", user);//数据
return mv;
}
}
Map 及 Model:
Spring MVC 在内部使用了一个org.springframework.ui.Model 接口存储模型数据。
Spring MVC 在调用方法前会创建一个–隐含的模型对象作为模型数据的存储容器。如果方法的入参为 Map 或 Model 类型,Spring MVC 会隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。
@Controller
@RequestMapping("model")
public class ModelController {
@RequestMapping("register")
public String register(User user, Map<String, Object> map){
map.put("user", user);//数据
return "home";//视图
}
}
@Controller
@RequestMapping("model")
public class ModelController {
@RequestMapping("register")
public String register(User user, Model model){
model.addAttribute("user", user);//数据
return "home";//视图
}
}
然后会将Modle或者map封装进request:
for (Map.Entry<String, Object> entry : model.entrySet()) {
String modelName = entry.getKey();
Object modelValue = entry.getValue();
if (modelValue != null) {
request.setAttribute(modelName, modelValue);
if (logger.isDebugEnabled()) {
logger.debug("Added model object '" + modelName + "' of type [" + modelValue.getClass().getName() +
"] to request in view with name '" + getBeanName() + "'");
}
}
else {
request.removeAttribute(modelName);
if (logger.isDebugEnabled()) {
logger.debug("Removed model object '" + modelName +
"' from request in view with name '" + getBeanName() + "'");
}
}
}