1. 程式人生 > >SpringMVC常用方法大全

SpringMVC常用方法大全

mbo 使用 sets 國際 oid 自身 ota messages student

---恢復內容開始---

web.xml:

    

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version
="4.0"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</
listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!--處理編碼格式的問題--> <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> <!--編碼格式結束--> </web-app>

dispatcher-servlet.xml:

  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--配置 Spring的註解 掃包-->
    <context:component-scan base-package="com.hxzy"></context:component-scan>
        <!--配置SpringMVC的視圖 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/view/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    <!--配置國際化顯示工具-->
     <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
         <!-- 指定文件基名 -->
          <property name="basename" value="message"/>
         <!-- 當沒有找到資源文件時,用這基名文件 -->
       <property name="useCodeAsDefaultMessage" value="true" />
     </bean>
    <!--配置適配 MVC基本配置-->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--配置SpringMVC 不經過Handler 直接訪問jsp   攔截器必須是 / 不能是 *.do-->
    <mvc:view-controller path="A/gugugu" view-name="success"></mvc:view-controller>
    <!--配置靜態資源訪問權限  需要跟<mvc:annotation-driven> 配合使用-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

    <!--配置類的轉換器 1.將自定義的轉換器加載到Bean-->
    <bean id="converter" class="com.hxzy.test.MyConverter"></bean>
    <!--3.結束  此配置是SpringMVC的基礎配置,很功能都需要通過該註解來協調  -->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
    <!-- 配置 數據格式化 註解 所依賴的bean  2.將自定義的Bean 加入到SpringMVC提供的Bean中 -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="converter"></ref>
            </set>
        </property>
    </bean>

</beans>

TestSpringMVC:

  

package com.hxzy.test;
import com.hxzy.pojo.Address;
import com.hxzy.pojo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;


import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;
//@SessionAttributes("student")  //放在Session作用域中 可以是type= "Student.class" 或者是  key的值
@RequestMapping("/SpringMvc")
@Controller //將該類加載到SpringIOC容器
public class TestSpringMVC {
    /**
     * 普通方法操作
     * @return
     */
    @RequestMapping("show1")
    public String show1(){
        System.out.println("進入show1");
        return "success";
    }
    /**
     * 普通的POST方式
     */
    @RequestMapping(value = "show2",method = RequestMethod.POST)
    public String show2(){
        return "success";
    }
    /**
     * name 屬性的值必須是zs  並且 年齡不能是25歲(也可以沒有這個age 屬性) 並且 不能包含sex屬性  ()
     */
    @RequestMapping(value = "show3",method = RequestMethod.POST,params = {"user=zs","age!=25","!sex"})
    public String show3(){
        return "success";
    }
    /**
     * 參數要求  包含一個參數 並獲取他
     */
    @RequestMapping(value = "show4/{name}",method = RequestMethod.POST)
    public String show4(@PathVariable("name") String name){
        System.out.println(name);
        return "success";
    }
    /**
     * 獲取  通過普通的方式獲取表單裏面的值
     *
     * 多個方式的話  在方法裏面填寫就可以了
     *  為了處理 前臺頁面傳來的值小於獲取的值需要設置
     *      (前臺傳來了3個值 可是Handler裏面接受 5個值)
     *      @RequestParam(value = "age",required = false,defaultValue ="25") Integer age)
     *      需要這樣寫
     */
    @RequestMapping(value = "show_form",method = RequestMethod.POST)
    public String show_from(@RequestParam("user") String name ,@RequestParam(value = "age",required = false,defaultValue ="25") Integer age){
        System.out.println("name="+name);
        System.out.println("age=" + age);
        return "success";
    }

