先来个总体配置步骤
第一步创建一个新的maven子工程
第二步将web导入
第三步配置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> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
第四步在resources文件下创建springmvc-servlet.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" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --> <context:component-scan base-package="com.wusong.controller"/> <!-- 让Spring MVC不处理静态资源 资源过滤--> <mvc:default-servlet-handler /> <!-- 支持mvc注解驱动 在spring中一般采用@RequestMapping注解来完成映射关系 要想使@RequestMapping注解生效 必须向上下文中注册DefaultAnnotationHandlerMapping 和一个AnnotationMethodHandlerAdapter实例 这两个实例分别在类级别和方法级别处理。 而annotation-driven配置帮助我们自动完成上述两个实例的注入。 --> <!-- efaultAnnotationHandlerMapping 一个AnnotationMethodHandlerAdapter实例 <mvc:annotation-driven />自动注入这两个 --> <mvc:annotation-driven /> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans>
这样框架都搭建好了,可能会出现一些问题,以下是问题解决办法
还有能是你的xml文件没有被扫描到,在maven的pom.xml文件里面加上如下配置
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
Controller(控制器)
-
控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。(接受用户之后,请求要做什么事情,建议使用注解定义,因为项目一般都是完全注解开发)
-
控制器负责解析用户的请求并将其转换为一个模型。
-
在Spring MVC中一个控制器类可以包含多个方法
-
在Spring MVC中,对于Controller的配置方式有很多种
以下代码就可以让com.wusong.controller下的所有被@controller注解的类都被扫描到 (Spring 的知识,交给Spring进行管理(IOC容器))
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --> <context:component-scan base-package="com.wusong.controller"/>
在spring中一般采用@RequestMapping注解来完成映射关系要想使@RequestMapping注解生效必须向上下文中注册DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助我们自动完成上述两个实例的注入,省去了处理器、适配器和映射器的大量配置代码。
<!-- 支持mvc注解驱动 --> <mvc:annotation-driven />
过滤静态资源
<!-- 让Spring MVC不处理静态资源 资源过滤--> <mvc:default-servlet-handler />
还有一个视图解析器
<!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean>
第一种方式实现Controller接口
只要实现Controller接口的类,这个类就可以获得控制器的功能,控制器(处理请求并且返回ModelAndView)
话不多说我们直接上实战,创建一个ControllerTest1类来实现Controller接口
只要实现了controller接口的类说明这就是一个控制器(servlet)
在test.jsp文件里面写如下代码:
<%-- Created by IntelliJ IDEA. User: 邬松 Date: 2021/4/15 Time: 12:32 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} </body> </html>
编写完毕后,去Spring配置文件中注册请求的bean,name对应请求路径,class对应处理请求的类
<bean id="/ws1" class="com.wusong.controller.ControllerTest1"></bean>
然后就可以测试了,启动Tomcat
测试结果
邬松你好就出来啦! 但是现在都不推荐使用实现controller接口来实现 缺点 一个控制器中只能实现一个方法 一个方法就要创建一个bean 哪编写代码和维护代码的效率有多低? 所以一般都是通过注解@Controller来实现
基于@Controller注解实现
@Controller注解类型用于声明Spring类的实例是一个控制器(在IOC里也有另外的3个注解 service 业务层使用service注入到容器 repository dao层使用repository注入到容器 Component 用于组件注入 ) controller 用于控制层注入
哪话不多说,我们直接上实战吧!
首先创建一个类ControllerTest2并添加@Controller注解
Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --> <context:component-scan base-package="com.wusong.controller"/>
在ControllerTest2类中编写如下代码, @RequestMapping(“/t2”) 请求的地址为t2对应实现Controller接口里面在配置文件中配置的bean的id 这样一说你肯定就知道使用注解开发的简易之处了吧?
@Controller注解的类代表这个类会被Spring接管,被这个注解的类,中的所有方法,如果返回值是String,并且有具体页面可以跳转,那么就会被视图解析器解析,但是可以通过@RestController注解让这个注解的类不会被视图解析器解析 返回的就会只是一个字符串 这个后面会用到,现在不用。
@Controller public class ControllerTest2 { //映射访问路径 @RequestMapping("/t2") public String index(Model model){ //Spring MVC会自动实例化一个Model对象用于向视图中传值 model.addAttribute("msg", "邬松您好!"); //返回视图位置 return "test"; } }
启动Tomcat测试
邬松您好!就出来啦!是不是明显代码量减少了很多?这就是面向注解开发。
可以发现,我们的多个请求都可以指向一个视图,但是页面结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱耦合关系。
结果跳转方式
SpringMVC处理前端的数据
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106059.html