spring mvc基本實現解析
阿新 • • 發佈:2018-12-15
概念: spring mvc是ssm(spring,spring mvc,matatis)框架之一,作用就是controller控制層,spring mvc是spring框架分解出來的一部分。
Spring mvc的執行過程: 1·客戶端傳送請求到 dispacherServlet 2·dispacherServlet把相應的請求傳送給HanderMapping(madelAndView(資料和檢視)) 3·modelAndView---->dispacherServlet----->viewResolve---->dispacherServlet
核心物件: 1·DispacherServlet 2·HandlerAdapter 3·檢視渲染器
開發一個基礎的spring mvc框架專案的步驟:
1.匯入相關的jar包spring-webmvc.jar 2.配置核心檔案 springmvc.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--當你的請求地址是index.html的時候 就會到UserController類-->
<!--<bean name="/index.html" class="com.offcn.controller.UserController"></bean>-->
<!--掃描controller下所有的包-->
<context:component-scan base-package="com.offcn.controller"/>
<!--開啟註解驅動-->
<mvc:annotation-driven/>
<!--完成檢視的對應 檢視渲染器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--開始配置字首-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!--開始配置字尾-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
3.配置核心檔案 springmvc.xml到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">
<!--開始配置servlet servlet-name設定servlet名字-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
總結:Contoller層的各種實現方式
package com.offcn.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
@Controller
@RequestMapping("/userController")
public class UserController {
/**
* controller類要實現Controller介面
*/
//當你的客戶端傳送的請求url地址 跟這個類對應上了就會走這個方法(HandlerMapping)
/* @Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//就是你要跳轉到的介面,引數處理後腰跳轉的介面
return new ModelAndView("doIndex");
}
}*/
/* @RequestMapping("index") //代表請求的地址
public String index(){
//返回的介面
return "doIndex";*/
//value代表網頁拼接的鍵,required代表是否必須憑藉引數,true/false代表是否必須拼接
/* @RequestMapping("index")
public String index(@RequestParam(value = "userName",required = false) String userName){
System.out.println(userName);
return "doIndex";
}*/
//這種必須傳引數
//報405的錯誤是因為你的請求方式和接受方式不統一
/* @RequestMapping(value = "/index/*.do",params ={"userName","pwd"},method = RequestMethod.GET)
public String index(String userName,String pwd) {
System.out.println(userName+"------"+pwd);
return "doIndex";
}*/
//url=uri+urn
//PathVariable 匹配uri上的任何引數,註解上的pid和引數pid一定要一樣,才能到到具體的資料
@RequestMapping(value = "/index/{pid}")
public String index(@PathVariable String pid){
System.out.println(pid);
return "doIndex";
}
//把Controller的資料傳到jsp頁面中
@RequestMapping("/toDoIndex")
public ModelAndView toDoIndex(String userName){
//獲取userName
//構建modelAndView物件
ModelAndView modelAndView = new ModelAndView();
//把值放到modelAndView(以鍵值對形式傳遞)
modelAndView.addObject("userName",userName);
//把需要跳轉的頁面放到modelAndView裡面
modelAndView.setViewName("doIndex");
System.out.println("1234567");
return modelAndView;
}
//通過mao把資料傳過去
@RequestMapping("/toDoIndex2")
public String toDoIndex2(String userName, Map<String,Object> map){
map.put("userName",userName);
return "doIndex";
}
//返回就是我們要跳轉的地址 view model,這個model不用例項化,直接傳進去
@RequestMapping("/toDoIndex1")
public String toDoIndex1(String userName,Model model){
//給model新增資料,同樣也是以鍵值對形式來傳參的
model.addAttribute("userName",userName);
return "doIndex";
}
//最終版
@RequestMapping("/toUpdate")
public String toUpdate(
@RequestParam(value = "userName",required = false) String userName,
@RequestParam(value = "userPwd",required =false)
String userPwd){
return "doIndex";
}
}