初识 SpringMVC

1.Spring MVC 的工作流程

1.web请求被 前端控制器DispatcherServlet)拦截

2.DispatcherServlet调用 映射处理器HandelerMapping查找页面 处理器Handler),HandlerMapping向DispatcherServlet返回Handler。HandlerMapping把web请求映射为HandlerExecutionChain对象,它包含了一个Handler处理器对象和多个 拦截器HandlerInterceptor对象
3.DispatcherServlert调用 处理适配器HandlerAdapter去执行Handler

4.HandlerAdapter会根据适配器的结果去执行Handler,Handler执行完成后适配器返回ModelAndViewHandlerAdapter向DispatcherServlert返回ModelAndView.

5.DispatcherServlet调用 视图解析器ViewResolver进行视图解析,它根据逻辑视图名解析成JSP,ViewResolver向DispatcherServlet返回View.

6.DiapatcherServlet进行视图渲染
7.DispatcherServlet向用户返回响应结果

2.第一个SpringMVC程序

1.准备jar包(有些包为后续作准备)

2.项目结构(不要在意项目名和包名,咳咳,注意创建的是web项目)

 

3.web.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 3   <display-name>SpringMVC</display-name>
 4   <!-- 配置前端控制器 -->
 5      <servlet>
 6          <servlet-name>article6</servlet-name>
 7          <!-- 配置SpringMVC前端控制器 -->
 8          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 9          <!-- 加载Spring的配置文件 -->
10          <init-param>
11              <param-name>contextConfigLocation</param-name>
12              <param-value>classpath:springmvc-servlet.xml</param-value>
13          </init-param>
14          
15      </servlet>
16      <!-- 由DispatcherServlet拦截前缀为url的路径 -->
17      <servlet-mapping>
18          <servlet-name>article6</servlet-name>
19          <url-pattern>/url/*</url-pattern>    
20      </servlet-mapping>
21      
22 </web-app>
View Code

4.springmvc-servlet.xml(地址前缀记得加上url/才能拦截处理)

 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"
 4     xmlns:mvc="http://www.springframework.org/schema/mvc"
 5     xmlns:p="http://www.springframework.org/schema/p"
 6     xmlns:context="http://www.springframework.org/schema/context"
 7     xsi:schemaLocation="
 8         http://www.springframework.org/schema/beans
 9         http://www.springframework.org/schema/beans/spring-beans.xsd
10         http://www.springframework.org/schema/context
11         http://www.springframework.org/schema/context/spring-context.xsd
12         http://www.springframework.org/schema/mvc
13         http://www.springframework.org/schema/mvc/spring-mvc.xsd">
14         
15     <!-- 1默认方式   BeanNameUrlHandlerMapping        访问路径为http://localhost:8080/mmm/student.html-->
16     <!-- <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> --> 
17     <!-- <bean id="studentController" name="/student.html" class="com.article6.example1.StudentController"></bean> -->
18     
19     <!-- 2使用类名  studentController作为访问路径 第一个字母小写    访问路径为http://localhost:8080/mmm/studentController-->
20      <!-- <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
21      <bean id="studentController" class="com.article6.example1.StudentController"></bean> -->
22      
23      <!-- 3 SimpleUrlHandlerMapping 分离URL和bean -->
24      <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
25          <property name="mappings">
26              <props>
27              <!-- 定义路径  测试3用    访问路径为http://localhost:8080/mmm/student.html-->
28              <!--  <prop key="/student.html">studentController</prop> -->
29              
30              <!-- 多功能控制器     http://localhost:8080/mmm/url/student/addStudent-->
31                    <prop key="/student/*">studentController1</prop>
32             </props>
33          </property>
34      </bean>
35      <!-- 测试多功能控制器-->
36       <bean id="studentController1" class="com.article6.example1.StudentController1"></bean> 
37       
38      <!--   测试3用 -->
39      <!-- <bean id="studentController" class="com.article6.example1.StudentController"></bean> --> 
40      
41     <!-- 完成视图的对应 -->
42     <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
43     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
44         <property name="prefix" value="/WEB-INF/jsp/"/>
45         <property name="suffix" value=".jsp"/>
46     </bean>
47 
48 </beans>
View Code

5.StudentController.java(测试三种映射处理器(对应配置文件中三种方式)         HandlerMapping用于管理URL和controller之间的映射关系)

 1 package com.article6.example1;
 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.Controller;
 8 
 9 public class StudentController implements Controller{
10 
11     //默认 把bean的name的属性作URL使用
12 //    @Override
13 //    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
14 //        ModelAndView view=new ModelAndView();
15 //        view.addObject("msg","第一个SpringMVC程序");//传递的值
16 //        view.setViewName("/example1/StudentResult");//视图名,最后.xml文件中视图解析器会拼接此地址
17 //        return view;
18 //    }
19     
20     //类名映射控制器
21 //    @Override
22 //    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
23 //        ModelAndView view=new ModelAndView();
24 //        view.addObject("msg","类名映射控制器");
25 //        view.setViewName("/example1/StudentResult");
26 //        return view;
27 //    }
28     
29     //SimpleUrlHandlerMapping简单的URL映射控制器,可以把URL和bean的映射关系分开
30     @Override
31     public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
32         ModelAndView view=new ModelAndView();
33         view.addObject("msg","SimpleUrlHandlerMapping映射控制器");
34         view.setViewName("/example1/StudentResult");
35         return view;
36     }
37 }
View Code

6.StudentController1.java(多功能控制器  测试类  通过方法名访问       解决针对每一个URL请求编写对应的控制器显得太繁琐 )

 1 package com.article6.example1;
 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.multiaction.MultiActionController;
 8 
 9 /**            多功能控制器
10  * @author wt
11  * @data:2018年4月12日 下午7:34:53  
12  */
13 public class StudentController1 extends MultiActionController{
14     
15     public ModelAndView addStudent(HttpServletRequest arg0, HttpServletResponse arg1){
16         ModelAndView mav=new ModelAndView();
17         mav.addObject("msg","addStudent()");
18         mav.setViewName("/example1/StudentResult");
19         return mav;
20     }
21     public ModelAndView updateStudent(HttpServletRequest arg0, HttpServletResponse arg1){
22         ModelAndView mav=new ModelAndView();
23         mav.addObject("msg","updateStudent()");
24         mav.setViewName("/example1/StudentResult");
25         return mav;
26     }
27     public ModelAndView delStudent(HttpServletRequest arg0, HttpServletResponse arg1){
28         ModelAndView mav=new ModelAndView();
29         mav.addObject("msg","delStudent()");
30         mav.setViewName("/example1/StudentResult");
31         return mav;
32     }
33     public ModelAndView queryStudent(HttpServletRequest arg0, HttpServletResponse arg1){
34         ModelAndView mav=new ModelAndView();
35         mav.addObject("msg","queryStudent()");
36         mav.setViewName("/example1/StudentResult");
37         return mav;
38     }
39 }
View Code

多功能控制器的结果

 

7.StudentResult.jsp(最终访问的页面,获取msg    因为是通过转发,所以地址栏地址显示第一次访问地址

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 <%=request.getAttribute("msg")%>
11 </body>
12 </html>
View Code

这里显得很繁琐,最终我们可以使用注解驱动SpringMVC就简单多了。。。下期再做介绍。

posted @ 2018-04-12 22:25  小王六点要起床  阅读(217)  评论(0编辑  收藏  举报