<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          TODAY WEB輕量級 Web 框架

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

          TODAY WEB 是一個輕量級 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 {
              
          }

          配置請求

          @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文件配置簡單視圖,靜態(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>

          登錄實例

          @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
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  97乱伦| 2016亚洲天堂 | 婷婷五月天大香蕉 | 天天舔天天干 | 人人爱碰|