SpringMVC详解⼀、@RequestMapping注解与Controller接收
参数
1、SpringMVC的概述
2、SpringMVC的核⼼DispatcherServlet程序
3、SpringMVC的⽰例程序
4、视图解析器
5、@RequestMapping注解详解标注在⽅法上
6、Controller中如何接收请求参数
1、SpringMVC的概述
Spring MVC框架是⼀个开源的Java平台,为开发强⼤的基于JavaWeb应⽤程序提供全⾯的基础架构⽀持⾮常容易和⾮常快速。
Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和⽤于开发灵活和松散耦合的Web应⽤程序的组件。MVC模式导致应⽤程序的不同⽅⾯(输⼊逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。
· 模型(Model)封装了应⽤程序数据,通常它们将由POJO类组成。
· 视图(View)负责渲染模型数据,⼀般来说它⽣成客户端浏览器可以解释HTML输出。
· 控制器(Controller)负责处理⽤户请求并构建适当的模型,并将其传递给视图进⾏渲染。
这⾥的控制器和servlet功能是⼀样的,
Servlet:接收请求参数→封装成JavaBean对象模型,只不过这⾥spring帮我们封装好了
2、SpringMVC的核⼼DispatcherServlet程序
官⽅给的⼀个图:
说明:图⽚的下⽅可以看出:Servlet引擎是在tomcat⾥⾯,所有配置dispatcherServlet不是在spring容器中进⾏配置,⽽是在l中进⾏配置
servlet和tomcat的关系
1、所有的请求进来都是进⼊到前端控制器FrontController(也就是dispatcherServlet帮我们接收所有的请求)。
2、然后再把这些请求转给(delegate request 委托请求)不同的Controller控制器(handler request),并创建模型(create model)(delegate rendering of response 委托渲染响应模型),重新返回给前端控制器.
3、前端控制器将模型交给视图(view template ) 进⾏渲染响应,渲染完之后返回给前端控制器( return control) ,并由前端控制器返回给客户端
注意:Servlet 不需要加@controller注解,加@controller注解是在黄⾊的这个位置
在springmvc中所有的请求都是经过dispatcherservlet的,并响应回去
3、SpringMVC的第⼀个Hello⽰例程序
3.1、SpringMVC——Hello world程序的步骤:
1、创建⼀个动态的web⼯程
2、导⼊SpringMVC的包
commons-logging-1.1.3.jar
log4j-1.2.17.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
2、创建⼯程需要的配置⽂件:
(1) log4j.properties
# Global logging configuration
#
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
(2) 创建SpringMVC的配置⽂件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:context="/schema/context"
xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd
/schema/context /schema/context/spring-context-4.0.xsd">
<context:component-scan base-package=""></context:component-scan>
</beans>
(3) 配置l
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--  给Spring的核⼼组件,告诉它,springMVC的配置⽂件在哪 -->
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
<!-- load-on-startup表⽰当前这个Servlet程序,当Web服务器⼀启动的时候,就创建和初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- / 拦截全部请求。/⽀持restful风格 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
这⾥ 有两点很重要:
(1)原来的servlet程序是在第⼀次访问的时候进⾏创建并且初始化,后⾯的每次访问只调⽤service()⽅法,但是,你只要⼀加上这个配
置load-on-startup ,就会在web⼯程已启动就给你创建出来并进⾏初始化,好处就是我们做好初始化之后,你后⾯的访问速度就会⽐较快,就跟数据库连接池⼀样,我先把连接都准备好,你⼀进来我就直接给你,就不会产⽣等你每次访问,我就给你创建这么慢,就提升了访问速度。
(2)url-pattern⽤/拦截所有请求,⽽且⽀持restful风格。这⾥不要写成/*了,/*的权限太⾼了,⽽且也不⽀持restful风格
2、创建jsp页⾯
4.1、WebContent/index.jsp
<body>
<a href="${ tPath }/hello">hello(访问服务器。转发到WebContent/jsp/target.jsp页⾯)</a>
</body>
4.2、在WebContent/jsp/target.jsp
<body>
请求转发进来 了
</body>
5、编写⼀个类HelloController(当然也可以叫HelloHandler这都是习惯命名)
/**
*  @Controller 表⽰当前类是⼀个控制器
*/
@Controller
public class HelloController {
/**
* @RequestMapping("/hello") <br/>
*  表⽰在SpringMVC中注册⼀个控制器,请求地址是ip:port/⼯程名/hello
* @return
*/
@RequestMapping("/hello")
public String hello() {
System.out.println("这是SpringMVC的hello程序");
// "/jsp/target.jsp" 返回值表⽰要跳转的地址
// /打头,表⽰绝对路径:到ip:port/⼯程名/  映射到WebContent⽬录
/
/ "/jsp/target.jsp" 整个表⽰ip:port/⼯程名/jsp/target.jsp页⾯
// SpringMVC默认跳转使⽤的是转发
return "/jsp/target.jsp";
}
}
SpringMVC默认跳转使⽤的是转发
注意:@RequestMapping(“/hello”)表⽰请求映射,相当于我们之前的servlet中
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
的作⽤⼀样,也是表⽰到⼯程名后⾯跟的hello,就能访问塔hello
3.2、l配置⽂件的另⼀种存放⽅式
原来的⽅案⼀:
1、编写⼀个SpringMVC配置⽂件,
2、通过dispatcherServlet的初始化参数告诉SpringMVC它的配置⽂件在哪⾥。
<!-- The front controller of this Spring Web application, responsible for handling all application requests --> <servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--  给Spring的核⼼组件,告诉它,springMVC的配置⽂件在哪 -->
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
<!-- load-on-startup表⽰当前这个Servlet程序,当Web服务器⼀启动的时候,就创建和初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- / 拦截全部请求。/⽀持restful风格 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
另⼀种⽅案是⼆:
1、在l配置⽂件所在的⽬录下创建⼀个SpringMVC配置⽂件。
2、这个配置⽂件名的命名规则是你springMVC前端控制器的servlet-name的值-l servlet-name(<servlet-name>springDispatcherServlet</servlet-name>
取代如下⼀段代码:
<init-param>
<!--  给Spring的核⼼组件,告诉它,springMVC的配置⽂件在哪 -->
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
原先的和现在的对⽐:
4、视图解析器
配置SpringMVC提交的视图解析器:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。