目录
一、项目目录
1、目录
2、jar包
二、描述
1、配置文件的描述和思路
1、第一个配置的是前端控制器配置文件(web.xml),主要设置是需要拦截的请求(这个请求是来自客户端,用户的请求。),DispatcherServlet拦截后交给HandleMapping处理器映射器处理。(
(1)有这个类处理后返回一个结果(生成处理器对象,处理器拦截器,返回给DispatcherServlet)
(2)这个结果再交给处理器适配器,适配器里面的程序员自己写的handleRequest()方法进行处理,
(3)最后返回给DispatcherServlet,再交给视图解析解析,
(4)解析后返回DispatcherServlet,再交给前端渲染,
(5)渲染后交给前端展示。)
2、类与配置文件的联动思路
(1)这个Controller层,就是在处理器适配器,的handler的编写权利交给程序员来处理业务逻辑的。(通俗的说就是,在这儿实现我们想实现的功能。)
3、总结
我们只用管前端控制器,Controller业务处理,是视图层展示。
三、项目实例
1、类
(1)FirstController.java
package com.stx.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller //把该类添加一个标注,会自动加载成一个Bean。不用再xml文件里面配置了。简化了开发。项目启动时就会扫描该类。
@RequestMapping(value = "/hello")//标注一个加载路径,把方法提升到了类级别。
public class FirstController{
/*
* Spring MVC所支持的常见方法返回类型。
* 1、ModelAndView
* 2、Model
* 3、Map
* 4、View
* 5、String
* 6、void
* 7、HttpEntity<?>或者ResponseEntity<?>
* 8、Callable<?>
* 9、DeferredResult<?>
*1、 其中ModelAndView类型可以添加Model数据,并指定视图。
* 2、String类型的返回值可以跳转视图,但不能携带数据。
* 3、void类型主要在异步请求时使用,它只返回数据,而不会跳转视图。
*
* 因为在视图解析器中定义了视图文件的前后缀名,所以handleRequest()方法只需要返回视图名”first“即可,
* 访问此方法时,系统会自动访问”WEB-INF/jsp/“路径下名称为first的jsp文件。
* */
@RequestMapping(value = "/firstController")
public String handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Model model) throws Exception {
// 向模型对象中添加数据。
model.addAttribute("msg","这是我的第一个 Spring MVC 程序");
// 返回视图
return "first";
}
}
2、spring配置文件
(1)springmvc-config.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!--
1、首先定义一个名称为:/firstController的Bean。改Bean会将控制器类FirstController映射到/firstController请求中。
(我的理解就是WEN浏览器访问的时候就能被访问到。因为他把FirstController映射到这个请求中了。)
2、然后配置处理器映射器BeanNameUrlHandlerMapping 和 处理器适配器:SimpleControllerHandlerAdapter
(1)、其中处理器映射器用于将处理器Bean中的name(即URL)进行处理器查找。
(2)、处理器适配器用于完成对FirstController处理器中handleRequest()方法的调用。
3、最后配置视图解析器。来解析结果。并将结果呈现给用户。
(spring4以后就算不配置,也会自定使用默认完成。)
-->
<!-- 指定需要扫描的包,注解开发
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
-->
<context:component-scan base-package="com.stx.controller"></context:component-scan>
<!-- 配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 设置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
3、前端控制器(web.xml)
(1)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>
<!-- 3、配置前端过滤器-->
<servlet-name>springmvc</servlet-name>
<!-- 4、进入前端控制器-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化时加载配置文件。-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 要在src下创建才能被读取到-->
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<!-- 表示在容器启动时立即加载Servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 2、定义的别名-->
<servlet-name>springmvc</servlet-name>
<!-- 1、浏览器访问地址-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4、jsp文件
(1)first.jsp
<%--
Created by IntelliJ IDEA.
User: TAN
Date: 2021/3/7
Time: 10:16
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>入门程序</title>
</head>
<body>
${msg}
</body>
</html>