    /**
     * 使用SpringMVC的核心功能  最牛逼的地方  將前臺的數據傳輸到實體類
     * 註意屬性一定要對應
     */
    @RequestMapping(value = "show_allCanshuw",method = RequestMethod.POST)
    public String show_allCanshuw(Student student){
        System.out.println(student);
        return "success";
    }
    /**
     * 使用原生Servlet
     */
    @RequestMapping(value = "use_servlet",method = RequestMethod.POST)
    public String use_servlet(HttpServletRequest request){
        System.out.println(request);
        return "success";
    }
    /**
     * 返回數據和視圖  使用 ModelAndView
     */
    @RequestMapping(value = "show_student")
    public ModelAndView show_student(){
        System.out.println("進入ModelAndView.........");
        ModelAndView mv = new ModelAndView();
        mv.setViewName("success");
        Student student = new Student();
        student.setS_age(15);
        student.setS_name("大黃");
        mv.addObject("student",student);
        return mv;
    }
    /**
     * 返回數據類型 Map
     */
    @RequestMapping("show_map")
    public String show_map(Map<String,Object> map){
        Student student = new Student();
        student.setS_name("古斌map");
        map.put("studentMap",student);
        return "success";
    }
    /**
     * 返回數據類型 Model
     */
    @RequestMapping("show_model")
    public String show_model(Model model){
        Student student = new Student();
        student.setS_name("古斌Model");
        model.addAttribute("studentModel",student);
        return "success";
    }
    /**
     * 返回數據類型 Modelmap
     */
    @RequestMapping("show_ModelMap")
    public String show_ModelMap(ModelMap modelMap){
        Student student = new Student();
        student.setS_name("古斌ModelMap");
        modelMap.put("studentModelMap",student);
        return "success";
    }
    /**
     * 修改數據  從數據庫讀出來的數據 進行修改  跟下面的方法對應!!!
     */
    @RequestMapping(value = "updateStudent",method = RequestMethod.POST)
    public  String updateStudent(@RequestParam("updatename") String name,@ModelAttribute("s") Student student){
        student.setS_name(name);
        System.out.println(student);
        return "success";
    }

