SpringMVC注解式开发
1.搭建环境
1.1 后端控制器无需实现接口,添加相应注解
1.2 springmvc配置文件无需注册controller
1.3 springmvc配置文件中添加组件扫描器、注解驱动
<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与 AnnotationMethodHandlerAdapter 两个bean,并提供了:数据绑定支持, @NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支 持(JAXB),读写JSON的支持(Jackson)等等。
<!-- 注册组件扫描器 -->
<context:component-scan base-package="com.bjsxt.handlers"></context:component-scan>
<!-- 注册注解驱动 -->
<mvc:annotation-driven/>
<!-- 注册视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 静态资源无法访问第二种解决方案 -->
<!-- <mvc:default-servlet-handler/> -->
<!-- 静态资源无法访问第三种解决方案 -->
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
</beans>
2.涉及常用注解
@Controller、@RequestMapping(类体上【命名空间】、方法上)、@Scope
@Controller //该注解表将当前类交给spring容器管理
@Scope("prototype")
@RequestMapping("/springmvc") //该注解起到限定范围的作用
3.视图解析器(前缀、后缀)
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
4.处理器方法常用的参数(五类)
4.1 HttpServletRequest
4.2 HttpServletResponse
4.3 HttpSession
4.4 用于承载数据的Model、Map、ModelMap【代码示例】
//后端控制器
@Controller //该注解表将当前类交给spring容器管理
@Scope("prototype")
@RequestMapping("/springmvc") //该注解起到限定范围的作用
public class MyController{
//接收json字符串并封装成对象
@RequestMapping("/hello")
public String hello1(String username,int age,Model model,Map<String, Object> map,ModelMap modelMap){
System.out.println(username + " ----------"+age);
model.addAttribute("username", username);
map.put("age", age);
modelMap.addAttribute("gender", "female");
return "welcome";
}
4.5 请求中所携带的请求参数
5.接收请求参数
1. 参数接收之逐个接收
(1) 在后端控制器中如何接收前台参数
创建ModelAndView。对象.addObject进行获取方法中的参数。
@RequestMapping("/hello") //@RequestParam解决当参数名和属性名不一致
public ModelAndView hello(@RequestParam("username") String name,int age){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("username", name);
modelAndView.addObject("age", age);
modelAndView.setViewName("welcome");
return modelAndView;
}
(2)SpringMVC中会自动进行类型转换。
2. 参数接收之对象整体接收
(1) 以对象形式整体接收参数:封装数据对象,提供get和set将对象为参数进行接收
(2) 以对象形式整体接收参数:接收的参数的名称必须和对象内的参数名称一致。
(@RequestParam解决当参数名和属性名不一致)
3. 参数接收之数组或集合接收参数
(1) 用数组或集合接收参数:后端控制器内的方法参数为数组形式或集合形式,然后通过循环遍历获取数据。
//数组接收参数
/*
@RequestMapping("/hello")
public void hello(String[] interest){
for (String string : interest) {
System.out.println(string);
}
}
*/
//集合接收参数
@RequestMapping("/hello")
public void hello1(@RequestParam List<String> interest){
for (String string : interest) {
System.out.println(string);
}
(2) 数组和集合接收参数的区别:集合参数内加上@RequestParam进行效正。
4. 参数接收之域属性参数接收及restful风格传参
(1) 域属性参数的接收需要
//域属性,也称为对象属性
private Parter parter;
首先获取域属性,然后获得域属性中的值
(2) restful风格传参:参数作为路径变量的一部分,通过路径传递过来。
5. 参数接收之接收json
(1) 后端控制器中接收前台传过来的Json字符串:
回调函数获取Json字符串 .
导入jackson包
//后端控制器
@Controller //该注解表将当前类交给spring容器管理
@Scope("prototype")
@RequestMapping("/springmvc") //该注解起到限定范围的作用
public class MyController{
//接收json字符串并封装成对象
@RequestMapping("/hello")
public void hello1(@RequestBody Star star) {
System.out.println(star);
}
}
jsp中代码
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
$("#myButton").click(function(){
var data1={username:"zhangsan",age:23};
$.ajax({
url:"${pageContext.request.contextPath}/springmvc/hello",
type: "POST",
contentType:"application/json",
data:JSON.stringify(data1),/*将当前的数据转换成json字符串 */
})
})
})
</script>
<title>Insert title here</title>
</head>
<body>
<button id="myButton">点击</button>
</body>
(2)将页面中的Json对象转换成Json字符串:Eval
6. 获取请求头中信息@RequestHeader
(1) 请求头中有哪些常用信息:Host、cookie、session
(注解@RequestHeader)
@RequestHeader该注解放到方法参数里
7. 处理器方法返回值类型String
处理器方法获取Form表单的数据时使用String作为返回值类型。
8. 处理器方法无返回值void
(1) 如果处理器方法无返回值,进行资源跳转及传递数据
//接收json字符串并封装成对象
@RequestMapping(value="/hello",produces="text/html;charset=utf-8")
public void hello1(HttpServletResponse response) throws IOException{
String json="{"name":"weilong","flavor":"hot"}";
response.getWriter().print(json);
}
(2) 何时处理器方法无返回值较合适?
页面不需要进行资源跳转的时。