SpringMVC学习之路

本文介绍了Spring MVC框架的基本配置方法,包括使用注解和配置文件两种方式,并详细讲解了控制器类、请求映射及视图解析器的配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring2.5。2.5之前只能继承Controller类,2.5之后可以使用注解


2016.7.8-------------------------
SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能MVC 模块,其功能和Strtus2,Struts1是类似的,只不过是实现的原理不同而已。其中Struts2是通过过滤器来实现路径和action的映射等控制流转功能,而Struts1和SpringMVC则是通过最传统的servlet来实现对其代码封装的。但是都是非常相似的MVC流程框架。


springmvc  控制器类需要继承Controller类(配置 页面控制器),实现handlerRequest方法,方法返回new ModelAndView(“字符串”),字符串其实就是返回的页面。直接return "hello",也可以跳转页面。


需要写springmvc的配置文件,除了固定的配置,还需要配置 请求信息 映射的类(注意,请求信息为 hello.html 可以隐藏系统内容)
<bean name="/hello" class="com.feizi.controller.HelloController"></bean>
“/hello”的请求信息交给HellloController类去处理


视图解析器:


    <!--  配置视图解析器  -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- <property name="prefix" value="/"></property> -->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <!--  配置视图类型为jsp类型  -->
        <property name="suffix" value=".jsp"></property>
    </bean>


在 web.xml里面配置 springmvc的配置信息,如果不配置,默认为WEB-INFO目录下 <servlet-name>]-servlet.xml,如SpringMVC-servlet.xml
  <!--  指定springMVC的核心配置文件的加载路径 -->
  <init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:com/feizi/config/SpringMVC-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  </servlet>
  
<load-on-startup>1</load-on-startup>表示启动容器时初始化该Servlet
-------------------------


如何将Controller类里面的值传到前台?
、类中 return new ModelAndView("/hello", "prm", map);
、JSP 页面<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:forEach items="$prm" var="map">
<h3>${map.key}===${map.value}</h3>
</c:forEach>
jsp中的那个 map 是启的别名




添加注解
  <!--  配置注解的支持    -->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--  启用自动扫描   -->
    <context:component-scan base-package="com.feizi.controller"></context:component-scan>




这时就可以去掉配置文件里面 映射请求信息的标签了。
个人心得:其实注解一直存在,只不过使用配置文件的方式,自动扫描是这样的:
<context:component-scan base-package="org.springframework.samples.petclinic.web" />
表明它只扫描spring的包路径。当你自己使用注解的时候,这个路径就改成项目下的包路径了。




添加了注解功能之后,那么Controller类就可以不用实现Controller接口了,直接在类名上用@controller 注解,表明这是一个controller,
然后在方法上用 @RequestMapping(value="/hello",method=RequestMethod.GET) 。因为自动扫描的关系。


流程:
1、用户请求信息发送给服务器,服务器中的web容器接受,寻找匹配servlet-----DispatcherServlet(url-pattern为/)。
2、DispatcherServlet找到springMVC的映射(BeanNameUrlHanderMapping),找到匹配的控制器(Controller),包装成HandlerExecutingChain,返回给DispatcherServlet。
3、DispatcherServlet调用SimpleControllerHandlerAdapter,将HandlerExecutingChain中的控制器适配一下,调用控制器的相应方法(handleRequest),该方法返回一个视图名交给DispatcherServlet。
5、DispatcherServlet调用视图解析器(InternalResourceViewResovler)(可能为多个),根据URL解析策略,解析出这个视图真正的url,然后JSTLView开始渲染,将处理器传入的数据在这个视图中展示出来。返回到DispatcherServlet
6、DispatcherServlet响应用户。


关键点:
-web容器
-DispatcherServlet
-BeanNameUrlHanderMapping
-XXXController
-HandlerExecutingChain
-DispatcherServlet
-SimpleControllerHanderAdapter
-ModelAndView
-DispatcherServlet
-InternalResourceViewResovler
-JSTLView
-DispatcherServlet返回请求


2016.7.9--------------------------------------------------------------
添加注解之后,可以使用@RequestMapping("/hello") 在类上标注请求字符串。
如果想根据参数的不同,调用不同的方法,可以在方法上添加
@RequestMapping(params = "method=1", method=RequestMethod.POST)
表示参数method=1的请求,调用这个方法。


也可这么写,在类上@RequestMapping("/hello/*")
方法上@RequestMapping("login"),最后会拼接成/hello/login,调用login对应的方法


还有两个常用的注解:路径变量@PathVariable,请求参数@RequestParam
例子:
@RequestMapping(value="/comment/{blogId}", method=RequestMethod.POST)
public void comment(Comment comment,@PathVariable int blogId, HttpSession session, HttpServletResponse response,@RequestParam int oo) throws IOException {
......    
}
若请求为/common/1?oo=1
那么,blogId=1,oo=1.注意,参数名要一致。


@RequestParam可以指定参数名,若没有,则报错。 (value="oo")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值