1. 程式人生 > 遊戲資訊 >方舟小短劇6:農耕文明

方舟小短劇6:農耕文明

SpringMVC快速入門

入門程式碼實現

匯入SpringMVC座標
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.17</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.17</version>
    </dependency>
配置SpringMVC的前端控制器
<!--  配置SpringMVC的前端控制器-->
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>mapping>
建立Controller類和檢視介面,使用註解配置Controller類中業務方法的對映地址
@Controller
public class UserController {

    @RequestMapping("/quick")
    public String save(){
        System.out.println("Controller save running....");
                return "success.jsp";
    }
}
<html>
<head>
    <title>test</title>
</head>
<body>
    <h1>success!!!</h1>
</body>
</html>
配置SpringMVC核心檔案spring-mvc.xml
<!--    Controller的元件掃描-->
    <context:component-scan base-package="com.example.controller"/>

執行測試

SpringMVC的資料響應方式

頁面跳轉

直接返回字串
@RequestMapping(value = "/quick",method = RequestMethod.GET,params = {"username"})
    public String save(){
        System.out.println("Controller save running....");
//                return "redirect:/success.jsp";//forward:轉發(預設) redirect:重定向
        return "success";
    }
通過ModelAndView物件返回
    @RequestMapping("/quick4")
    public String save4(HttpServletRequest request){
        request.setAttribute("username","王五");
        return "success";
    }

    @RequestMapping("/quick3")
    public String save3(ModelAndView modelAndView){
        modelAndView.addObject("username","李四");
        return "success";
    }

    @RequestMapping("/quick2")
    public ModelAndView save2(){
//        Model:模型 封裝資料
//        view:檢視 展示資料
        ModelAndView modelAndView = new ModelAndView();
        //設定模型資料
        modelAndView.addObject("username","張三");
        modelAndView.setViewName("success");
        return modelAndView;
    }

回寫資料

直接返回字串
    @RequestMapping("/quick8")
    @ResponseBody //告知SpringMVC框架 不進行檢視跳轉 直接進行資料響應
    public String save8() throws Exception{
        User user = new User();
        user.setUsername("lisi");
        user.setAge(30);
        //使用json的轉換工具將物件轉換成json格式字串返回
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);
        return json;
    }

    @RequestMapping("/quick7")
    @ResponseBody //告知SpringMVC框架 不進行檢視跳轉 直接進行資料響應
    public String save7() throws Exception{
        return "{\"username\":\"zs\",\"age\":18}";
    }

    @RequestMapping("/quick6")
    @ResponseBody //告知SpringMVC框架 不進行檢視跳轉 直接進行資料響應
    public String save6() throws Exception{
        return "zl";
    }

    @RequestMapping("/quick5")
    public void save5(HttpServletResponse response) throws Exception{
        response.getWriter().print("hello word!");
    }
返回物件或集合
//<!--    MVC註解驅動-->
//        <mvc:annotation-driven/>
@RequestMapping(value = "/quick9",produces = "application/json;charset=UTF-8")
    @ResponseBody //告知SpringMVC框架 不進行檢視跳轉 直接進行資料響應
    //期望SpringMVC自動將User轉換成json格式的字串
    public User save9() throws Exception{
        User user = new User();
        user.setUsername("lisi");
        user.setAge(30);

        return user;
    }

SpringMVC獲得請求資料

SpringMVC可以獲得如下型別引數:

  • 基本型別引數

  • POJO型別引數

  • 陣列型別引數

  • 集合型別引數

獲得基本型別引數
    @RequestMapping("/quick")
    @ResponseBody //不進行頁面跳轉
    public void save(String username,int age) throws Exception{
        System.out.println(username);
        System.out.println(age);
    }
獲取POJO型別引數
    @RequestMapping("/quick1")
    @ResponseBody //不進行頁面跳轉
    public void save(User user) throws Exception{
        System.out.println(user);
    }
獲取陣列型別引數
@RequestMapping("/quick2")
    @ResponseBody //不進行頁面跳轉
    public void save2(String[] strs) throws Exception{
        System.out.println(Arrays.asList(strs));
    }
獲取集合型別引數
<html>
<head>
    <title>Title</title>
    <script src="/js/jquery.min.js"/>
    <script>
        var userList = new Array();
        userList.push({username:"zs",age:18});
        userList.push({username:"lisi",age:20});

        $.ajax({
            type:"POST",
            url:"/req/quick4",
            data:JSON.stringify(userList),
            contentType:"application/json;charset=UTF_8"
        });
    </script>
</head>
<body>

</body>
</html>
    @RequestMapping("/quick4")
    @ResponseBody //不進行頁面跳轉
    public void save4(@RequestBody List<User> userList) throws Exception{
        System.out.println(userList);
    }
請求資料亂碼解決
<!--  配置全域性過濾filter-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
引數繫結註解@requestParam

當請求的引數名稱與Controller的業務方法引數名稱不一致時使用

    @RequestMapping("/quick5")
    @ResponseBody //不進行頁面跳轉
    public void save5(@RequestParam(value="name") String username) throws Exception{
       //@RequestParam引數:value(請求引數名稱),required(此引數在請求中是否必須包括,預設為true),defaultValue(當沒有指定引數時使用預設值賦值)
       System.out.println(username);
    }
獲取請求頭
//獲取請求頭
    @RequestMapping("/quick8")
    @ResponseBody //不進行頁面跳轉
    public void save8(@RequestHeader(value = "User-Agent",required = false) String header) throws Exception{
        System.out.println(header);
    }

    //獲取Cookie值
    @RequestMapping("/quick9")
    @ResponseBody //不進行頁面跳轉
    public void save9(@CookieValue(value = "JSESSIONID",required = false) String cookie) throws Exception{
        System.out.println(cookie);
    }

檔案上傳

匯入fileupload和io座標
<!--      檔案上傳座標匯入-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>
配置檔案上傳解析器
<!--    配置檔案上傳解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--        上傳檔案總大小-->
        <property name="maxUploadSize" value="5242800"/>
<!--        上傳單個檔案大小-->
        <property name="maxUploadSizePerFile" value="5242800"/>
<!--        上傳檔案編碼型別-->
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
編寫檔案上傳程式碼(單檔案)
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/req/quick10" method="post" enctype="multipart/form-data">
        <input name="username" type="text"><br>
        <input name="password" type="password"><br>
        <input type="file" name="upload1">
        <input type="submit" value="提交">
    </form>
</body>
</html>
    @RequestMapping("/quick10")
    @ResponseBody //不進行頁面跳轉
    public void save10(String name, MultipartFile upload1) throws Exception{
//        獲得檔名稱
        String originalFilename1 = upload1.getOriginalFilename();
//        儲存檔案
        upload1.transferTo(new File("E:\\Spring_Project\\"+originalFilename1));
    }
        
編寫檔案上傳程式碼(多檔案)
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/req/quick11" method="post" enctype="multipart/form-data">
        <input name="username" type="text"><br>
        <input name="password" type="password"><br>
        <input type="file" name="upload">
        <input type="file" name="upload">
        <input type="submit" value="提交">
    </form>
</body>
</html>
    @RequestMapping("/quick11")
    @ResponseBody //不進行頁面跳轉
    public void save11(String name, MultipartFile[] upload) throws Exception{
//        獲得檔名稱
        for (MultipartFile multipartFile:upload) {
            String originalFilename = multipartFile.getOriginalFilename();
//        儲存檔案
            multipartFile.transferTo(new File("E:\\Spring_Project\\" + originalFilename));
        }
    }