`
田智伟
  • 浏览: 206262 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

SpringMVC

阅读更多

本周简单学习使用了一下SpringMVC,各种爽快在心头

1.首先说一下对我观点颠覆的一个地方,以前不太看好将配置转注解,一方面是自己使用惯了配置,程序结构清晰明了,反观注解,如果项目较小,你会觉得开发起来一气呵成,极端爽快,但是可以预见的是如果项目边的过于庞大,那么查找定位就显得比较费劲了,可能很多时候包名,类名就成了类管理的一种默认(这难道就是约定由于配置(约定优于配置)?),所以这就需要团队之间快速达成共识了,说说SpringMVC的最爽的注解@Controller及@RequestMapping("/login"),这个可以让你省去配置请求跟类之间的对应关系,而且可以做到真正的“一致性”,不过目前还不是很清楚如果某人也顶一个了相同的login该怎么区别?这个只有在应用打包的时候有spring做后知后觉的检测了。

SpringMVC从3.1开始引入了hibernate的校验,感觉也是一个很好用的东西,不需要配置文件,通过annotation就可以,这样做的好处是:你可以控制错误的输出方式,相比webx;

例如:实体类

 

package com.mybank.domain;

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

public class UserInfo {

	private long id;
	@Size(max=25,message="用户昵称太长了")
	private String userNick;
	@NotEmpty(message="邮箱不能为空")
	@Email(message="请填写正确格式")
	private String userEmail;
	
	@NotEmpty(message="密码不能为空哦")
	@Size(min = 1, max = 25,message="密码请控制在1~25个字符之间")
	private String userPassword;
	
	private int status;
	

	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getUserNick() {
		return userNick;
	}

	public void setUserNick(String userNick) {
		this.userNick = userNick;
	}

	public String getUserEmail() {
		return userEmail;
	}

	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}

}

 处理的类:

 

 

	@RequestMapping("/register")
	public @ResponseBody
	Map<String, Object> register(@Valid UserInfo userInfo, BindingResult result) {
		Map<String, Object> model = new HashMap<String, Object>();
		String code = "0";
		String message = "";
		if (result.hasErrors()) {
			for (FieldError fieldError : result.getFieldErrors()) {
				model.put(fieldError.getField(), fieldError.getDefaultMessage());
			}
			return model;
		}
		String sql = "INSERT INTO user_info (user_email, user_nick,user_password,gmt_create,gmt_modified,status) VALUES (?,?,?,?,?,?)";
		String querySql = "select * from user_info where user_email=?";
		UserInfo ownerInfo = null;
		try {
			ownerInfo = jdbcTemplate.queryForObject(querySql,
					new Object[] { userInfo.getUserEmail() },
					new BeanPropertyRowMapper<UserInfo>(UserInfo.class));
		} catch (EmptyResultDataAccessException e) {
			message = "您已经注册过了";
		}
		if (ownerInfo == null
				|| ownerInfo.getStatus() != Constants.NORMAL_STATUS) {
			int i = jdbcTemplate.update(sql, userInfo.getUserEmail(),
					userInfo.getUserNick(), userInfo.getUserPassword(),
					new Date(), new Date(), Constants.NORMAL_STATUS);
			if (i > 0) {
				code = "200";
				message = "注册成功";
			} else {
				message = "注册失败";
			}
		} else {
			message = "您已经注册过了";
		}

		model.put("code", code);
		model.put("message", message);
		return model;

	}

这样,校验信息就可以顺利的转成json返回给前端,而大部分使用的校验框架基本都是在请求进入action前就处理,这样的好处是及时返回,坏处是返回格式不易控制。校验需要使用的jar包

 

 

hibernate-validator-4.1.0.Final.jar
javax.validation-1.0.0.GA.jar
slf4j-api-1.6.1.jar
commons-logging-1.1.1.jar

 如果你需要返回json类型还需要如下jar包

 

jackson-core-asl-1.9.10.jar
jackson-mapper-asl-1.9.10.jar
 

 由于只是自己玩,所以懒得加入一堆jar,所以dao还是使用了Spring的JDBCTemplate,再者我是个很懒得人,所以不太喜欢自己从ResultSet里边一一对应的取值复制,所以百度终得其解,不过也有些限制做法如下:

 

userInfo = jdbcTemplate.queryForObject(
					sql,
					new Object[] { userInfo.getUserEmail(),
							userInfo.getUserPassword() },
					new BeanPropertyRowMapper<UserInfo>(UserInfo.class));
 

在查询的时候传入的RowMapper使用:BeanPropertyRowMapper,由Spring完成这一步,不过前提是属性使用驼峰(完全按照数据库字段定义属性也可以,不过估计没人愿意这么干)具体的如果出错了,参加源码应该也可以很好的理解的。

 

哇咔咔,这个BeanPropertyRowMapper实在是省事啊。

 

 

对了其实我的SpringMVC的配置文件也相对比较简单如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
	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/tx   
    http://www.springframework.org/schema/tx/spring-tx-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">

	<!-- 启用spring mvc 注解 -->
	<context:annotation-config />
	<mvc:annotation-driven />
	<mvc:default-servlet-handler />

	<!-- 设置使用注解的类所在的jar包 -->
	<context:component-scan base-package="com.mybank.action"></context:component-scan>

	<!-- 完成请求和注解POJO的映射 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" 
		/> -->
	<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="" />
		<property name="suffix" value=".jsp" />
	</bean>


</beans>
 

其中context:component-scan这个可以配置空值

 

<context:annotation-config />
<mvc:annotation-driven />
<mvc:default-servlet-handler />

这三个可以让你省去一大堆配置

 

 

<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="" />
		<property name="suffix" value=".jsp" />
	</bean>

这个貌似必须配置,否则你的应用就找不到处理完成后的响应视图了

 

期间遇到一些问题最终定位到是因为java文件保存格式为

一番百度算是解决了,参见我的这篇blog

http://tzwzero-163-com.iteye.com/blog/1696605

 

 

 

 

 

4
4
分享到:
评论
9 楼 田智伟 2012-10-15  
dwangel 写道
用了slf4j,基本可以不用common-logging了。
用jcl-over-slf4j替换。

slf4j这个主要是用个hibernate的validation框架用的~~貌似~~~
8 楼 dwangel 2012-10-15  
用了slf4j,基本可以不用common-logging了。
用jcl-over-slf4j替换。
7 楼 田智伟 2012-10-12  
dwangel 写道
不是用maven做项目配置么?怎么还要下载jar?

我自己手工搞的,没有使用maven,所以需要下载jar包,maven本身是个好东西,不过网络不好的时候还是觉得jar包靠谱点,也容易弄清楚什么时候需要什么jar包,用惯了maven最后往往发现,为了使用一个方法,引入了一个jar包,甚至很多时候引入的jar都没什么用,最后出现jar包冲突也摸不着头脑
6 楼 dwangel 2012-10-12  
不是用maven做项目配置么?怎么还要下载jar?
5 楼 田智伟 2012-10-12  
java_doc 写道
用了一段时间了,目前发现有三个问题,一是@ResponseBody 返回中文字符时是乱码,二是ajax上传文件返回json部分浏览器会提示下载,三是chrome浏览器如果提交上传文件,如果用户没有选择文件,会报错,ie没有问题。第一个问题已经解决,第二个问题可以用返回字符串替换返回json,第三个问题未解决。

第三个问题,我自己刚尝试了一下,好像没有问题ie8,只需要在xxx-servlet.xml中配置
参见:
http://tzwzero-163-com.iteye.com/blog/1697184
4 楼 loveuserzzz 2012-10-12  
java_doc所说的问题不存在,我用过,正常,还是约定优于配置。
3 楼 Sky_YiBai 2012-10-12  
               
2 楼 sgq0085 2012-10-12  
是约定优于配置吧
1 楼 java_doc 2012-10-12  
用了一段时间了,目前发现有三个问题,一是@ResponseBody 返回中文字符时是乱码,二是ajax上传文件返回json部分浏览器会提示下载,三是chrome浏览器如果提交上传文件,如果用户没有选择文件,会报错,ie没有问题。第一个问题已经解决,第二个问题可以用返回字符串替换返回json,第三个问题未解决。

相关推荐

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...

    springMVC练手代码

    SpringMVC是Spring框架的一个模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。这个“springMVC练手代码”压缩包包含的资源可以帮助初学者或开发者深入了解并实践SpringMVC的基本操作和核心概念。 首先...

    SpringMVC demo 完整源码实例下载

    SpringMVC是一款强大的Java web开发框架,用于构建高效、可维护的Web应用程序。在这个"SpringMVC demo 完整源码实例下载"中,我们能够深入理解并学习SpringMVC的核心概念和实际应用。 首先,SpringMVC是Spring框架...

    【狂神SpringMVC配套课程代码】SpringMVC.zip

    【狂神SpringMVC配套课程代码】一共8个模块,大概可以看我的博客,都是自己学配套整理的 欢迎大家作为学习SpringMVC的参考!! 下面附上狂神B站课程网址,和我的博客笔记(共8章) 狂神老师B站课程:...

    springmvc实战项目sample

    SpringMVC是一个强大的Java Web开发框架,由Spring社区开发,它是Spring生态系统的重要组成部分,主要用于构建后端服务。SpringMVC以其灵活的配置、高度模块化和优秀的性能深受开发者喜爱。在这个"springmvc实战项目...

    springmvc第一天课堂笔记.docx

    ### SpringMVC基础知识详解 #### 一、SpringMVC简介 **SpringMVC**是Spring框架中的一个重要组成部分,主要用于Web应用程序的开发。它遵循MVC(Model-View-Controller)设计模式,帮助开发者构建清晰、可维护的Web...

    SpringMVC PPT_springmvc_

    SpringMVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。本教程将深入探讨 SpringMVC 的核心概念、配置以及实际应用。...

    maven+springmvc+mybatis+log4j框架搭建

    本教程将详细阐述如何使用四个关键组件——Maven、SpringMVC、MyBatis和Log4j——来搭建一个强大的Web应用框架,旨在提高开发效率并优化项目管理。 **Maven** 是一个流行的项目管理和综合工具,它通过统一的构建...

    SpringMVC+Hibernate+EXT

    【SpringMVC】 SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)架构。SpringMVC通过将业务逻辑、控制逻辑和显示逻辑分离,提高了代码的可维护性和可测试性。在...

    SpringMVC+Hibernate+Spring整合实例

    SpringMVC、Hibernate和Spring是Java开发中三大核心框架,它们各自负责应用程序的不同层面:SpringMVC用于处理HTTP请求和响应,Hibernate则是持久层框架,负责数据库操作,而Spring作为全能容器,提供依赖注入和面向...

    SpringMVC+Mybatis demo

    SpringMVC和MyBatis是Java Web开发中的两个核心框架,它们在构建高效、模块化的应用程序方面发挥着重要作用。SpringMVC是Spring框架的一部分,主要负责处理HTTP请求和响应,而MyBatis则是一个轻量级的持久层框架,...

    SpringMVC 入门小程序

    **SpringMVC 入门小程序详解** SpringMVC是Spring框架的一个重要模块,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本入门程序旨在帮助初学者理解并掌握SpringMVC的基本概念和工作流程,...

    springMVC拦截器项目

    SpringMVC 拦截器项目是一个典型的 Web 应用开发示例,它利用 SpringMVC 框架中的拦截器(Interceptor)机制来实现特定的功能,如权限控制、日志记录、性能统计等。SpringMVC 是 Spring 框架的一部分,专为构建基于 ...

    尚硅谷SpringMVC部分全套教学文档笔记

    《尚硅谷SpringMVC部分全套教学文档笔记》涵盖了SpringMVC框架的核心概念和技术,通过一系列章节深入浅出地讲解了SpringMVC的各个方面。以下是基于这些文档内容的详细知识点总结: 1. **SpringMVC概述与HelloWorld*...

    SpringMVC5.0jar包集合

    SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。在本文中,我们将深入探讨SpringMVC 5.0版本的关键特性、使用方法以及它如何增强Web开发的效率。 首先,SpringMVC 5.0是...

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码.zip

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...

    springmvc+mybatis+postgresql+maven整合

    在本项目中,我们主要探讨的是如何将SpringMVC、MyBatis、PostgreSQL数据库以及Maven构建工具进行有效的整合,以实现一个高效且模块化的Web应用开发环境。以下是关于这些技术及其整合的关键知识点的详细说明: **1....

    SpringMVC留言板_.zip

    SpringMVC留言板是一个基于Java的Web应用程序,使用了SpringMVC框架来实现用户交互和数据管理。这个实验项目旨在帮助开发者了解如何在实际环境中运用SpringMVC,掌握其核心概念和工作流程。以下是对该实验项目的详细...

Global site tag (gtag.js) - Google Analytics