D45-SpringMVC(02)

  1. springmvc的两个注解
  2. restFul编程
  3. ajax的数据封装和数据转换(掌握)
  4. 响应类型方式(string viod ModeAndView----掌握)
  5. springmvc处理上传资源

一 注解

1.1 @ModelAttribute

  1. 可以配置到方法上,用来在执行控制器方法之前先执行的方法
  2. 有返回值,会将返回值给真正的控制器执行方法
    • 若是没有返回值,怎么将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指定要存入的数据。

  1. Model—存
  2. ModelMap—取
  3. SessionStatus—删

二、restFul编程

2.1 restFul编程风格

  1. 在一条地址参数上,根据不同的提交方式实现不同的功能。
    • 必须使用地址参数
    • 在同一个地址中,根据不同的提交方式实现不同的功能。

2.2 restFul编程要求

  1. 确定地址参数(id)如何设置路径,格式:{id}
  2. 确定如何获取到地址参数(id)
    • 在方法参数上使用注解:@PathVariable(value=“id”)
  1. 指定就某一种提交方式有效:
    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 视图

  1. 视图: 物理视图和逻辑视图
    • 物理视图:直接完整的路径 例如:return “/jsp/success.jsp”;
    • 逻辑视图:经过视图解析器解析的路径,例如:return “success”;
  • 默认不论是逻辑视图还是物理视图,都是请求转发。

    • 能不能自己设置视图的路径(请求转发 重定向):
      • 自己设置请求转发: return “forward:/jsp/success.jsp”;
      • 自己设置重定向:return “redirect:/jsp/success.jsp”;

3.4 页面跳转方式

页面跳转:

  • 请求转发:发送一次请求
  • 重定向:发送两次请求(第一次是用户行为,第二次是浏览器行为。)

返回值类型:String void ModeAndView

  1. 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";
    }
  1. void 类型的返回值
  • 数据响应:request
  • .页面跳转:request和response
@RequestMapping(value = "/t2")
public void t2(HttpServletRequest request, HttpServletResponse response) throws IOException {
    request.setAttribute("msg", "请求转发.....");
    //重定向
    response.sendRedirect("/jsp/success.jsp");
}
  1. 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 普通上传

在以前的表单方式基础上加条件:

  1. 表单的提交方式必须为method=post
  2. 表单中必须有上传类型的标签,还得有name属性,比如:< input type=“file” name=“aaa”>
  3. 表单中有一个属性叫: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”>
    1. 需要一个依赖坐标 fileUpload
    1. 需要配置文件解析器—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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值