目录
1、springmvc的数据响应方式:
springMVC的页面跳转
因为这些方法最终都是被springMVC框架调用,所用参数也是用springMVC传入,换句话说,谁调用参数谁就会创建参数,所以这里面方法的参数都是由springMVC创建并传入的。(有些可能是根据url获得相应数据然后转换封装成参数里面的形式)
@Controller
public class userController {
//这个注解的意思是访问的是/quick是就自动映射到这个save方法,执行对应的逻辑,最后返回一个"success.jsp",跳到webapp的对应jsp中
@RequestMapping("/quick")
public String save(){
System.out.println("controller save running");
return "success";
}
@RequestMapping("/quick2")
public ModelAndView save2(){
//model:用于封装数据
//view:用于展示数据
ModelAndView modelAndView = new ModelAndView();
//设置模型数据
modelAndView.addObject("username","gdut");
//设置视图
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping("/quick3")
//springMVC在检测到这个方法发现有个参数需要springMVC来提供,就会创建一个
public ModelAndView save3(ModelAndView modelAndView){
modelAndView.addObject("username","gdut");
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping("/quick4")
//把model和view分开来创建
public String save4(Model model){
model.addAttribute("username","computer");
return "success";
}
@RequestMapping("/quick5")
//使用Httpservletrequest来创建对象并写数据到request域当中,不常用
public String save5(HttpServletRequest request){
request.setAttribute("username","myrequest");
return "success";
}
}
springMVC的获取回写数据
1、直接返回字符串
@RequestMapping("/quick6")
@ResponseBody//告诉springMVC框架不要进行页面跳转,直接回写字符串,不然就跟save1一样了
public String save6(){
return "success test save6";
}
}
返回Jason格式的字符串:
@RequestMapping("/quick7")
@ResponseBody//告诉springMVC框架不要进行页面跳转,直接回写字符串,不然就跟save1一样了
public String save7() throws IOException {
User user = new User();
user.setUsername("lisi");
user.setAge(20);
//使用json的转换工具将对象转换成json格式字符串再返回
ObjectMapper objectMapper = new ObjectMapper();
String jason = objectMapper.writeValueAsString(user);
return jason;
}
2、返回对象或集合
可以把对象以json的形式返回给页面,这里需要用到一个json的转换器,再spring-mvc.xml文件中进行配置,告诉sping-mvc遇到对象就将其转化为json格式返回
<!-- 配置处理器映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</list>
</property>
</bean>
@RequestMapping("/quick8")
@ResponseBody
//期望springMVC自动把user转换成Jason格式的字符串
public User save8() throws IOException {
User user = new User();
user.setUsername("zhansan");
user.setAge(23);
//使用json的转换工具将对象转换成json格式字符串再返回
ObjectMapper objectMapper = new ObjectMapper();
String jason = objectMapper.writeValueAsString(user);
return user;
}
2、springMVC获取请求数据
1、获取基本类型参数
http://localhost:8080/quick9?username=pnjg&age=22
@RequestMapping("/quick9")
@ResponseBody
//void:不进行数据回写,@ResponseBody:不进行页面跳转
public void save9(String username, int age) {
System.out.println(username);
System.out.println(age);
}
2、获得POJO类型参数
http://localhost:8080/quick10?username=pnjg&age=22
@RequestMapping("/quick10")
@ResponseBody
//void:不进行数据回写,@ResponseBody:不进行页面跳转
public void save10(User user) {
System.out.println(user);
}
3、获得数组类型参数
http://localhost:8080/quick11?s=pnjg&s=is&big&s=handsome&s=boy
@RequestMapping("/quick11")
@ResponseBody
//void:不进行数据回写,@ResponseBody:不进行页面跳转
public void save11(String s) {
System.out.println(Arrays.asList(s));
}
4、获得集合类型参数
情况1:
想要获得集合,先把集合封装到一个VO对象当中
public class VO {
private List<User> userList;
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
在前端获取集合的数据
<%--action属性表示表示收集来的数据交由哪一个页面来处理--%>
<form action="${pageContext.request.contextPath}/quick12" method="post">
<%--表明是第几个user对象的username、age--%>
<input type="text" name="userList[0].username"><br>
<input type="text" name="userList[0].age"><br>
<input type="text" name="userList[1].username"><br>
<input type="text" name="userList[1].age"><br>
<input type="submit" value="提交">
</form>
在controller就能封装到VO中了
@RequestMapping("/quick12")
@ResponseBody
//void:不进行数据回写,@ResponseBody:不进行页面跳转
//vo是集合对象
public void save12(VO vo) {
System.out.println(vo);
}
情况2:
<%--模拟数据--%>
<script>
var userList = new Array();
userList.push({usernmae:"zhangsan",age:18});
userList.push({usernmae:"lisi",age:20});
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/quick13",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8"
})
</script>
@RequestMapping("/quick13")
@ResponseBody
//void:不进行数据回写,@ResponseBody:不进行页面跳转
public void save13(@RequestBody List<User> userList) {
System.out.println(userList);
}
开启访问静态资源的两种方式:
<!-- 1、开放对哪些资源的访问-->
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<!--2、找不到对应资源,交给原始服务器处理-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
5、请求数据乱码问题
<!--配置全局过滤的filter,这里是解决post请求中文乱码问题-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6、参数绑定注解@requestParam
http://localhost:8080/quick14?name=pnjg
//@RequestParam将请求里面的name映射到username中
public void save14(@RequestParam(value = "name",required = false) String username) {
System.out.println(username);
}
7、获得Restful风格的参数、@PathVariable
这里绿色的“name”要对应上,这样请求的参数才能被springMVC获取赋给方法里的参数,黑色的name要对应上
http://localhost:8080/quick15/pnjg
@RequestMapping("/quick15/{name}")
@ResponseBody
public void save15(@PathVariable(value = "name") String username) {
System.out.println(username);
}
8、自定义类型转换器
9、获得servlet相关API
10、获得请求头
11、文件上传
1.单文件上传步骤
1)、
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
2)、
<!-- 配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
3)、
http://localhost:8080/upload.jsp
@RequestMapping("/quick17")
@ResponseBody
public void save17(String username , MultipartFile upload) throws IOException {
System.out.println(username);
//获得上传文件的名称
String originalFilename = upload.getOriginalFilename();
//将获得的文件存入服务器磁盘
upload.transferTo(new File("e:\\upload\\"+originalFilename));
}
}