spring mvc 学习笔记

1 springmvc主要的架包介绍。

spring-dao.jar(必须) 
这个jar 文件包含Spring DAO、Spring Transaction 进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。 

外部依赖spring-core,(spring-aop, spring-context, JTA API)。 

spring-jdbc.jar(必须) 
这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。 
外部依赖spring-beans,spring-dao。 


spring-support.jar(必须) 
这个jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby),缓存Cache(EHCache),任务计划Scheduling(uartz)方面的类。 
外部依赖spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache) 


spring-web.jar(必须) 
这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。 
外部依赖spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)。 


spring-webmvc.jar 
这个jar 文件包含Spring MVC 框架相关的所有类。包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件里的任何类。 
外部依赖spring-web, (spring-support,Tiles,iText,POI)。 


spring-dao.jar(必须) 
这个jar 文件包含Spring DAO、Spring Transaction 进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。 

外部依赖spring-core,(spring-aop, spring-context, JTA API)。 


2 springmvc主要文件介绍

在 web.xml 文件中进行如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<? xml  version="1.0" encoding="UTF-8"?>
< web-app  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <!-- 标记特定web应用的一个名称 -->
   < display-name >SpringMVC_01</ display-name >
   <!-- 配置前端控制器DispatcherServlet -->
   < servlet >
     < servlet-name >springmvc</ servlet-name >
     < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class >
     <!--springmvc.xml 是自己创建的SpringMVC全局配置文件,用contextConfigLocation作为参数名来加载
         如果不配置 contextConfigLocation,那么默认加载的是/WEB-INF/servlet名称-servlet.xml,在这里也就是 springmvc-servlet.xml
       -->
     < init-param >
         < param-name >contextConfigLocation</ param-name >
         < param-value >classpath:springmvc.xml</ param-value >
     </ init-param >
   </ servlet >
 
   < servlet-mapping >
     < servlet-name >springmvc</ servlet-name >
     <!--第一种配置:*.do,还可以写*.action等等,表示以.do结尾的或者以.action结尾的URL都由前端控制器DispatcherServlet来解析
         第二种配置:/,所有访问的 URL 都由DispatcherServlet来解析,但是这里最好配置静态文件不由DispatcherServlet来解析
         错误配置:/*,注意这里是不能这样配置的,应为如果这样写,最后转发到 jsp 页面的时候,仍然会由DispatcherServlet进行解析,
                     而这时候会找不到对应的Handler,从而报错!!!
       -->
     < url-pattern >*.do</ url-pattern >
   </ servlet-mapping >
</ web-app >

  

在 springmvc.xml 文件中配置。通俗来讲,就是请求的 URL 到我们这里所编写的 Handler 类的某个方法进行一些业务逻辑处理。

  我们在上面讲解了两个处理器适配器来约束 Handler,那么我们就通过上面两种配置分别编写两个 Handler

  第一种:实现Controller 接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.ys.controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
 
public class HelloController implements Controller{
 
     @Override
     public ModelAndView handleRequest(HttpServletRequest request,
             HttpServletResponse response) throws Exception {
         ModelAndView modelView = new ModelAndView();
         //类似于 request.setAttribute()
         modelView.addObject("name","张三");
         modelView.setViewName("/WEB-INF/view/index.jsp");
         return modelView;
     }
 
}

  第二种:实现 HttpRequestHandler 接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.ys.controller;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.HttpRequestHandler;
 
public class HelloController2 implements HttpRequestHandler{
 
     @Override
     public void handleRequest(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         request.setAttribute("name", "张三");
         request.getRequestDispatcher("/WEB-INF/view/index.jsp").forward(request, response);
     }
 
}

  在 springmvc.xml 文件中配置。通俗来讲就是请求的 URL 怎么能被 SpringMVC 识别,从而去执行我们上一步所编写好的 Handler

   第一种方法:

1
2
3
4
5
6
<!-- 配置Handler -->   
< bean  name="/hello.do" class="com.ys.controller.HelloController2" />
 
<!-- 配置处理器映射器
     将bean的name作为url进行查找,需要在配置Handler时指定bean name(就是url)-->
< bean  class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

  这样配置的话,那么请求的 URL,必须为 http://localhost:8080/项目名/hello.do

  

  第二种方法:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 配置Handler -->   
< bean  id="hello1" class="com.ys.controller.HelloController" />
< bean  id="hello2" class="com.ys.controller.HelloController" />
<!-- 第二种方法:简单URL配置处理器映射器 -->
< bean  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     < property  name="mappings">
         < props >
             < prop  key="/hello1.do">hello1</ prop >
             < prop  key="/hello2.do">hello2</ prop >
         </ props >
     </ property >
</ bean >


  第一种配置:

1
2
3
<!-- 配置视图解析器
     进行jsp解析,默认使用jstl标签,classpath下得有jstl的包-->
< bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver" />

 如果这样配,那么在 Handler 中返回的必须是路径+jsp页面名称+".jsp" 

   第二种配置:

1
2
3
4
5
6
7
<!--配置视图解析器  -->
     < bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!-- 返回视图页面的前缀 -->
         < property  name="prefix" value="/WEB-INF/view"></ property >
         <!-- 返回页面的后缀 -->
         < property  name="suffix" value=".jsp"></ property >
     </ bean >

  如果这样配,那么在 Handler 中只需要返回在 view 文件夹下的jsp 页面名就可以了。

 

  ①、处理器适配器默认:org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter

  ②、处理器映射器默认:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

  ③、视图解析器默认:org.springframework.web.servlet.view.InternalResourceViewResolver


3 springmvc文件访问流程

 

  1、当访问网页时候首先访问web.xml

  2、通过web的配置文件contextConfigLocation,来访问springmvc.xml

  3、通过springmvc.xml配置的文件访问Controller 

     4、通过Controller 访问jsp文件


classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值