    //為了配合修改 加上ModelAttribute
    @ModelAttribute
    public void  queryStudent(Map<String,Object> map){
        System.out.println("ModelAttribute開始執行");
        //假設數據是從數據庫查看的
        Student student = new Student();
        student.setS_name("古斌");
        student.setS_age(18);
        Address address = new Address();
        address.setSchool_address("石家莊");
        System.out.println(student);
        map.put("s",student);  //如果 Map的key 跟修改的方法的參數對不上  需要在參數 加上@ModelArrribute
    }
    /**
     * 國際化處理
     */
    @RequestMapping("i18n_test")
    public String i18n_test(){
        return "success";
    }
    /**
     * 測試指定方式請求  轉發||重定向
     *
     * 通過“forward:”指定跳轉方式為請求轉發
     * 通過“redirect:”指定跳轉方式為重定向
     */
    @RequestMapping("SetHttp")
    public  String SetHttp(){
        return "redirect:/view/success.jsp";
    }
    /**
     * 配置類的轉換器  String 古斌-18 轉換 成 Student對象
     */
    @RequestMapping("StudentInfo")
    public String StudentInfo(@RequestParam("studentinfo") Student student){
        System.out.println(student);
        return "success";
    }
    /**
     * 配置格式化的類  日期格式化
     */
    @RequestMapping("Studentinfoss")
    public String Studentinfoss(Student student ,BindingResult result){
        //如果有錯誤信息
        if (result.getErrorCount() > 0)
        {
            //循環遍歷所有錯誤信息
            for (FieldError error : result.getFieldErrors())
            {
                System.out.println(error.getField() + ":"
                        + error.getDefaultMessage());
            }
        }
        System.out.println(student);
        return "success";
    }
    /**
     * 數據的校驗  演示 校驗Email
     *
     * @Null 被註釋的元素必須為 null。
     * @NotNull 被註釋的元素必須不為 null。
     * @AssertTrue 被註釋的元素必須為 true。
     * @AssertFalse 被註釋的元素必須為 false。
     * @Min(value) 被註釋的元素必須是一個數字,其值必須大於或等於value。
     * @Max(value) 被註釋的元素必須是一個數字,其值必須小於或等於value。
     * @DecimalMin(value) 被註釋的元素必須是一個數字,其值必須大於或等於value。
     * @DecimalMax(value) 被註釋的元素必須是一個數字,其值必須小於或等於value。
     * @Size(max, min)    被註釋的元素的取值範圍必須是介於min和max之間。
     * @Digits (integer, fraction)    被註釋的元素必須是一個數字,其值必須在可接受的範圍內。
     * @Past 被註釋的元素必須是一個過去的日期。
     * @Future 被註釋的元素必須是一個將來的日期。
     * @Pattern(value) 被註釋的元素必須符合指定的正則表達式。
     * Hibernate Validator 是JSR 303的擴展。Hibernate Validator 提供了 JSR 303中所有內置的註解,以及自身擴展的4個註解,如下:
     *
     * 註解    簡介
     * @Email 被註釋的元素值必須是合法的電子郵箱地址。
     * @Length 被註釋的字符串的長度必須在指定的範圍內。
     * @NotEmpty 被註釋的字符串的必須非空。
     * @Range 被註釋的元素必須在合適的範圍內。
     *
     */
    @RequestMapping("Jiaoyan")
    public  String Jiaoyan(@Valid Student student, BindingResult result){
        //如果有錯誤信息
        if (result.getErrorCount() > 0) {
            //循環遍歷所有錯誤信息
            for (FieldError error : result.getFieldErrors())
            {
                System.out.println(  ":"+ error.getDefaultMessage()+error.getField());
            }
        }
        System.out.println(student);
        return "success";
    }

}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 古斌
  Date: 2019/3/14
  Time: 17:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>測試類</title>
  </head>
  <body>
  <%--普通方式--%>
  <a href="SpringMvc/show1.do">Get方式指定</a><br>
  <%--post模式--%>
  <form action="SpringMvc/show2.do" method="post">
    <input type="submit" value="普通的POST方式">
  </form>
  <hr>
  <%--name屬性必須等於zs--%>
  <form action="SpringMvc/show3.do" method="post">
    賬號 <input name="user">年齡<input name="age">
    <input type="submit">
  </form>
  <hr>
  <%--有存取一個姓名 如果有.do .action 都寫在名字後面--%>
  <form action="SpringMvc/show4/古斌.do" method="post">
      <input type="submit" value="獲取姓名">
  </form>
  <hr>
  <%--獲取name的值  普通方式操作--%>
  <form action="SpringMvc/show_form.do" method="post">
    <input name="user">
    <input type="submit" value="普通方式查詢name的值">
  </form>
  <hr>
  <%--測試Spring MVC最牛逼之處  將前臺表單的數據 直接封裝到實體類--%>
  <form  action="SpringMvc/show_allCanshuw.do" method="post">
    姓名  <input name="s_name"> 年齡<input name="s_age"> 地址<input name="address.school_address">
    <input type="submit" value="提交_封裝到實體類">
  </form>
  <hr>
  <%--原生Servlet--%>
  <form  action="SpringMvc/use_servlet.do" method="post">
    <input type="submit" value="使用原生Servlet">
  </form>
  <hr>
  <%--獲取requeest作用域中的數據--%>
      <form action="SpringMvc/show_student.do" method="post">
          <input type="submit" value="ModelAndView方式">
      </form>
  <hr>
  <%--使用Map集合方式實現數據交互--%>
  <a href="SpringMvc/show_map.do">Map方式</a>  <hr>
  <%--使用ModelMap--%>
  <a href="SpringMvc/show_ModelMap.do">ModelMap方式</a><hr>
  <%--使用Model--%>
  <a href="SpringMvc/show_model.do">Model方式</a><hr>
  <%--修改數據--%>
  <form method="post" action="SpringMvc/updateStudent.do">
     name; <input type="text" name="updatename">
     <input type="submit" value="新修改">
  </form><hr>
  <%--國際化顯示數據--%>
  <a href="SpringMvc/i18n_test.do">i18N</a><hr>
  <%--不經過Handler處理直接進入數據 這個web.xml中的Spring配置必須是/  不能是*.do 等--%>
  <a href="A/gugugu">NoApplicable_</a><hr>
  <%--配置修改請求方式  轉發 重定向  這種方式對國際化會有影響 導致 國際化代碼不能使用--%>
  <a href="SpringMvc/SetHttp.do">轉發or重定向</a><hr>
  <%--配置轉換器--%>
  <form method="post" action="SpringMvc/StudentInfo.do">
    信息; <input type="text" name="studentinfo">
    <input type="submit" value="轉換">
  </form><hr>
  <%--配置日期格式化--%>
  <form method="post" action="SpringMvc/Studentinfoss.do">
    日期; <input type="text" name="birthday">
    姓名:<input type="text" name="s_name"/><br>
    年齡:<input type="text" name="s_age"/><br>
    <input type="submit" value="顯示日期">
  </form><hr>
  <%--數據的校驗--%>
  <form method="post" action="SpringMvc/Jiaoyan.do">
    日期; <input type="text" name="birthday"><br>
    姓名:<input type="text" name="s_name"/><br>
    年齡:<input type="text" name="s_age"/><br>
    Email:<input name="email"> <br>
    <input type="submit" value="顯示日期">
  </form><hr>
  </body>
</html>

  

Student.java

package com.hxzy.pojo;

import lombok.Data;
import org.hibernate.validator.constraints.Email;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;

import java.util.Date;

@Data
public class Student {
    private String s_name;
    @NumberFormat(pattern = "##,#")
    private Integer s_age;
    @DateTimeFormat(pattern="yyyy-MM-dd")//格式化:前臺傳遞來的數據,將前臺傳遞來到數據 固定為yyyy-MM-dd
    private Date birthday ;//  2018-12-13
    @Email
    private String email;

    @Override
    public String toString() {
        return "Student{" +
                "姓名=‘" + s_name + ‘\‘‘ +
                ", 年齡=" + s_age +
                "日期"+birthday+
           //     ", 地址=" + address.getSchool_address() +
                ‘}‘;
    }
}

SpringMVC常用方法大全