1.Springmvc是什么

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

 

1.1 Springmvc 架构图

 

 

 

1DispacherServlet前端控制器

负责用户请求和响应,是一个中央控制器(调度),调用HandlerMapping查找Handler,调用HandlerAdapter处理器适配器执行Handler,调用ViewResolver视图解析器去解析视图,有了DispacherServlet有利于框架扩展,减少了各各组件之间耦合性。

 

2HandlerMapping处理器映射器

不需要开发,使用框架提供的

负责查找Handler(常用action),通过xml配置方式或注解方式将Handler类和request请求Handler链接地址进行对应配置。

3HandlerAdapter处理器适配器

不需要开发,使用框架提供的

Springmvc提供了很多种适配器,注解适配器支持注解开发、原始servlet适配器(HanderRequestAdapter)支持原始servlet的执行。

负责执行Handler,适配器是按照一定的规则去执行Handler,调用Handler返回的结果是ModelAndViewModelAndViewModelview封装起来(模型数据和视图)

 

4ViewResolver视图解析器

不需要开发,使用框架提供的

负责进行视图解析,返回View,框架执行很多类型的ViewjstlViewpdfView。。。)

 

5Handler处理器(需要开发)

需要开发,按照适配器的规则开发,比如适配器要求Handler实现某个接口,Handler必须实现接口。

 

6View视图页面(jsp) (需要开发)

需要开发,jsp+jstl。为了视图通用性建议使用第三方框架,jstl

 

处理器映射器、处理器适配器、视图解析器称为springmvc的三大件。

 

 

HTTP 协议简介

1.2 HTTP 简介/HTTP   SSL

HTTP(Hypertext Transfer Protocol,超文本传输协议①)是在万维网上进行通信时

所使用的协议方案。HTTP 有很多应用,但最著名的是用于Web 浏览器和Web 服

务器之间的双工通信。

1.3 HTTP报文

 

报文组成

 

起始行

报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说

明出现了什么情况。

• 首部字段

起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为

了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首

部字段和添加新行一样简单。

• 主体

空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括

了要发送给Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起

始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意

的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含

文本

1.4 请求实例

 

1.5 一些常见的HTTP方法

GET 从服务器向客户端发送命名资源

PUT 将来自客户端的数据存储到一个命名的服务器资源中去

DELETE 从服务器中删除命名资源

POST 将客户端数据发送到一个服务器网关应用程序

HEAD 仅发送命名资源响应中的HTTP 首部

1.6 HTTP状态码

常见状态码

200 OK。文档正确返回

302 Redirect(重定向)。到其他地方去获取资源

404 Not Found(没找到)。无法找到这个资源

405 Method Not Allowed(不允许使用的方法)

406 Not Acceptable(无法接受) 客户端可以指定一些参数来说明希望接受哪些类型的实体。服务器没有资源与客可接受的URL 相匹配时可使用此代码

 

请求中有一个所请求的URI 不支持的方法。响应中

应该包含一个Allow 首部,以告知客户端所请求的

资源支持使用哪些方法

状态码分类

总体范围已定义范围类  别

100~199 100~101 信息

200~299 200~206 成功

300~399 300~305 重定向

400~499 400~415 客户端错误

500~599 500~505 服务器错误

1.7 springmvc关系(struts2 请求的路径)

 

 

 

 

处理器映射器:

 

处理器适配器:使用下面的适配器

 

通过上面代码可以看出,如果Handler实现了Controller接口,那么就可以完成执行工作。

 

 

视图解析器

如果在classpath下有jstljar包,那么就不需要配置如下内容

 

 

 

1.sringmvc核心组件
DispatchServlet

HandlerMapping 处理器映射器 寻找Handler action Controller

HandlerAdapter 处理器适配器

Handler ModelAndView

ViewResolver 视图解析器

 

 

2.关于springmvc核心配置文件

位置一:在WEB-INF下 命名 servletName-servlet.xml
****:不需在特定的配置

位置二:在classPath下 可以任意明明springmvc配置文件的名称

 

------------------------------------------------------------

首先是SpringMVC配置

第一步:先导入lib包

 

接下来不是注解版!!!上面的lib包都是一样的

 

第二步:配置web.xml

 

代码:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7     <servlet>
 8         <servlet-name>example</servlet-name>
 9         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
10         <load-on-startup>1</load-on-startup>
11     </servlet>
12 
13     <servlet-mapping>
14         <servlet-name>example</servlet-name>
15         <url-pattern>/</url-pattern>
16     </servlet-mapping>
17     
18   <welcome-file-list>
19     <welcome-file>index.jsp</welcome-file>
20   </welcome-file-list>
21 </web-app>
web.xml

 

 

