spring MVC整合框架

user類

public class User {
    private Integer id;
    private String name;
    private String address;
    private Integer balance;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", balance=" + balance +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Integer getBalance() {
        return balance;
    }

    public void setBalance(Integer balance) {
        this.balance = balance;
    }
}

queryVO

public class QueryVO {
    private User user;
    private Integer id;
    private List<Integer> list = new ArrayList<Integer>();

    @Override
    public String toString() {
        return "QueryVO{" +
                "user=" + user +
                ", id=" + id +
                ", list=" + list +
                '}';
    }

    public List<Integer> getList() {
        return list;
    }

    public void setList(List<Integer> list) {
        this.list = list;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}

整合框架的結構流程:

需要程序員做的就只有,配置前端控制器(DispatcherServlet)然後書寫handler(controller)

springMVC綁定參數

1、獲得原生態的Servlet對象

Request

Response

Session

ServletContext

public void servletNative(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {

想要獲得原生態對象,只需要把這個對象放在controller的訪問方法中,就能直接獲得對應的對象

2、普通類型的參數綁定

String + 8大基本數據類型

public void normalParam(String name,Integer id){
    System.out.println(name);
}

只要把參數的名字寫在函數的參數中,就可以直接進行綁定

8大數據類型最好採用他們的封裝類,好處是不傳也不會報異常,比如如果是用int id那麼在訪問的時候沒有傳id的參數,就會報異常,改爲Integer就不報

3、pojo類型參數的封裝

public void pojoParam(User user){
    System.out.println(user);
}

直接把pojo對象放入參數中,自動將參數封裝到實體類中,並且如果還有其他的基本類型,也會將參數放入基本類型中

4、直接對pojo的封裝類綁定

public void queryVo(QueryVO queryVO){
    System.out.println(queryVO);
}

要求在傳參的時候必須使用ognl表達式的方式傳參

比如user.name  user.id  這樣纔會把參數封裝到vo的user屬性中

5、數組參數

public void arrayParam(Integer[] ids){
    for (Integer id:ids) {
        System.out.println(id);
    }
}

要求地址爲 ids=1&ids=2

6、集合參數

public void listParam(QueryVO qv){
    System.out.println(qv);
}

集合類型參數只能使用封裝類

傳參的時候List=1&list=2list=3方式傳參

請求的限制

1、地址的限制

@RequestMapping(value = "/listParam",”/listget”)

2、請求方法的限制

如果不寫method就默認兩種都有

@RequestMapping(value = "/listParam",method = RequestMethod.GET)

可以限制get、post

3、請求的方法不僅有post和get

中國人 Post、get
添加、修改 post
刪除採用post、get
查找get
外國人 post get  put  delete    ResultFul風格

   增    查   改   刪

Controller返回值

4種

1、modelAndView

既可以控制頁面的跳轉,也可以實現數據的封裝

2、void

想使用Servlet原生態的開發方式

Request和response

3、String

纔是官方推薦使用的

可以控制頁面的跳轉

@RequestMapping("/stringDemo")
public String stringDemo(Model model){
    model.addAttribute("name","小明");
    return "/index.jsp";
}

數據的封裝需要藉助model,在方法中寫上參數model,調用model的addAttribute的方法去實現數據封裝

頁面的跳轉方式:默認是轉發

              重定向: "redirect:/index.jsp";
              轉發:"forward:/index.jsp"

4、json

對比json技術的優劣(fastjson Jackson gson)

導包

<!-- 使用Json所依賴的jar包 -->

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.4</version>
</dependency>

在sprigMVC.xml中開啓轉換的方法

可以省略裏面的轉換器,加上<mvc:annotation-driven>

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>
在方法中返回值加上@ResponseBody註解
@RequestMapping("/jsonDemo")
public @ResponseBody Object jsonDemo(){
    Map map = new HashMap();
    map.put("code",1);
    map.put("msg","訪問成功");
    return map;
}

SSM框架整合

Spring跟mybatis整合

Spring跟springMVC整合

1、導包

Mybatis log4j

 

實際上就是把spring和mybatis放到web裏面來

Web.xml要配置 項目啓動就讀取spring配置文件

 

攔截器

自定義攔截器

相當於原來的過濾器的作用,在訪問目標的controller之前,先訪問過濾器

自定義一個類去實現HandlerInterceptor接口,去重寫它的三個方法

public class MyInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("調用前");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        //方法調用後
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        //頁面渲染後調用
    }
}

再把自定義的攔截器配置到springMVC核心配置文件中

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/sys/*"/>
        <bean class="com.hd.interceptor.MyInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

springMVC文件上傳

SpringMVC提供的防暑

Spring提供的方式(推薦)

導包:文件上傳需要兩個依賴

   Commons –IO

   Commons-fileUpload

 

書寫前端頁面

Form表單提交

請求方式:post

Enctype :必須是enctype="multipart/form-data"

異常處理器

寫個類實現HandlerExceptionResolver接口

並實現這個接口的方法

public class MyExceptionController implements HandlerExceptionResolver{
    @Nullable
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @Nullable Object o, Exception e) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("error",e.getMessage());
        mav.setViewName("/error.jsp");
        return mav;
    }
}

需要在springMVC配置文件中配置這個類

<bean class="com.hd.exception.MyExceptionController"></bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章