【JavaEE】Springmvc搭建方法及example
现在介绍SSH的文章很多,但是适合自己需求的却经常找不到,这些东西呢,会了之后总会感觉别人的程序哪里哪里别扭,会之前呢就感觉很混乱,而且SSH的官方文档,至少在我看来是“会者勉强能看、不会者一片迷茫”的,最主要的是没有什么demo,也可能因为我太low了,高手勿喷,我的感觉就是根据文档呢很容易明白如果写了A就能怎么样写了B又能怎么样,但是这个A或者B到底写在哪能让程序跑起来呢,更是会者不难、难者不会。我隔了两年没有做这方面的项目,最近重新拾起来,不再用struts,用spring、spring mvc、hibernate、spring security、spring oauth2搭建网站,这篇包括下面几篇文章,我会简述我搭建最基本环境的过程并给出demo,然后再详细地讲一些配置。
在各个文章我会分别介绍,每篇都附有example,可以根据情况进行修改:
springmvc(本文)
springmvc+spring+hibernate+spring security
springmvc+spring+hibernate+spring security+spring oauth2
这篇文章就来介绍springmvc环境的搭建。
1. pom.xml
首先来看都需要加入哪些包,我使用maven来管理包的依赖。
<properties>
<spring.version>4.0.4.RELEASE</spring.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>servlet-api</artifactId>
<version>5.5.23</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>jsp-api</artifactId>
<version>5.5.23</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
</dependencies>
核心的包就是spring-webmvc,这个包导入之后会自动导入spring-core,spring-web等它的依赖包;
后面jstl、taglibs等包的导入是为了在jsp页面中使用jstl等标签;
commons-fileupload是为了文件上传的需要,本demo中没有上传文件的部分,不过哪个网站能没有上传图片呢?
hibernate-validator的导入是为了正常使用springmvc的valid,springmvc的valid只有接口没有实现,如果要使用它的功能需要导入一个实现包,导入hibernate-validator就是为了这个目的,本文的demo里面没有用到validation,所以只是为了运行基本demo,这个可以不导入;
jackson-mapper的导入是为了使用springmvc返回json的功能,对于这个功能springmvc也是只有接口没有实现,如果不导入实现包,要返回json时会返回406错误。jackson-core包会作为依赖导入。
2. web.xml
springmvc和struts的一个机制上的区别就是,struts是一层一层的拦截器在过滤,springmvc是只有一个核心的Servlet,所以首先按照正常注册Servlet的方法,在web.xml中注册这个springmvc:
<?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"
metadata-complete="true" version="3.0"> <servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>
springmvc还要做很多配置,那些配置在单独的配置文件里,这个配置文件的默认位置就是在web.xml相同目录下的<servlet-name>-servlet.xml,比如我的servlet-name配置的是spring-dispatcher,那么我的springmvc配置文件的默认位置就是web.xml同目录下的spring-dispatcher-servlet.xml。
3. spring-dispatcher-servlet.xml
下一步就是配置springmvc,编辑WEB-INF/spring-dispatcher-servlet.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:component-scan base-package="org.zhangfc.demo4springmvc.mvc"/> <mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/"/>
<property name="suffix" value=".jsp"/>
</bean> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="2000000"/>
</bean> <mvc:resources mapping="/static/**" location="/resources/"/> <mvc:default-servlet-handler /> </beans>
Springmvc的虚拟路径与处理函数的映射,是通过annotation来设置的,这些类都在哪个包下面,就是那个component-scan属性配置的,并设置支持annotation支持,springmvc的每一个处理函数都会返回一个String类型的变量(有的函数返回值就是String,有的返回值是一个对象,对象里有一个viewResolver需要的字符串),我这个设置就是设置一个前缀和后缀,举个例子来说,对于函数返回的这个String,比如是abc,那么需要渲染的文件就是/pages/abc.jsp。
multipartResolver是上传文件需要的配置,还是那句话,本demo中用不到,不过还是写上,哪个项目里不需要上传点东西呢。
最后一个属性,是对静态资源的映射,经过这个映射之后,要访问/static/a.png时,实际访问的就是/resources/a.png。
4. HomeController.java
下面来写一个控制器,位置在上面component-scan配置的package下,springmvc用RequestMapping的annotation来指定虚拟路径,把类这一级的和方法级的加在一起就是最终的虚拟路径,看这段代码:
@Controller
@RequestMapping("/")
public class HomeController {
@RequestMapping("")
public String home(){
return "index";
} @RequestMapping("/json")
@ResponseBody
public Map<String, String> json(){
Map<String, String> result = new HashMap<String, String>();
result.put("zhangsan", "hello");
result.put("lisi", "world");
result.put("wangwu", "nihao");
return result;
}
}
这儿类这个级别的RequestMapping的值是"/",home这个方法级别的呢值是空,两个加起来就是"/",而json这个方法的RequestMapping是"/json",所以,当访问的URL是"/"的时候,会调用home这个方法来处理,返回值是一个字符串index,还记得前面的viewResolver吗,根据那个配置,这个方法执行完成之后会渲染/pages/index.jsp,所以在WEB-INF的同级目录下创建pages目录(也就是WEB-INF的兄弟目录),再创建index.jsp,运行整个工程,访问"http://localhost:8080/demo4springmvc/"得到的就是index.jsp,因为json方法有一个@ResponseBody的annotation,它的返回值直接给客户端,所以访问"http://localhost:8080/demo4springmvc/json"得到的就是json串:
{"lisi":"world","zhangsan":"hello","wangwu":"nihao"}
这是springmvc的最基本的demo,详细的用法,我会各个框架整合在一起之后再写。
【JavaEE】Springmvc搭建方法及example的更多相关文章
- Springmvc+Spring+Hibernate搭建方法及实例
Springmvc+Spring+Hibernate搭建方法及实例
- Springmvc+Spring+Hibernate搭建方法
Springmvc+Spring+Hibernate搭建方法及example 前面两篇文章,分别介绍了Springmvc和Spring的搭建方法,本文再搭建hibernate,并建立SSH最基本的代码 ...
- 使用SpringMVC搭建第一个项目
概述 使用SpringMVC搭建第一个项目,入门教程,分享给大家. 详细 代码下载:http://www.demodashi.com/demo/10596.html 一.概述 1.什么是Spring ...
- springMVC搭建
springMVC搭建 1.Spring特点: 方便耦合,简化开发,提升性能 AOP面向切面的编程 声明式事务支持 方便程序的调试 方便集成各大优秀的框架 Java源代码学习的典范 2.Java的面向 ...
- Redis Cluster搭建方法简介22211111
Redis Cluster搭建方法简介 (2013-05-29 17:08:57) 转载▼ Redis Cluster即Redis的分布式版本,将是Redis继支持Lua脚本之后的又一重磅 ...
- windows系统下ruby开发环境的搭建方法
ruby是一种简单快捷的面向对象的脚本语言,非常直观.下面说一下windows系统下ruby开发环境的搭建方法. 工具/原料 rubyinstaller.exe 方法/步骤 1 到如下网站去下载最新的 ...
- HHvm建站环境搭建方法:Nginx,Mariadb,hhvm及lnmp/lamp安装部署
HHVM起源于Facebook公司,是一个开源的PHP虚拟机,使用JIT的编译方式以及其他技术,让PHP代码的执行性能大幅提升.HHVM提升PHP性能的途径,采用的方式就是替代Zend引擎来生成和执行 ...
- rabbitmq集群搭建方法简介(测试机linux centos)【转】
本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...
- RabbitMQ的安装及集群搭建方法
RabbitMQ安装 1 安装erlang 下载地址:http://www.erlang.org/downloads 博主这里采用的是otp_src_19.1.tar.gz (200MB+) [roo ...
随机推荐
- 关于BufferedInputStream和BufferedOutputStream的实现原理的理解
在介绍FileInputStream和FileOutputStream的例子中,使用了一个byte数组来作为数据读入的缓冲区,以文件存取为例,硬盘存取的速度远低于内存中的数据存取速度.为了减少对硬盘的 ...
- DELLR720 独立显卡DVI转VGA问题
第一种情况:DELLR720默认不接独立显卡,直接用板载VGA输出,不需要调system blos 第二种情况:DELLR720接独立显卡,需要DVI输出,需要更改系统blos system blos ...
- log4j输出日志到flume
现需要通过log4j将日志输出到flume,通过flume将日志写到文件或hdfs中 配置flume-config文件 将日志下沉至文件 a1.sources = r1 a1.sinks = k1 a ...
- zabbix_sender高效模式
1.zabbix_sender介绍 zabbix获取key值有超时时间,如果自定义的key脚本一般需要执行很长时间,这根本没法去做监控,获取数据有超时时间,如果一些数据需要执行比较长的时间才能获取的话 ...
- 2017.7.1 mysql安装与启动(已验证可以使用)
下载地址:http://learning.happymmall.com/ 之前一直用解压版安装,启动mysql服务的时候总是失败,这次用mysql installer安装一遍,终于成功启动. 1.下载 ...
- 转: 通过Servlet生成验证码图片
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)—— 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...
- Convert WebP to PNG using java
WebP是谷歌的图片格式,java 类库imageio 是不支持此种格式的.眼下除了在线转换以及工具以外,第三方类库转换webp格式大致有: 1.linux:Google libwebp 既是类库也能 ...
- Java模式的秘密--java常用的几种模式
要学习设计模式,首先要明白设计模式,就是为实现某一种或某一组功能提供的代码编码方式.它没有固定的套路,只有约定俗成的风格.所有编码者可以根据已有的设计模式开放思维,设计出自己的设计模式,也会在无意中使 ...
- 解决ListView在界面只显示一个item
ListView只显示一条都是scrollview嵌套listView造成的,将listView的高度设置为固定高度之后,三个条目虽然都完全显示.但是这个地方是动态显示的,不能写死.故采用遍历各个子条 ...
- Visual Prolog 的 Web 专家系统 (10)
GENI的核心 -- 推理机(4)求证过程分析 1.GENI知识库结构 专家系统推理机的设计执行,与其知识库结构紧密相关. GENI知识库结构是一棵逻辑推理树. 根节点是animal,即求证的目标. ...