回顾:
MVC : spring框架提供的实现了mvc思想的web层框架
入门: 坐标,编写控制器类,springmvc的配置文件,web.xml
组件: 核心控制器,处理器映射器,处理器适配器,视图解析器
参数: 约定俗成
返回值: string类型的返回值
Springmvc项目搭建步骤
<1>
如果项目需要访问webapp下的静态资源(例如image和js),还需要配置静态资源映射 详见下图
<2>
<3>项目结构
1 数据响应与页面跳转
1.1 String类型的返回值
1.1.1 数据响应
使用request对象完成(1.获取request,2.将数据保存到request域中,3.页面使用el获取)
1.1.2 页面跳转
简写: 只支持请求转发的形式
完整:
跳转方法(forward|redirect):页面的完成路径
1.2 ModelAndView类型的返回值
1.3 Void类型返回值(请求转发和重定向)
2. 常见注解
2.1 获取请求数据(了解)
2.1.1 获取请求中的请求头信息
2.1.2 获取请求中cookie中的内容
2.2 功能性注解(看看得了)
2.2.1 ModelAttribute
ModelAttribute配置到一个非控制器方法上. 配置的方法会在所有控制器方法之前执行
2.2.2 SessionAttributes
SessionAttributes配置到控制器类上,自动的将此类中request域(指定)的内容存入到session中
package cn.itcast.controller;
import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
@SessionAttributes(names={"user"})
public class SsessionAttributesController {
//存入session
@RequestMapping("/login")
public String login(Model model) {
User user = new User();
user.setUsername("zhangsan");
user.setAge(12);
//request.setAttribute("user",user); //将request域中存入一个叫做user的对象
model.addAttribute("user",user); //交给springmvc进行后续处理(将数据保存到reqeust和session中)
return "success";
}
//检测session
@RequestMapping("/testSession")
public String testSession(HttpSession session) {
Object obj = session.getAttribute("user");
if(obj==null) {
System.out.println("session中为null");
}else{
User user = (User) obj;
System.out.println(user);
}
return "success";
}
/**
* SessionStatus: 工具类
*/
//清空session
@RequestMapping("/clearSession")
public String clearSession(SessionStatus ss) {
ss.setComplete(); //清空session
return "success";
}
}
2.3 请求参数注解@RequestParam
2.4 Ajax注解
引入三个依赖
<!--
spring调用jackson进行对象与json之间的相互转化
-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
@ResponseBody
@RequestBody
这两个注解的作用是自动做json对象的转化
请求是json格式
响应也是json格式
2.5 RestFull注解
@PathVariable : 获取地址参数
对同一个url,根据不同的请求方式(post,get,delete,put),完成不同的业务处理
package cn.itcast.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/user")
public class UserController {
/**
* url风格 : /user/2 : 地址参数
* 1.地址参数如何定义
* url中定义地址参数: {自定义参数名}
* 如何获取地址参数的值 : 使用@PathVaribale
* 获取地址参数中的内容 : 配置到参数上
* 语法: @PathVaribale(value="自定义参数名")
*
* 2.如何配置此路径的请求方式
* 在@RequestMapping注解中使用method制定rest的请求方式
*
* @return
*/
//1.根据id查询用户
@RequestMapping(value="/{userId}" ,method = RequestMethod.GET)
public String findById(@PathVariable(value="userId") String userId) {
System.out.println("根据id查询用户,id="+userId);
int i = 1/0;
return "success";
}
//2.根据id更新用户
@RequestMapping(value="/{userId}",method = RequestMethod.PUT)
public String update(@PathVariable(value="userId") String id) {
System.out.println("更新用户,id="+id);
return "success";
}
//3.根据id删除用户
@RequestMapping(value="/{userId}",method = RequestMethod.DELETE)
public String delete(@PathVariable(value="userId") String id) {
System.out.println("删除用户,id="+id);
return "success";
}
//4.保存用户
@RequestMapping(value="",method = RequestMethod.POST)
public String save() {
System.out.println("保存用户");
return "success";
}
//5.查询全部用户
@RequestMapping(value="",method = RequestMethod.GET)
public String findAll() {
System.out.println("查询全部");
return "success";
}
/**
* 分页查询所有用户
* 参数
* RequestParam : 应用于请求参数名和方法参数名不一致的情况下
* value|name : 可接受的参数名
* required : 指定当前参数是否必须 (false|true) :不配置
* defaultValue : 指定参数的默认值
*/
@RequestMapping(value="/findAll")
public String findAll(@RequestParam(value="no",defaultValue="1") Integer pageNo) {
System.out.println("分页查询pageno = " + pageNo);
return "success";
}
}
-
静态资源映射
-
-
统一异常处理
自定义异常处理器
将异常处理器交给spring容器管理
-
文件上传
5.1 业务流程
5.2 注意事项
5.2.1 页面注意事项
1.提交方式 : post
2.enctype : 字节流数组
3.文件input的type = file
5.2.2 Java服务端注意事项
1.导入文件上传的jar包
common-fileupload
2.文件上传的配置
springmvc的配置文件
3.在java代码中使用MultipartFile对象操作文件
5.3 代码实现
5.3.1 页面
5.3.2 Java服务端
5.3.2.1 文件上传的坐标
<!--文件上传的坐标-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
5.3.2.2 Springmvc的配置
<!--配置文件上传-->
<!-- id 的值是固定的-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为 5MB 5*1024*1024-->
<property name="maxUploadSize" value="5242880"></property>
</bean>
面试总结
@RequestBody和@ReponseBody
RestFull
统一异常处理
文件上传
作业:
Ajax
Restfull
统一异常
文件上传