4.在WEB-INF的包下进行创建jsp/hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} </body> </html>
5.配置控制层的实现
package com.Jsxs.controller; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //注意:这里我们先导入Controller接口 public class helloController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { // ModelAndView 模型和视图 ModelAndView mv = new ModelAndView(); //封装对象,放在ModelAndView中 mv.addObject("msg","HelloSpringMVC"); mv.setViewName("hello"); return mv; } }
6.注意如果出现404和500的错误
- 首先把继承的包导入到对应的空间中的lib目录中去
- 如果出现500的错误,显示不能创建bean或者什么什么的,这边建议直接另起一个项目,重新建立一个已经配置的web文件。(就是模板)
3.可以不创建新的web模板,我们只需要在创建Model的时候,我们应该对lib目录下进行添加如下几个内容,不能多。
(三)、SpringMVC执行原理
1.中心控制器:
SpringMVC的web框架围绕DispatcherServlet设计,DispatcherServlet的作用就是将请求分发到不同的处理器、从spring2.5开始,用户可以采用基于注解的controller声明方式。
2.原理解析(左边部分不用我们操作)
(1).DispatcherServlet
DispatcherServlet表示前置控制器,是整个SpringMVC的控制核心。用户发出请求,DispatcherServlet接受请求并拦截请求。(映射就是)
- 我们假设请求的url为:
- http://localhost:80/SpringMVC_03_Hello_war/hello
- 如上的url可以分为三部分
- http://http://localhost:80 - - - 服务器域名
- SpringMVC_03_Hello_war - - - 部署在服务器上的web站点
- hello - - - - 表示控制器
- 通过分析,如上url表示为 : 请求位于服务器 localhost:80 上的 SpringMVC_03_Hello_war站点的hello控制器
(2).HandlerMapping
HandlerMapping为处理器映射,DispatcherServlet调用HandlerMapping,HandlerMapping根据url查找 Handler
(3).HandlerExpecution
HandlerExpecution表示具体的Handler,其主要作用是根据url查找控制器,如url被查找控制为 : hello
【4】.返回给DispatcherServlet
HandlerExpecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等
(5).HandlerAdpate
HandlerAdpate表示处理适配器,其按照特定的规则去执行Handler
(6).Handler让具体的Controller执行
(7).Controller将拘役的执行信息返回给HandlerAdpate,如Model和View
【8】.HandlerAdpter将试图逻辑名或模型传递给DispatcherServlet.
(9).DispatcherServlet调用视图解析器(VierResolver)来解析HandlerAdpater传递的逻辑视图名
视图解析器的作用: 1.获取Model和view的数据 2.解析model和view的视图名字 3.拼接试图的名字,找到具体的视图
(10).视图解析器将解析的逻辑视图传给DispatcherServlet
(11).DispatcherServlet根据视图解析器解析视图的结果,调用器具图的视图。
(12).最终视图呈现给用户
(四)、深入了解SpringMVC
(1).在web.xml配置DispatcherServlet 核心
1.配置DispatcherServlet 核心 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 2.配置DispatcherServlet 映射 <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 3.绑定spring文件 <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> 4.启动级别: 就是让他和服务器进行同步 <load-on-startup>1</load-on-startup>
<?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"> <!-- 1. 配置DispatcherServlet 核心--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 3. DispatcherServlet要绑定Spring的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!-- 4. 启动级别: 就是让他和服务器进行同步--> <load-on-startup>1</load-on-startup> </servlet> <!-- 2. 在SpringMVC中, / 只匹配所有的请求,不会去请求jsp /* 匹配所有的请求,会请求jsp 在springMvc中 我们尽量写/ --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
(2).配置Spring文件
1.配置处理器映射器 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 2.配置处理器适配器 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 3.配置视图解析器 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> </bean> 4.配置bean <bean id="/test" class="com.Jsxs.controller.helloController"/>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 处理器映射器: (BNUHM) 对应图 【2】--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 处理器适配器 对应 图 【5】 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 视图解析器 对应 图 【9】--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> </bean> <!-- 因为处理器映射器需要借助一个bean , 所以我们应该配置一个bean--> <bean id="/test" class="com.Jsxs.controller.helloController"/> </beans>
(3).配置控制层(Controller)
1.继承接口Controller接口,重写处理请求的方法 2.创建ModelAndView ModelAndView modelAndView = new ModelAndView(); 3.为ModelAndView进行添加业务需求 modelAndView.addObject("msg",result); 4.进行视图的跳转 modelAndView.setViewName("test"); 5.返回视图
package com.Jsxs.controller; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 对应 图 【6】 public class helloController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { // 创建ModelAndView ModelAndView modelAndView = new ModelAndView(); // 业务代码 String result="你好啊 小明"; modelAndView.addObject("msg",result); // 视图进行跳转 modelAndView.setViewName("test"); return modelAndView; } }