1. TODAY WEB輕量級(jí) Web 框架

        聯(lián)合創(chuàng)作 · 2023-09-20 03:05

        TODAY WEB 是一個(gè)輕量級(jí) Web 框架

        安裝

        <dependency>
            <groupId>cn.taketoday</groupId>
            <artifactId>today-web</artifactId>
            <version>2.3.6.RELEASE</version>
        </dependency>

        案例

        文檔

        使用說明

        通過 @Controller @RestController 配置控制器

        //@Controller
        @RestController
        @RequestMapping("/users")
        public class IndexController {
            
        }

        配置請(qǐng)求

        @GET("index")
        @POST("post")
        @PUT("articles/{id}")
        ......
        @RequestMapping("/users/{id}")
        @RequestMapping(value = "/users/**", method = {RequestMethod.GET})
        @RequestMapping(value = "/users/*.html", method = {RequestMethod.GET})
        @RequestMapping(value = {"/index.action", "/index.do", "/index"}, method = RequestMethod.GET)
        @Interceptor({LoginInterceptor.class, ...})
        public (String|List<?>|Set<?>|Map<?>|void|File|Image|...) \\w+ (request, request, session,servletContext, str, int, long , byte, short, boolean, @Session("loginUser"), @Header("User-Agent"), @Cookie("JSESSIONID"), @PathVariable("id"), @RequestBody("users"), @Multipart("uploadFiles") MultipartFile[]) {
            service...
            return </>;
        }

        自定義參數(shù)轉(zhuǎn)換器

        @ParameterConverter 
        public class DateConverter implements Converter<String, Date> {
            @Override
            public Date doConvert(String source) throws ConversionException {
                ...
            }
        }

        也可以通過xml文件配置簡(jiǎn)單視圖,靜態(tài)資源,自定義視圖解析器,文件上傳解析器,異常處理器,參數(shù)解析器

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE Web-Configuration PUBLIC 
        		"-//TODAY BLOG//Web - Configuration DTD 2.0//CN"
        			"https://taketoday.cn/framework/web/dtd/web-configuration-2.3.3.dtd">
        
        <Web-Configuration>
        
                <controller prefix="/error/">
                <action resource="400" name="BadRequest" status="400" />
                <action resource="403" name="Forbidden" status="403" />
                <action resource="404" name="NotFound" status="404" />
                <action resource="500" name="ServerIsBusy" status="500" />
                <action resource="405" name="MethodNotAllowed" status="405" />
            </controller>
        
            <controller>
                <action resource="redirect:http://pipe.b3log.org/blogs/Today" name="today-blog-pipe" />
                <action resource="redirect:https://taketoday.cn" name="today" />
                <action resource="redirect:https://github.com" name="github" />
                <action resource="redirect:/login" name="login.do" />
            </controller>
        
            <controller class="cn.taketoday.web.demo.controller.XMLController" name="xmlController" prefix="/xml/">
                <action name="obj" method="obj" />
                <action name="test" resource="test" method="test"/>
            </controller>
        
        </Web-Configuration>

        登錄實(shí)例

        @Controller
        public class UserController {
        
        /* 
            <controller prefix="/WEB-INF/view/" suffix=".ftl">
                <action resource="login" name="login" />
                <action resource="register" name="register" />
            </controller> */
            
            // @GET("login")
            @RequestMapping(value = "/login" , method = RequestMethod.GET)
            public String login() {
                return "/login/login";//支持jsp,FreeMarker,Thymeleaf,自定義視圖
            }
            
            @Logger("登錄")
            //@POST("/login")
            //@RequestMapping(value = "/login" , method = RequestMethod.POST)
            @ActionMapping(value = "/login", method = RequestMethod.POST)
            public String login(HttpSession session, RedirectModel redirectModel, @Valid User user, Errors error) {
            
                if (error.hasErrors()) {
                    System.err.println(error.getAllErrors());
                    redirectModel.attribute("msg", error.getAllErrors().toString());
                    return "redirect:/login";
                }
            
                User login = userService.login(user);
                if (login == null) {
                    redirectModel.attribute("userId", user.getUserId());
                    redirectModel.attribute("msg", "登錄失敗");
                    return "redirect:/login";
                }
                redirectModel.attribute("msg", "登錄成功");
                session.setAttribute(USER_INFO, login);
                return "redirect:/user/info";
            }
            
        }

        文件下載,支持直接返回給瀏覽器圖片

        @RequestMapping(value = {"/download"}, method = RequestMethod.GET)
        public File download(String path) {
            return new File(path);
        }
        @GET("/display")
        public final BufferedImage display(HttpServletResponse response) throws IOException {
            response.setContentType("image/jpeg");
            return ImageIO.read(new File("D:/taketoday.cn/webapps/upload/logo.png"));
        }
        
        @GET("captcha")
        public final BufferedImage captcha(HttpServletRequest request) throws IOException {
            BufferedImage image = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_INT_RGB);
            Graphics graphics = image.getGraphics();
            graphics.setColor(Color.WHITE);
            graphics.fillRect(0, 0, IMG_WIDTH, IMG_HEIGHT);
            Graphics2D graphics2d = (Graphics2D) graphics;
            drawRandomNum(graphics2d, request);
            return image;
        }

        文件上傳,支持多文件

        @RequestMapping(value = { "/upload" }, method = RequestMethod.POST)
        public final String upload(@Multipart MultipartFile uploadFile) throws IOException {
        
            String upload = "D:/www.yhj.com/webapps/upload/";
            String path = upload + uploadFile.getFileName();
            File file = new File(path);
            uploadFile.save(file);
        
            return "/upload/" + uploadFile.getFileName();
        }
        
        @POST({"/upload/multi"})
        public final String multiUpload(HttpServletResponse response, @Multipart MultipartFile[] files) throws IOException {
        
            String upload = "D:/www.yhj.com/webapps/upload/";
            
            for (MultipartFile multipartFile : files) {
                String path = upload + multipartFile.getFileName();
                File file = new File(path);
                System.out.println(path);
                if (!multipartFile.save(file)) {
                    return "<script>alert('upload error !')</script>";
                    //response.getWriter().print("<script>alert('upload error !')</script>");
                }
            }
            //response.getWriter().print("<script>alert('upload success !')</script>");
            return "<script>alert('upload success !')</script>";
        }
        
        瀏覽 16
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
          
          

            1. 国产精品美女久久久久久久网站 | 日本中文字幕网站 | 中国产公妇仑在线观看 | 亚洲色频 | www.AV在线播放 |