Python 官方文档:入门教程 => 点击学习
目录一、spring集成WEB环境(解耦)二、springMVC快速入门三、Springmvc的执行流程四、SpringMVC组件解析五、SpringMVC注解解析六、SpringM
实际开发中,我们通常需要编写多个Web相关的Servlet的时候,如下
package com.kang.service;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.servlet.*;
import javax.servlet.Http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/userServlet")
public class UserServlet extends httpservlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ApplicationContext app = new ClassPathXmlApplicationContext("applicatonContext.xml");
UserService userService = (UserService) app.getBean("userService");
userService.save();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
这里就会出现一个问题,spring的xml文件只需要加载一次即可,并不需要每启动一个Servlet就加载一个xml文件,应用上下文的对象也被创建多次,这明显是一个不太好的弊端
这时候spring以及给我们封装好一个工具类用于返回加载这个xml配置文件的ApplicationContext对象
引入:ServletContext
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
作用:
首先在web.xml配置全局参数(spring配置文件名称)和spring监听器(用于服务开始的时候加载springxml文件)
通过这个方法来减少spring配置文件的加载次数,从而提高程序的加载速度
使用步骤:
在web.xml配置ContextLoaderListener监听器(导入spring-web坐标)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
使用WebApplicationContextUtils获得应用上下文对象ApplicationContext
<!--web.xml-->
<!--全局参数:配置spring的xml配置文件名字-->
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicatonContext.xml</param-value>
</context-param>
<!--Spring监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
</listener>
package com.kang.service;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext对象,用于读取全局参数
ServletContext servletContext = request.getServletContext();
//获取监听器返回的WebApplicationContext对象
WebApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
UserService userService = app.getBean(UserService.class);
userService.save();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。
它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时 它还支持 RESTful 编程风格的请求。
导入SpringMVC相关坐标
<!--springMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
配置SpringMVC核心控制器DispathcerServlet
<!--springMVC的前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--导入springmcv核心配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--映射配置-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
创建Controller类和视图页面
创建一个Controller包,编写QuickController类
使用注解配置Controller类中业务方法的映射地址
@Controller //使用在web层类上用于实例化Bean(放到容器当中)
public class QuickController {
@RequestMapping("/quick") //请求映射
public String quickMethod(){
System.out.println("quickMethod running.......");
//return:要跳转的视图
return "quick.jsp";
}
}
配置SpringMVC核心文件 spring-mvc.xml
将下面代码放在web.xml的前端控制器的servlet标签中
<!--导入springmcv核心配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--spring-mvc的配置文件(该注释要删)-->
<?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://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--包扫描-->
<context:component-scan base-package="com.kang.controller"/>
</beans>
访问
http://localhost:8080/SpringMVC/quick
就可以看见控制台输出
quickMethod running.......
访问流程如下
浏览器请求访问某一个资源到视图的展示,并不是靠一个前端控制器来实现的
前端控制器:DispatcherServlet
用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由 它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
处理器映射器:HandlerMapping
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的 映射方式,例如:配置文件方式,实现接口方式,注解方式等。
处理器适配器:HandlerAdapter
通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理 器进行执行
处理器:Handler
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由 Handler 对具体的用户请求进行处理。
视图解析器:View Resolver
View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即 具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
视图:View
SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最 常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程 序员根据业务需求开发具体的页面
@RequestMapping 作用:用于建立请求 URL 和处理请求方法之间的对应关系(加的位置不同,意义也不同)
类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
@Controller //使用在web层类上用于实例化Bean(放到容器当中)
@RequestMapping("/user")
public class QuickController {
@RequestMapping("/quick") //请求映射
public String quickMethod(){
System.out.println("quickMethod running.......");
//return:要跳转的视图
//要加一个/表示当前web目录下
return "/quick.jsp";
}
}
//访问地址变为:http://localhost:8080/SpringMVC/user/quick
方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
其中@RequestMapping 注解还有很多属性,可以用来规定请求方式等等
相关属性:
@Controller //使用在web层类上用于实例化Bean(放到容器当中)
@RequestMapping("/user")
public class QuickController {
@RequestMapping(value = "/quick", method = RequestMethod.GET, params = {"username"}) //请求映射
public String quickMethod(){
System.out.println("quickMethod running.......");
//return:要跳转的视图
//要加一个/表示当前web目录下
return "/quick.jsp";
}
}
//访问地址:http://localhost:8080/SpringMVC/user/quick?username=xxx
在使用@Controller等注解解析之后,都要进行组件扫描
<context:component-scan base-package="com.kang.controller"/>
这里是规定了扫描的包名,除此之外,还可以规定扫描哪些注解
<context:component-scan base-package="com.kang.controller">
<!--扫描com.kang.controller包下的Controller注解-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
在前面的Controller返回了"quick.jsp"视图,若是不想编写
jsp后缀,我们可以通过视图解析器来修改视图前后缀
<!--配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀-->
<property name="prefix" value="/jsp/"></property>
<!--配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
除此之外,还可以规定视图的显示形式,是请求转发还是重定向都可以
只需要在返回的字符串加:
到此这篇关于Spring集成Web环境与SpringMVC组件的扩展使用详解的文章就介绍到这了,更多相关Spring SpringMVC组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Spring集成Web环境与SpringMVC组件的扩展使用详解
本文链接: https://lsjlt.com/news/165747.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0