• 一些开发用得到的文章和代码


    1.文章类

    cookies和session:https://www.cnblogs.com/andy-zhou/p/5360107.html#:~:text=Cookie%E4%B8%8ESession%E7%9A%84%E5%8C%BA%E5%88%AB%201%20cookie%E6%95%B0%E6%8D%AE%E5%AD%98%E6%94%BE%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%9A%84%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8A%EF%BC%8Csession%E6%95%B0%E6%8D%AE%E6%94%BE%E5%9C%A8%20...%202%20cookie%E4%B8%8D%E6%98%AF%E5%BE%88%E5%AE%89%E5%85%A8%EF%BC%8C%E5%88%AB%E4%BA%BA%E5%8F%AF%E4%BB%A5%E5%88%86%E6%9E%90%E5%AD%98%E6%94%BE%E5%9C%A8%E6%9C%AC%E5%9C%B0%E7%9A%84COOKIE,...%203%20session%E4%BC%9A%E5%9C%A8%E4%B8%80%E5%AE%9A%E6%97%B6%E9%97%B4%E5%86%85%E4%BF%9D%E5%AD%98%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E3%80%82...%204%20%E5%8D%95%E4%B8%AAcookie%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E9%99%90%E5%88%B6%E6%98%AF3K%EF%BC%8C%E5%B0%B1%E6%98%AF%E8%AF%B4%E4%B8%80%E4%B8%AA%E7%AB%99%E7%82%B9%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%20

    2.代码类

    1.常用的重定向方式

    常见SpringBoot(RestFul)+SpringMVC模式下,功能说明:点击删除通过id并自动跳转到列表页

     @GetMapping("/deleteById/{id}")
        public String deleteById(@PathVariable("id") Integer id){
            cartService.removeById(id);
            return "redirect:/cart/findAllCart";
        }

    这里是SpringMVC框架的处理

    方式一:使用ModelAndView
            return new ModelAndView("redirect:/toList");
            这样可以重定向到toList这个方法
    方式二:返回String
                        return "redirect:/ toList ";

    记得在spring mvc2中,当保存POJO到数据库后,要返回成功页面,如果这个时候要带点信息, 

    则要这样:
     Java代码:  
        //第三个参数(UserModel user)默认为绑定对象  
        @RequestMapping(value = "/user/save", method = RequestMethod.POST)  
        public ModelAndView saveUser(HttpServletRequest request, HttpServletResponse response,UserModel user) throws Exception {  
            ModelAndView mv = new ModelAndView("/user/save/result");//默认为forward模式  
    //      ModelAndView mv = new ModelAndView("redirect:/user/save/result");//redirect模式  
            mv.addObject("message","保存用户成功!");  
            return mv;  
        }  

    或者这样,带参数可使用RedirectAttributes参数进行传递:

    @RequestMapping(value="/redirect",method=RequestMethod.GET)  
    public String testRedirect(RedirectAttributes attr){  
         attr.addAttribute("a", "a");  
         attr.addFlashAttribute("b", "b");  
         return "redirect:/index.action";  
    }  

    1.使用RedirectAttributes的addAttribute方法传递参数会跟随在URL后面,如上代码即为http:/index.action?a=a

    2.使用addFlashAttribute不会跟随在URL后面,会把该参数值暂时保存于session,待重定向url获取该参数后从session中移除,这里的redirect必须是方法映射路径,jsp无效。你会发现redirect后的jsp页面中b只会出现一次,刷新后b再也不会出现了,这验证了上面说的,b被访问后就会从session中移除。对于重复提交可以使用此来完成.

     @RequestMapping(value="/saveUserDetails.action", method=RequestMethod.POST)  
    public String greetingsAction(@Validated User user,RedirectAttributesredirectAttributes){  
                  
                   someUserdetailsService.save(user);  
          
                   redirectAttributes.addFlashAttribute("firstName", user.getFirstName());  
        redirectAttributes.addFlashAttribute("lastName", user.getLastName())  
        return "redirect:success.html";  
    }  
     
     
      success.html: 
    <div> 
    <h1>Hello ${firstName} ${lastName}. Your details stored in our database.</h1> 
    </div><br> 

    Servlet则这样:

    @WebServlet("/RedirectSevlet")
    public class RedirectSevlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("dopost");
            doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doGet");
            //重定向到RedirectSevlet2  request.getContextPath()获取当前项目路径
            response.sendRedirect(request.getContextPath()+"/RedirectSevlet2");
        }
    }
    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String method = req.getParameter("method");
            if (method.equals("add")){
                //http://localhost:8080/hello_user?method=add
                req.getSession().setAttribute("msg","执行了add方法");
            }
            if (method.equals("delete")){
                //http://localhost:8080/hello_user?method=delete
                req.getSession().setAttribute("msg","执行了delete方法");
            }
            //业务逻辑
            //视图跳转或者去通过重定向
            req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req,resp);
        }
    }

    2.区分Restful混淆的方法就是用get post delete 等代替requestMapping 或者就是通过不同顺序不同名字

    如:

    @GetMapping("/deleteById/{id}")

    @DeleteMapping("/deleteById/{id}")

    @GetMapping("{id}/deleteById")

    3.常用的前后联调,通过session拿到数据供服务层使用

     @GetMapping("/findAllCart")
        public ModelAndView findAllCart(HttpSession session){
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.setViewName("settlement1");
            User user = (User)session.getAttribute("user");
            modelAndView.addObject("cartList",cartService.findAllCartVOByUserId(user.getId()));
            return modelAndView;
        }

    或者这样通过注解的方式从cookies中拿到数据

    @ResponseBody
        public SeckillResult<SeckillExecution> execute(@PathVariable("seckillId") Long seckillId,
                                                       @PathVariable("md5") String md5,
                                                       @CookieValue(value = "userPhone",required = false) Long userPhone
                                                       )

    4.RestFul风格的参数接收@PathVariable,和比较一下经典url的@RequestParam接收?name=xxx的风格

    @Controller
    @RequestMapping("/User")
    public class UserController {
        @GetMapping("/t1")
        public String test1(@RequestParam("username") String name, Model model)
        {
            //1 如果前端传递的名字也是name 如:?name=xxx。那么就不用改变,如果是?usernamename=xxx就需要加@RequestParam相当于别名
            //一般都加上RequestParam,因为一样不一样都可以加 如:@RequestParam("name")即可.
            System.out.println("接收到前端的参数为:"+name);
            //2 返回的结果传递给前端,model
            model.addAttribute("msg",name);
            // 3 视图跳转
            return  "test";
        }

    如果参数较多,则可以直接这样@RequestParam拿到所有的后缀参数,这样的缺点就是不太稳定,不太敢确保有没有某一参数,所以最好通过判断再拿到参数

    @GetMapping({"/search", "/search.html"})
        public String searchPage(@RequestParam Map<String, Object> params, HttpServletRequest request) {
            if (StringUtils.isEmpty(params.get("page"))) {
                params.put("page", 1);
            }
            params.put("limit", Constants.GOODS_SEARCH_PAGE_LIMIT);
            //封装分类数据
            if (params.containsKey("goodsCategoryId") && !StringUtils.isEmpty(params.get("goodsCategoryId") + "")) {
                Long categoryId = Long.valueOf(params.get("goodsCategoryId") + "");
                SearchPageCategoryVO searchPageCategoryVO = newBeeMallCategoryService.getCategoriesForSearch(categoryId);
                if (searchPageCategoryVO != null) {
                    request.setAttribute("goodsCategoryId", categoryId);
                    request.setAttribute("searchPageCategoryVO", searchPageCategoryVO);
                }
            }
            //封装参数供前端回显
            if (params.containsKey("orderBy") && !StringUtils.isEmpty(params.get("orderBy") + "")) {
                request.setAttribute("orderBy", params.get("orderBy") + "");
            }
  • 相关阅读:
    oracle分区表总结
    Oracle AMDU用法
    sql_patch用法
    oracle resource_managed限制个人用户使用并行
    oracle 服务的故障转移测试
    RAC修改public ip,vip,priv_ip,sacn_ip
    oracle tfactl使用 TFA
    oracle dbms_metadata.get_ddl使用总结
    Oracle分析函数总结
    继承与接口的区别
  • 原文地址:https://www.cnblogs.com/yangj-Blog/p/14734686.html
Copyright © 2020-2023  润新知