- springmvc的两个注解
- restFul编程
- ajax的数据封装和数据转换(掌握)
- 响应类型方式(string viod ModeAndView----掌握)
- springmvc处理上传资源
一 注解
1.1 @ModelAttribute
- 可以配置到方法上,用来在执行控制器方法之前先执行的方法
- 有返回值,会将返回值给真正的控制器执行方法
-
- 若是没有返回值,怎么将user给控制器方法
-
-
- 在参数上定义map,有key,有value,value:当前整理好了的数据的对象
-
-
-
- map.put(“key”,对象);
-
@ModelAttribute
public void before(int id, String username, Map<String,User> map){
//获取id 根据id去数据库查询一个对象
User user = findById(id);
user.setUsername(username);
map.put("abcd",user);
}
1.2 @SessionAttribute
在SessionController类中
作用: 代表当前类中的所有方法,只要是model对象操作了指定的参数,都会往session域中存一份。
@SessionAttributes(value = {"username"})/
条件: 必须使用当前类上使用注解@SessionAttribut指定要存入的数据。
- Model—存
- ModelMap—取
- SessionStatus—删
二、restFul编程
2.1 restFul编程风格
- 在一条地址参数上,根据不同的提交方式实现不同的功能。
-
- 必须使用地址参数
-
- 在同一个地址中,根据不同的提交方式实现不同的功能。
2.2 restFul编程要求
- 确定地址参数(id)如何设置路径,格式:{id}
- 确定如何获取到地址参数(id)
-
- 在方法参数上使用注解:@PathVariable(value=“id”)
- 指定就某一种提交方式有效:
method = RequestMethod.Get 只对get提交有效
@Controller
public class RestFulController {
//根据id查询
@RequestMapping(value = "/{idd}.html",method = RequestMethod.GET)
public String findById(@PathVariable(value = "idd") int id){
System.out.println("获取页面的传递的"+id+"去修改!!");
return "suceess";
}
}
ps: 需要在地址栏写入数据,例如:http://localhost:8080/19980.html
三、ajax的数据封装和数据转换(掌握)
3.1 @RequestBody
- 配置到方法参数上,表名将json字符串转化为java对象。
3.2 @RresponseBody
- 配置到方法返回值上,表名将对象转化为json字符串并响应。
3.5 视图
- 视图: 物理视图和逻辑视图
-
- 物理视图:直接完整的路径 例如:return “/jsp/success.jsp”;
-
- 逻辑视图:经过视图解析器解析的路径,例如:return “success”;
-
默认不论是逻辑视图还是物理视图,都是请求转发。
-
- 能不能自己设置视图的路径(请求转发 重定向):
-
-
- 自己设置请求转发: return “forward:/jsp/success.jsp”;
-
-
-
- 自己设置重定向:return “redirect:/jsp/success.jsp”;
-
3.4 页面跳转方式
页面跳转:
- 请求转发:发送一次请求
- 重定向:发送两次请求(第一次是用户行为,第二次是浏览器行为。)
返回值类型:String void ModeAndView
- String 类型的返回值
-
- .数据响应:reque对象
- 页面跳转:
-
-
- 默认:以请求转发的方式跳转(逻辑视图,物理视图)
-
- 设置页面跳转方式:
-
- 页面跳转方式(forward |redirect):物理视图
@RequestMapping(value = "/return")
public class ReturnController {
@RequestMapping(value = "/t1")
public String t1(HttpServletRequest request) {
request.setAttribute("msg", "能代表的是请求转发。。。。");
return "redirect:/jsp/success.jsp";
}
- void 类型的返回值
- 数据响应:request
- .页面跳转:request和response
@RequestMapping(value = "/t2")
public void t2(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setAttribute("msg", "请求转发.....");
//重定向
response.sendRedirect("/jsp/success.jsp");
}
- ModeAndView 类型的返回值
- .springmvc提供的一个对象,可以进行数据响应也可以设置页面跳转的视图地址。
- addObject : 将数据绑定到request域中
- setViewName: 指定跳转到页面视图
public ModelAndView t3() {
ModelAndView modelAndView = new ModelAndView();
//地址
modelAndView.setViewName("success");//请求转发
//如果是请求转发,表示往request中放数据
//如果是重定向 不会放,会以地址栏参数的方式将数据携带过去,?msg=能看到我代表用的是请求转发
modelAndView.addObject("msg", "能看到我代表用的是请求转发");
//自己设置请求转发
modelAndView.setViewName("forward:/jsp/success.jsp");
//自己设置重定向
modelAndView.setViewName("redirect:/jsp/success.jsp");
return modelAndView;
}
四、springmvc处理上传资源
4.1 普通上传
在以前的表单方式基础上加条件:
- 表单的提交方式必须为method=post
- 表单中必须有上传类型的标签,还得有name属性,比如:< input type=“file” name=“aaa”>
- 表单中有一个属性叫:enctype属性,默认值:application/x–www-form-urlencoded
-
- application/x–www-form-urlencoded:告诉服务器整个表单中提交的都是字符串数据
-
- 上传enctype必须为:Mulipart/form-data : 代表着文件上传给服务器。
4.1.1 SpringMVC
springmvc提供了文件上传对象(MultipartFile对象)所有上传的资源都封装到这个对象中 比如:文件名
- 需要定义在方法的参数上, 参数名称和文件类型标签的name属性名一致,<input type="file’ name=“myFile”>
-
- 需要一个依赖坐标 fileUpload
-
- 需要配置文件解析器—springmvc的配置文件中配置
@Controller
public class UpLoadController {
@RequestMapping(value = "/upload")
public String upload(MultipartFile myFile, HttpServletRequest request) throws IOException {
//获取上传文件的名称
String filename = myFile.getOriginalFilename();
System.out.println(filename);
//UUID,随机获取一串数字
filename = UUID.randomUUID().toString().replace("-", "") + filename;
//获取当前项目在服务器的磁盘根路径
ServletContext context = request.getSession().getServletContext();
String realPath = context.getRealPath("");
System.out.println(realPath);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String data = simpleDateFormat.format(new Date());
realPath = realPath + "upload\\" + data;
//在该路径下创建文件夹
File file = new File(realPath);
if (!file.exists()) {
//创建
file.mkdirs();
}
//流的资源对拷
File file1 = new File(realPath, filename);
myFile.transferTo(file1);
return "success";
}
}
- index页面中
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="myFile"/>
<input type="submit" value="上传">
</form>