目錄
一、框架介紹
兩個重要的xml文件?
SpringMVC執行流程?
二、Vscode搭建SpringMVC框架
1、maven創建webapp原型項目
2、pom.xml下添加springmvc的相關依賴
3、在web.xml配置
?4、springmvc.xml的配置
5、編寫Controller控制器類
6、?編寫JSP界面
7、項目結構圖?
一、框架介紹
兩個重要的xml文件?
? ? ? ? web.xml文件是Java Web應用程序的部署描述文件,用于配置Web應用程序的部署信息和配置參數。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>spring_mvc</display-name><!-- springMVC的前端控制器,此處為名稱顯示在Web服務器管理頁面的 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 如果以xxx-servlet.xml命名,并且位于/WEB-INF下,則服務器會自動識別,
不需要配置 init-param--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--init-param配置是告訴服務器DispatcherServlet的配置文件在哪,此處是告訴服務器文件在src/classes下去找該配置文件 --><load-on-startup>1</load-on-startup><!-- 立即加載 --></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 此處為url匹配器,這里/表示處理所有請求,可以設置一些固定格式,來過濾非法請求。 -->
</web-app>
? ? ? ? ?springmvc.xml文件,該文件是springmvc的配置文件。該文件的名稱可以自定,文件位置甚至可以放在任意位置,但這樣做就要在web.xml配置相關文件信息和文件位置。
????????具體配置方法:要配置init-param元素,param-value值就要修改為相對于web.xml所在的路徑。上面web.xml的param-value值,說明DispatcherServlet的配置文件位于/項目名/src/resources目錄下,此目錄一般放java代碼,打包后會該配置文件會存在于\項目名\WEB-INF\classes的目錄下。
? ? ? ? 如果不想配置init-param元素,則要將springmvc的配置文件命名為xxx-servlet.xml,并且文件位于WEB-INF文件夾下。
<?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:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 配置controller --><bean id="login" name="/loginController" class="com.hfxt.controller.LoginController"></bean><!-- 配置映射處理器 :name來映射尋找controller (默認存在,可以省略不配置,如果用到另外兩種需要配置) --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean><!-- 配置視圖解析器 如何把handler 方法返回值解析為實際的物理視圖 根據控制器返回的字符串拼接成jsp路徑:/WEB-INF/page/xx.jsp --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/page/"/><!-- 前綴 --><property name="suffix" value=".jsp"/><!-- 后綴 --></bean>
</beans>
SpringMVC執行流程?
?01、用戶發送url請求到前端控制器DispatcherServlet攔截進行處理。
????????以下是具體的DispatcherServlet前端攔截器配置,DispatcherServlet的配置文件可以放在項目的任意目錄,
在web.xml文件下配置:
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>????????該語句配置了Spring MVC框架中的DispatcherServlet。
????????其中org.springframework.web.servlet.DispatcherServlet是DispatcherServlet的類路徑。
02、DispatcherServlet收到請求調用HandlerMapping(處理器映射器)?
????????HandlerMapping的實現一共有多種。以下BeanNameUrlHandlerMapping是Spring MVC 框架中最簡單的通過name映射尋找controller的 HandlerMapping 實現。
在springmvc.xml文件里配置:
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 配置映射處理器 :name來映射尋找controller (默認存在,可以省略不配置,如果用到另外兩種需要配置) -->
HandlerMapping的實現方式還有
????????SimpleUrlHandlerMapping、ControllerClassNameHandlerMapping等
03、HandlerMapping找到具體的處理器Handler(查找XML配置或注解配置),返回執行鏈。
?????????XML配置:在springmvc.xml文件里進行相關Controller類的配置
<bean id="login" name="/loginController" class="com.hfxt.controller.LoginController"></bean>
?????????注釋配置:在Controller類中使用@Controller
和@RequestMapping
等注解來指定請求路徑與處理方法的映射關系。Spring框架會掃描這些注解,并根據它們建立映射關系,從而將請求路由到相應的Controller處理方法上。
@Controller
@RequestMapping("/example")
public class ExampleController {@RequestMapping("/hello")public String hello(Model model) {model.addAttribute("message", "Hello, Spring MVC!");return "helloPage";}
}
04、HandlerAdapter(處理器適配器)經過適配調用具體的處理器(Handler/Controller)
????????HandlerAdapter適配器會找到合適的方法調用處理器Handler(因為Handler的定義方式不止一種)
05、Controller執行完成返回ModelAndView對象。
06、HandlerAdapter將Controller執行結果ModelAndView返回給DispatcherServlet。
07、DispatcherServlet將ModelAndView傳給ViewReslover(視圖解析器)?
? ? ? ??ViewReslover具體要在springmvc的配置文件里進行如下語句的具體配置,設置前綴和后綴。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/page/"/><!-- 前綴 --><property name="suffix" value=".jsp"/><!-- 后綴 --> </bean>
08、ViewReslover解析ModelAndView后返回具體View(視圖)給DispatcherServlet。
09、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中),再響應給用戶。
二、Vscode搭建SpringMVC框架
1、maven創建webapp原型項目
參考:http://t.csdnimg.cn/fg98g
resources的lib文件夾放相關jar包
java文件夾下放相關java代碼?
2、pom.xml下添加springmvc的相關依賴
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.30</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.30</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency>
只有添加完相關依賴(相當于引入相關jar包)后,才能配置springmvc。?
3、在web.xml配置
一、配置攔截器DispatcherServlet
<servlet-name>myspringmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
二、配置springmvc配置文件的地址?
<init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springmvc.xml</param-value></init-param>
?三、配置servlet映射?
?<servlet-mapping><servlet-name>myspringmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
?四、配置歡迎界面
<welcome-file-list><welcome-file>index.jsp</welcome-file>
</welcome-file-list>
最終配置代碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>spring_mvc</display-name><!-- springMVC的前端控制器 --><servlet><servlet-name>myspringmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--init-param配置文件的位置 如果springmvc.xml是以xxx-servlet.xml命名,并且位于/WEB-INF下則不需要配置 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><!-- 立即加載 --></servlet><servlet-mapping><servlet-name>myspringmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>
?4、springmvc.xml的配置
????????我們在web.xml文件下配置了springmvc.xml的路徑。該文件位于以下文件夾(resources)下。也可以自定目錄,根目錄從web項目起。
????????在配置springmvc之前,我們要生成其xml文件,eclipse可以通過可視化自動生成,而在vscode中我們可以手動創建并導入版本約束和命名空間。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"></beans>
????????然后我們就能在beans標簽里配置具體內容。?
一、配置映射處理器
常見的映射處理器有:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping、ControllerClassNameHandlerMapping等。
?<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
二、配置視圖解析器?:
????????????????用于將控制器返回的字符串拼接成可訪問的url路徑(前提是真實存在)。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"/><property name="suffix" value=".jsp"/>
</bean>
三、配置包掃描器:用于組件的自動發現和自動裝配。
<context:component-scan base-package="com.edu"/>
<mvc:annotation-driven/>
<!--啟用對處理mvc注解的支持-->
最終配置代碼:??
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 配置controller<bean id="login" name="/loginController" class="com.hfxt.controller.LoginController"></bean> --><!-- 1、配置映射處理器 :name來映射尋找controller (默認存在,可以省略不配置,如果用到另外兩種需要配置) --><context:component-scan base-package="com.edu"/><mvc:annotation-driven/><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/page/"/><property name="suffix" value=".html"/></bean>
</beans>
5、編寫Controller控制器類
????????在java文件下創建包,并編寫控制器類Controller,此類繼承了抽象類AbstractController,覆寫其方法。
package com.edu;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;@Controller
public class Calculate extends AbstractController {@RequestMapping("/calculate")@Overrideprotected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {ModelAndView mav=new ModelAndView();String x="";for(int i=1;i<=5;i++){String t=req.getParameter(Integer.toString(i));x+=t;}Integer result= count(x);System.out.println(result);mav.setViewName("result");mav.addObject("result", result);return mav;}protected Integer count(String x){String ture_result="ACCBD";Integer cnt=0;for(int i=0;i<x.length();i++){if(ture_result.charAt(i)==x.charAt(i)){cnt++;}}return cnt*20;}}
6、?編寫JSP界面
JSP的頁面文件放在webapp的文件夾下 。
?result.jsp
使用el表達式提取ModelAndView傳遞的值。
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body><h1 color="red">您本次的測試成績為:${result}分</h1></body>
</html>
index.jsp
用表單屬性action發送數據到/examination/calculate上。
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>C語言考試</title>
</head><body>
<form action="/examination/calculate" method="post"><p>1、以下哪個是C語言整形數據類型</p>
<p><input name="1" type="radio" value="A" />A、int <input name="1" type="radio" value="B" />B、char<input name="1" type="radio" value="C" />C、float<input name="1" type="radio" value="D" />D、double
</p>
<p>2、以下哪個是C語言浮點型數據類型</p>
<p><input name="2" type="radio" value="A" />A、int<input name="2" type="radio" value="B" />B、char<input name="2" type="radio" value="C" />C、float<input name="2" type="radio" value="D" />D、double
</p>
<p>3、以下哪個是C語言中格式正確的標識符</p>
<p><input name="3" type="radio" value="A" />A、int
<input name="3" type="radio" value="B" />B、1ch
<input name="3" type="radio" value="C" />C、word
<input name="3" type="radio" value="D" />D、()!@#¥
</p>
<p>4、以下哪個是C語言的文件后綴</p>
<p><input name="4" type="radio" value="A" />A、.c<input name="4" type="radio" value="B" />B、.cpp<input name="4" type="radio" value="C" />C、.java<input name="4" type="radio" value="D" />D、.py
</p>
<p>5、以下哪個是C語言中的一維數組</p>
<p><input name="5" type="radio" value="A" />A、int a;<input name="5" type="radio" value="B" />B、chara;<input name="5" type="radio" value="C" />C、float a [] [] ;<input name="5" type="radio" value="D" />D、double a [] ;
</p><input type="submit"/>
</form>
</body>
</html>