SpringMVC 理论与有用技术(一) 简单、有用、易懂的几个实例
SpringMVC先来看一下百度百科中的定义;
Spring MVC属于SpringFrameWork的兴许产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,能够选择是使用内置的 Spring Web 框架还能够是 Struts 这种 Web 框架。通过策略接口。Spring 框架是高度可配置的,并且包括多种视图技术。比如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring
MVC 框架并不知道使用的视图,所以不会强迫您仅仅使用 JSP 技术。
Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这样的分离让它们更easy进行定制。
说一下我对上面定义的理解
Spring Web是一个大的框架,Spring Web Flow属于Spring Web可是它脱离了Spring Web 属于一个页面流程管理模块,在它的内部实现了页面流程控制功能即Springmvc。这种框架还有Struts等假设你不想使用内置的框架,就能够使用外置的让spring与其集成,Spring在与别的框架集成这方面做的非常不错,比方同hibernate、ibatis等等都有非常好的集成实现,在多种视图上Spring使用策略模式实现,上面大家了解的视图技术主要是jsp,对于后面几个不是非常了解,
再说一下Velocity它是模板引擎,如今做的这个项目中使用了模板,使用的地方不是非常多,在分页的时候使用了这个技术,分页有关的上一页、下一页、总页数、等这些button都是在一个一个的模板里面,在模板里面又引用了Pagemodel这个类。编辑模板的时候就会用着模板引擎语法,有关这个模板代码类似于${} JSTL表达式,有关模板实例请看这个分页博客数据分页模块封装。
HelloWorld的一个方法相应于一个Action,
首先。须要引入spring mvc 以及相关jar包,这不能够归为一个框架必有步骤。用到哪个框架都须要引入它用到的jar包或者库文件等。例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlsb25nc2hlbmcxMTI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
然后。建立一个HelloWorldController类并实现Controller接口。一般来说呢框架是越轻量级越好,假设新建一个类还须要去实现别的接口或者继承别的类,会使得该类耦合非常大,
package com.tgb.web.controller; import java.util.HashMap;
import java.util.Map; 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 HelloWorldController implements Controller{ @Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)
throws Exception { System.out.println("nihao shijie"); String str="lilongsheng nihao!"; Map<String, Object> map=new HashMap<String, Object>(); map.put("nihao1", "nihao1");
map.put("nihao2", "nihao2");
map.put("nihao3", "nihao3"); return new ModelAndView("/welcome","map",map);
} }
除此之外还须要经常使用的配置文件web.xml全局文件。和springmvc-servlet.xml框架相关文件,别的框架也会有自己的配置文件
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
效果例如以下
多方法相应于一个Action的配置(两种方法继承和注解)
假如一个方法相应于一个Action的话是不现实的,开发中方法往往会特别多一个,倘若一个方法相应一个Action那须要写非常多Actin。项目会变得非常轮,经常是一个一个Action里面写非常多个方法这样的开发更适合,我们开发是越简单越高效越好。
继承方式,即是让action类继承一个父类,代码例如以下
public class MutilController extends MultiActionController{ public ModelAndView add(HttpServletRequest request,HttpServletResponse response)
{
System.out.println("--------add--------"); return new ModelAndView("/multiMethod","method","add()"); } public ModelAndView update(HttpServletRequest request,HttpServletResponse response)
{
System.out.println("---------update---------"); return new ModelAndView("/multiMethod","method","update()");
}
另外还须要配置一个类。该类的作用是解析URL中的參数,确保能够找到每一个方法相应的action。看以下配置
<bean name="/test2/mutil" class="com.tgb.web.controller.MutilController">
<property name="methodNameResolver">
<ref bean="paramMethodResolver"></ref>
</property>
</bean> <bean id="paramMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="action"></property>
</bean>
其他的配置同上面的一样,这样就能够完毕多方法的訪问。
採用注解方式
採用注解降低了action类与其他的类耦合、写起来也认为快了、不用像struts1/2中的每一个action写一个标签、可见以后编程还是朝着注解方面发展,如今非常多框架都提供了注解功能,眼下我接触过的如EJB、Web Service、JPA、Transaction、hibernate的ORM等,在提供配置文件实现的同一时候都提供了注解方式实现,相比配置文件注解看起来就简单多了。越来越多的注解也有一个疑问?它是怎么样利用一个小小的注解来封装实现各种功能?也就是说注解是实现的原理是什么?
说了这么多来看一下注解是怎么实现的吧。
@Controller
public class UserController { @RequestMapping(value="/user/addUser",method=RequestMethod.GET)
public ModelAndView addUser()
{
String str="this is addUser-----"; return new ModelAndView("/annotation","result",str);
}
@RequestMapping(value="/user/delUser",method=RequestMethod.GET)
public ModelAndView delUser()
{
String str="this is delUser-----"; return new ModelAndView("/annotation","result",str);
}
在action类的上面添加了一个@controller。控制器标签,在方法上写了一个@requestMapping()映射。这个是在URL中请求的地址。是那个servlet分发地址。
在注解配置文件中面仅仅须要,例如以下三个标签就可以完毕。
<!-- 注解扫描包 -->
<context:component-scan base-package="com.tgb.web.controller.annotation"></context:component-scan> <!-- 开启注解 -->
<mvc:annotation-driven/> <!-- 依据扫描的包找某个类以下的方法 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
<!-- 依据扫描的包找以下的类 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
它的思路理解者非常easy,1.注解扫描包是确定哪些包是利用注解方式訪问
2.依据包找以下的哪些类使用注解
3.依据某个类。确定里面哪些方法使用注解
对于它的视图解析器、凝视等非常多概念原理在一边实现一边理解,同一时候与struts1、struts2等框架比較。easy理解,认为她们有非常多相似之后,又略有不同,他们的优缺点还须要慢慢体会,仅仅有在不断实践和开发中才会得到真正积累,对于编程这类东西,须要多动手、多思考才干进步非常快。
SpringMVC 理论与有用技术(一) 简单、有用、易懂的几个实例的更多相关文章
- Java Web开发SpringMVC和MyBatis框架开发环境搭建和简单有用
1.下载SpringMVC框架架包,下载地址: 点击下载 点击打开地址如图所看到的.点击下载就可以 然后把相关的jar拷贝到lib下导入 2.MyBatis(3.4.2)下载 X-Amz-Algori ...
- JavaScript 日期格式化 简单有用
JavaScript 日期格式化 简单有用 代码例如以下,引入jquery后直接后增加下面代码刷新可測试 Date.prototype.Format = function (fmt) { //auth ...
- C#反射技术的简单操作(读取和设置类的属性)
public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...
- 对于使用javaweb技术制作简单管理系统的学习
近期在老师的引导下我们学习了利用Javaweb技术制作简单的管理系统,其中涉及到的技术很多,由于大多都是自学 对这些技术的理解还太浅显但能实现一些相关功能的雏形. (一).登录功能 在登陆功能中通过与 ...
- 知识全聚集 .Net Core 技术突破 | 简单说说工作单元
知识全聚集 .Net Core 技术突破 | 简单说说工作单元 教程 01 | 模块化方案一 02 | 模块化方案二 其他教程预览 分库分表项目实战教程 Git地址: https://github.c ...
- 简单利用XSS获取Cookie信息实例演示
简单利用XSS获取Cookie信息实例演示 首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高.随便 ...
- 最简单的TTcpServer与TTcpClient通信实例-Delphi
unit TcpSCDemo;//最简单的TTcpServer与TTcpClient通信实例-Delphi //Borland推出TTcpServer与TTcpClient作为主要的网络通信控件,意味 ...
- python简单的函数定义和用法实例
python简单的函数定义和用法实例 这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下 具体分析如下: 这里 ...
- SpringMVC 理论与有用技术(二)文件上传
文件上传相信大家都做过,差点儿全部的项目都有上传文件的功能,尤其是BS架构的项目中经常被列为常规功能来开发.不管是在开发.NET 项目还是java项目我们会用到非常多的框架,这个功能也被集成到了框架之 ...
随机推荐
- Struts2使用
Struts2是一个基于MVC设计模式的Web应用框架.在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.Struts 2是Struts的下一代产品,是在 ...
- [ python ] 各种推导式
各种推导式,主要使用示例演示用法 列表生成式 示例1:求0-9每个数的平方 li = [x*x for x in range(10)] print(li) # 执行结果: # [0, 1, 4, 9, ...
- Linux文档时间戳查看和修改——stat
查看文件时间戳命令:stat awk.txtFile: `awk.txt'Size: 20 Blocks: 8 IO Block: 4096 regular fileDevice: 801h/2 ...
- int各种数据类型的表示范围
计算方法:1.正数部分数部分:2^(字节数*8-1)-1 2.负数部分:-(2^(字节数*8-1)+1) unsign int:正数部分*2+1
- POJ 3026 Borg Maze(Prim+bfs求各点间距离)
题目链接:http://poj.org/problem?id=3026 题目大意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...
- restful的设计风格
网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...
- 关于Android不同系统版本的市场占比情况详解
一,google官方统计的不同Android版本市场的占比强开 google统计的数据情况 这个是google官方对于不同版本的市场占比情况.这个是针对全世界所有的Android手机占比情况. 二,友 ...
- pip/conda国内镜像--安装包提速
对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...
- 第三方登陆微博、qq、微信
源文:http://blog.csdn.net/tivonalh/article/details/60954373 假设是已经申请完成各平台开发者账号. 先来简单的,微博和QQ 微博: 引入微博JS ...
- BNUOJ 52509 Borrow Classroom
最近公共祖先. 如果$A$到$1$的时间小于$B$到$C$再到$1$的时间,那么一定可以拦截. 如果上述时间相等,需要在到达$1$之前,两者相遇才可以拦截. #include<bits/stdc ...