公司项目用的Spring MVC。顺便学习学习。

其实框架并没有想象中的复杂。尤其对于初学者,总觉得SSH是一些很复杂的东西似的。其实对初学者来说能够用这些框架就足够了。在公司里也是,基本功能会用了就可以了。管他框架有多高深。尤其是Spring MVC 用起来比Struts2简单多了。不用多少配置文件。几个注解就搞定了。

首先,大家只要理解了MVC。其实所有的MVC 框架都是大同小异的。

无非是用户页面通过HttpServletRequest向后台传值。框架的配置文件会通过Request中的URL格式和参数找到相对应的Action(Spring mvc中叫Controller)。Action执行完成后或者返回一个新的页面或者只返回一些数据。可以放在Request中或者Session中在页面中取得。然后页面继续其他功能。(个人理解!)

先看一下Spring MVC 的处理流程:

1.客户发出请求request,DispatchServlet(Spring 的前端控制器)负责统一分发请求到Spring控制器(Controller)。
2.统一分发之前,需要借助于handlermapping对象定位到具体的Spring控制器(Controller)。
3.Spring控制器处理DispatchServlet分发过来的的请求,执行业务逻辑或调用业务逻辑组件。
4.一旦控制器处理完客户请求,则返回一个ModelAndView 对象给DispatchServlet前端控制器.,ModelAndView 对象包含数据模型和视图信息(很明显Model和View)。

5.DispatchServlet询问视图解析器,查找相应视图。

6.由某具体视图为用户显示页面。

还是很容易理解的吧。就开始试试吧。

首先在web.xml中配置上DispatchServlet(Spring 的前端控制器)

添加上<!-- Spring配置 -->
  <servlet>
    <servlet-name>spring-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/config/spring/spring-dispather.xml</param-value> <!-- 指明Spring mvc的配置文件地址 -->
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

<servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

配置好这个就在相应的目录下建立spring的配置文件。先来个Spring 配置文件的片段吧。对应着说:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util-3241.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
       
    <!-- 开启controller注解支持 -->      
    <mvc:annotation-driven />

<!-- 注:指定应用注解的包,如果base-package=com.avicit 则注解事务不起作用 -->
<context:component-scan base-package="com.hcc">
</context:component-scan>

<!-- 加载静态资源 -->
<mvc:default-servlet-handler/>

<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
    
    <!-- 上传拦截,如最大上传值及最小上传值  
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    
        <property name="maxUploadSize" value="10000000" />
        <property name="maxInMemorySize" value="4096"/>
    </bean>  
     -->
<!--  ***************配置数据源************** --> 
<!-- mysql数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />         
      <property name="url" value="jdbc:mysql://localhost:3306/test" />         
      <property name="username" value="root" />         
      <property name="password" value="123456" />

<property name="maxActive"><value>500</value></property>
      <!-- 设定最大空闲时间(毫秒) -->
      <property name="maxIdle"><value>10000</value></property>
      <!-- 设定最大等待时间(毫秒) -->
      <property name="maxWait"><value>1000</value></property>
      <!-- 超时自动收回 -->
      <property name="removeAbandoned"><value>true</value></property>
      <!--
                  超时时间(以秒数为单位)设置超时时间有一个要注意的地方,
                  超时时间=现在的时间-程序中创建Connection的时间,如果
                  maxActive比较大,比如超过100,那么removeAbandonedTimeout
                  可以设置长一点比如180, 也就是三分钟无响应的连接进行回收,
                  当然应用的不同设置长度也不同。
      -->
      <property name="removeAbandonedTimeout"><value>180</value></property>
      <!-- 在自动回收超时连接的时候打印连接的超时错误 -->
      <property name="logAbandoned"><value>true</value></property>        
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<!--  jdbcTemplate数据库操作类 -->  
    <bean id="jdbcTemplate"  class="org.springframework.jdbc.core.JdbcTemplate">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  
</beans>

上面都写了注释,相信能看到这篇文章的人都能看懂吧,不多解释。以上都是常用到的配置,其他的配置我还没碰到,不多说。说多了也掌握不了。学东西还是在项目上学得快。

配置好之后就是Spring mvc的框架下开发了。

之所以认为Spring mvc开发比Struts2简单很多就是因为注释。 你看Spring文件中就没有对应Controller的配置。不像Struts2每个Action都要配置上来,虽然用通配符也简单不少。不过这个完全不写,通过注释搞定就行了。举个例子:

@Controller
public class LoginController {
@RequestMapping( value = "dologin") 
@ResponseBody

@SessionAttributes({"username","xxx"})
public Map<String,Object> dologin(HttpServletRequest req,

Model model,
@RequestParam(value = "username") String username,
@RequestParam(value = "password") String password
){
Map<String,Object> res = new HashMap<String,Object>();

model.addAttribute("username",username);
if(username.equals("hello")&&password.equals("hello")){
res.put("status", true);
res.put("result", "success");
}else{
res.put("status",false);
res.put("result", "用户名或密码错误!");
}
return res;
}
}

这段代码的意思就不用我解释了吧。

直接看注释,@Controller 这个注释就是表明此类是个Controller类(对应于Struts2的Action类),有了此注释就不用继承基本Controller类了。

@RequestMapping( value = "login/dologin") 这个注释可以用于方法上面也可以用于类上面。我只说用在方法上面(我觉得用在类上面复杂)。 看到里面有个value参数了吧。这个参数的值就是匹配的request中url的值,也就是访问这个方法的话在url后面写login/dologin这个就找到这个方法了。这个对应比Struts2中写个Action方法都去配置文件中写个配置简单吧。