第三步:配置example-servlet.xml

 

代码:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mvc="http://www.springframework.org/schema/mvc"
 6     xsi:schemaLocation="  
 7     http://www.springframework.org/schema/beans   
 8     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
 9     http://www.springframework.org/schema/context  
10     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
11     ">
12 
13     <bean name="/welcome" class="cn.happy.controller.Happycontroller" />
14     <!--视图解析器 -->
15     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
16         <property name="prefix" value="/WEB-INF/jsp/" />
17         <property name="suffix" value=".jsp" />
18     </bean>
19 </beans>
example-servlet.xml

第四步:写Happycontroller类

 

代码:

 

 1 package cn.happy.controller;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.web.servlet.ModelAndView;
 7 import org.springframework.web.servlet.mvc.AbstractController;
 8 
 9 public class Happycontroller extends AbstractController {
10 
11     @Override
12     protected ModelAndView handleRequestInternal(HttpServletRequest request,
13             HttpServletResponse response) throws Exception {
14         System.out.println("holle Spring MVC!");
15         //逻辑视图名
16         return new ModelAndView("example");
17     }
18 
19 }
Happycontroller.java

 

 

第五步:写example.jsp

 

代码:

 

 1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     
12     <title>My JSP 'example.jsp' starting page</title>
13   </head>
14   
15   <body>    
16           hoell Spring MVC!
17   </body>
18 </html>
example.jsp

配完了显示网页

 

接下来是注解版

第二步:配置web.xml

 

代码:

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7     <servlet>
 8         <servlet-name>example</servlet-name>
 9         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
10         <init-param>
11             <param-name>contextConfigLocation</param-name>
12             <param-value>classpath:example.xml</param-value>
13         </init-param>
14     </servlet>
15 
16     <servlet-mapping>
17         <servlet-name>example</servlet-name>
18         <url-pattern>/</url-pattern>
19     </servlet-mapping>
20     
21   <welcome-file-list>
22     <welcome-file>index.jsp</welcome-file>
23   </welcome-file-list>
24 </web-app>
web.xml

第三步:配置example.xml

 

代码:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mvc="http://www.springframework.org/schema/mvc"
 6     xsi:schemaLocation="  
 7     http://www.springframework.org/schema/beans   
 8     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
 9     http://www.springframework.org/schema/context  
10     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
11     http://www.springframework.org/schema/mvc
12     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
13     ">
14 
15     <!-- <bean name="/welcome" class="cn.happy.controller.Happycontroller" /> -->
16     <!-- 让Spring扫描包下的的所有的类,让标注Spring注解的类生效 -->
17     <context:component-scan base-package="cn.happy.controller"/>
18     <mvc:annotation-driven/>
19     <!--视图解析器 -->
20     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
21         <property name="prefix" value="/WEB-INF/jsp/" />
22         <property name="suffix" value=".jsp" />
23     </bean>
24 </beans>
example.xml

第五步:

(1)非带参的类

 

代码:

 1 package cn.happy.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 
 6 @Controller
 7 public class HelloController {
 8     @RequestMapping(value="/hello")
 9     public String hello(){
10         System.out.println("hello,Spring MVC!");
11         return "example";
12     }
13 }
HelloController

(2)带参的类

 

代码:

 1 package cn.happy.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.ui.Model;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RequestParam;
 7 import org.springframework.web.servlet.ModelAndView;
 8 
 9 @Controller
10 public class HelloController {
11     /*@RequestMapping(value="/hello")
12     public String hello(@RequestParam(value="username",required=false) String username){
13         System.out.println("hello,Spring MVC! username-->"+username);
14         
15         return "example";
16     }*/
17     @RequestMapping(value="/hello2")
18     public String hello(String username,Model model){
19         System.out.println("hello,Spring MVC! username-->"+username);
20         model.addAttribute("username", username);
21         return "example";
22     }
23     @RequestMapping(value="/hello3")
24     public ModelAndView hello(String username){
25         System.out.println("hello3...");
26         ModelAndView andView=new ModelAndView();
27         andView.setViewName("example");
28         andView.addObject("username", username);
29         return andView;
30         
31     }
32 }
HelloController

第六步:example.jsp

 

代码:

 1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     
12     <title>My JSP 'example.jsp' starting page</title>
13   </head>
14   
15   <body>    
16           hoell Spring MVC! ${username}
17   </body>
18 </html>
example.jsp