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>