@ResponseBody 这个注释是指不反回视图了只返回数据。 SpringMVC中controller的默认返回值类型是ModelAndView就是视图和数据。别问我为什么数据用Model来存,Model是什么?我也不懂,跟着用就行了。就我理解我认为Model就是个jsp中用来页面间传值的request。代码中有句model.addAttribute("username",username);就是把username的值存在名字叫做”username“的属性中。然后在返回的页面中就可以通过${username}来取得username的值。

@SessionAttributes 这个注释放在类的上面。看了上面model.addAttribute("username",username);就好理解了。 model.addAttribute("username",username);是将属性”username“放在request中。如果在类上面加了@SessionAttributes({"username"})那么”username“这个属性就会加到session中随时来取。

@RequestParam(value = "username",defaultValue ="xxx") 这个注释,是指页面访问此方法的时候url后面加的参数在这接收。 例如url 是 ……login/dologin?username="aaa 就是想后台传了个username参数。那么可以通过此注释来接收参数。

还有这段代码中没用到的注释:

@Service("businessService")     对于这个注释我认为就是向Spring配置文件中注释<bean>.这个注释放在类的上面。例如放在BusinessServiceImpl 的上面那么就相当于在配置文件中配置了<bean id="businessService"  class="com.xxx.xxx.BusinessServiceImpl" />

@Resource(name = "businessService") 这个注释就是注入的意思。上面注释相当于配置了bean那么这个注释就是取得那个bean的意思。用法为 在注释下面声明一个此对象就相当于new 了这对象了,就可以拿来用了。例如:

@Resource(name = "businessService")

BusinessService businessService;

(BusinessService是BusinessServiceImpl 实现的接口,应该能想到。)这样就可以直接拿businessService这个对象来用了。

注释就说这么几个吧。其他的我用的还不多。

然后说下Spring mvc的controller方法默认返回 的ModelAndView类型是怎么回事。 这个类应该是spring mvc中特有的。

一般如果需要返回页面的话 就用这个返回类。 这个类对象的生成方法是:ModelAndView mv = new ModelAndView("login/success");其中的参数是个jsp页面。可能你要问这为什么是个jsp页面,看上面的spring配置文件中有个配置是:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

看到了吗。他会自动把视图的前后缀加上。这个页面就是"/WEB-INF/jsp/login/success.jsp"。这样的话就会返回success.jsp这个页面,Model上面说了就是向页面传值。作用域和Request一样。把他当做Request就行了。取值方式都一样。${requestScope.xxxxxx}。如果是传大量数据的话 一般也不用这个传。比如用List返回一系列数据的话。这样的话 返回值就不是ModelAndView类型了。就不能同时返回视图。所以用@ResponseBody 注释。来指明只返回数据部返回视图。

想学习的话 可以找点demo试试。看是不是比Struts简单多了。就写这点吧。其他的还没怎么了解。

至尊新手 纯手写,有什么问题欢迎指正。

Spring MVC学习总结。的更多相关文章

  1. Spring MVC 学习 -- 创建过程

    Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...

  2. 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性

    2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...

  3. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  4. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)

    很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...

  5. Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客

    Spring MVC 学习总结(一)--MVC概要与环境配置   目录 一.MVC概要 二.Spring MVC介绍 三.第一个Spring MVC 项目:Hello World 3.1.通过Mave ...

  6. Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  7. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  8. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  9. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  10. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

随机推荐

  1. JavaScript函数的四种存在形态

    函数的四种存在形态: 1.函数形态 2.方法形态 将函数赋值给某一个对象的成员,那么就称为方法 3.构造器形态 4.上下文形态   1.函数形态: var foo = function() { ale ...

  2. DataTable和List集合互转

    /// <summary> /// 将集合转换成DataTable /// </summary> /// <param name="list"> ...

  3. 如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示

    今天学习了下如何间接绑定数据库网上看了很多信息,都云里雾里,没有图片说明,初学者完全看不懂,我自己做了一个DEMO,相信可以帮到大家! 一.建立数据库,并构建表信息,我的表信息如下: 表中的数据在数据 ...

  4. HashMap HashTable HashSet

    原文转载自 http://blog.csdn.net/wl_ldy/article/details/5941770 HashMap是新框架中用来代替HashTable的类 也就是说建议使用HashMa ...

  5. power desinger 学习笔记<二>

    power designer 设计表时显示注释选项 PowerDesigner设计时表显示注释选项: 选定编辑的表,右键- > Properties- > Columns- > Cu ...

  6. SGU 196.Matrix Multiplication

    时间限制:0.25s 空间限制:4M Solution n=10000,m=100000,显然不能用矩阵乘法乘出来. S= ATA 对于矩阵S的一行,所有在A矩阵中1位置的元素都相等,并且都等于这一行 ...

  7. css样式积累

    1.圆角:     border-radius:16px 16px 16px 16px;     2透明度:             filter: alpha(opacity=80);       ...

  8. 数组操作- reverse sort each 操作

    reverse reverse 操作符会读取列表(也可能来自数组),并按相反的次序返回该列表. .. ; @barney = reverse(@fred); # 得10,9,8,7,6 .. ; # ...

  9. PHP面向对象(OOP):克隆对象__clone()方法

    有的时候我们需要在一个项目里面,使用两个或多个一样的对象,如果你使用“new”关键字重新创建对象的话,再赋值上相同的属性,这样做比较烦琐而且也容易出错,所以要根据一个对象完全克隆出一个一模一样的对象, ...

  10. curl获取http请求的状态码

    $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CUR ...