Spring MVC登录注册以及转换json数据

项目结构;

代码如下:

BookController

package com.mstf.controller;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.jackson.map.ObjectMapper;
import com.mstf.domain.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/json")
public class BookController {
	private static final Log logger = LogFactory.getLog(BookController.class);
	// @RequestMapping 根据 json 数据,转换成对应的 Object
	@RequestMapping(value="/testRequestBody")
	public void setJson(@RequestBody Book book,HttpServletResponse response) throws Exception {
		// ObjectMapper 类是 Jackson 库的主要类。他提供一些功能将 Java 对象转换成对应的 JSON
		ObjectMapper mapper = new ObjectMapper();
		// 将 Book 对象转换成 json 输出
		logger.info(mapper.writeValueAsString(book));
		book.setAuthor("汪政");
		response.setContentType("text/html;charset=UTF-8");
		// 将 Book 对象转换成 json 写到客户端
		response.getWriter().println(mapper.writeValueAsString(book));
	}
}

  UserController

package com.mstf.controller;

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.mstf.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

// Controller 注解用于指示该类是一个控制器,可以同时处理多个请求动作
@Controller
// RequestMapping 可以用来注释一个控制器类,此时,所有方法都将映射为相对于类级别的请求,
// 表示该控制器处理所有的请求都被映射到 value属性所指示的路径下
@RequestMapping(value="/user")
public class UserController {
	// 静态 List<User> 集合,此处代替数据库用来保存注册的用户信息
	private static List<User> userList;
	// UserController 类的构造器,初始化 List<User> 集合
	public UserController() {
		super();
		userList = new ArrayList<User>();
	}
	// 静态的日志类 LogFactory
	private static final Log logger = LogFactory.getLog(UserController.class);
	// 该方法映射的请求为 http://localhost:8080/context/user/register ,该方法支持GET请求
	@RequestMapping(value="/register",method=RequestMethod.GET)
	public String registerForm() {
		logger.info("register GET方法被调用...");
		// 跳转到注册页面
	    return "register";
	}
	// 该方法映射的请求支持 POST 请求
	@RequestMapping(value="/register",method=RequestMethod.POST)
	// 将请求中的 loginname 参数的值赋给 loginname 变量, password 和 username 同样处理
	public String register(
			@RequestParam("loginName") String loginName,
			@RequestParam("passWord") String passWord,
			@RequestParam("userName") String userName) {
		logger.info("register POST方法被调用...");
		// 创建 User 对象
		User user = new User();
		user.setLoginName(loginName);
		user.setPassWord(passWord);
		user.setUserName(userName);
		// 模拟数据库存储 User 信息
		 userList.add(user);
		// 跳转到登录页面
	    return "login";
	}

	// 该方法映射的请求为 http://localhost:8080/RequestMappingTest/user/login
	@RequestMapping("/login")
	public String login(
			// 将请求中的 loginName 参数的值赋给 loginName 变量, passWord 同样处理
			@RequestParam("loginName") String loginName,
			@RequestParam("passWord") String passWord,
			Model model) {
		logger.info("登录名:"+loginName + " 密码:" + passWord);
		// 到集合中查找用户是否存在,此处用来模拟数据库验证
		for(User user : userList){
			if(user.getLoginName().equals(loginName)
					&& user.getPassWord().equals(passWord)){
				model.addAttribute("user",user);
				return "welcome";
			}
		}
	    return "login";
	}
}

  Book

package com.mstf.domain;

import java.io.Serializable;

public class Book implements Serializable {

	private static final long serialVersionUID = 1L;

	private int id;
	private String name;
	private String author;

	public Book() {

	}

	public Book(int id, String name, String author) {
		super();
		this.id = id;
		this.name = name;
		this.author = author;
	}

	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	@Override
	public String toString() {
		return "Book [id=" + id + ", name=" + name + ", author=" + author + "]";
	}

}

  User

package com.mstf.domain;

import java.io.Serializable;
// 域对象,实现序列化接口
public class User implements Serializable {
	// 序列化
	private static final long serialVersionUID = 1L;
	// 私有字段
	private String loginName;
	private String userName;
	private String passWord;
	// 公共构造器
	public User() {
		super();
	}
	// get/set 方法
	public String getLoginName() {
		return loginName;
	}
	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
}

  springmvc-config.xml

<?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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件,
    	如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean -->
    <context:component-scan base-package="com.mstf.controller"/>

    <!-- 设置配置方案 -->
    <mvc:annotation-driven/>
    <!-- 使用默认的 servlet 来响应静态文件 -->
    <mvc:default-servlet-handler/>

    <!-- 视图解析器  -->
     <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix">
            <value>/WEB-INF/jsp/</value>
        </property>
        <!-- 后缀 -->
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>

  login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body>
	<h3>登录</h3>
	<br>
	<form action="login" method="post">
		<table>
			<tr>
				<td>
					<label>
						登录名:
					</label>
				</td>
				<td>
					<input type="text" id="loginName" name="loginName">
				</td>
			</tr>
			<tr>
				<td>
					<label>
						密 码:
					</label>
				</td>
				<td>
					<input type="password" id="passWord" name="passWord">
				</td>
			</tr>
			<tr>
				<td>
					<input id="submit" type="submit" value="登录">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

  register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
</head>
<body>
	<h3>注册页面</h3>
	<br>
	<form action="register" method="post">
		<table>
			<tr>
				<td>
					<label>
						登录名:
					</label>
				</td>
				<td>
					<input type="text" id="loginName" name="loginName">
				</td>
			</tr>
			<tr>
				<td>
					<label>
						密 码:
					</label>
				</td>
				<td>
					<input type="password" id="passWord" name="passWord">
				</td>
			</tr>
			<tr>
				<td>
					<label>
						姓 名:
					</label>
				</td>
				<td>
					<input type="text" id="userName" name="userName">
				</td>
			</tr>
			<tr>
				<td>
					<input id="submit" type="submit" value="注册">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

  welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎登录</title>
</head>
<body>
	<h3>欢迎[${requestScope.user.userName }]登录</h3>
</body>
</html>

  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
	<!-- 定义 Spring MVC 的前端控制器 -->
	<servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
	    <init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
				/WEB-INF/config/springmvc-config.xml
			</param-value>
		</init-param>
        <load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 让 Spring MVC 的前端控制器拦截所有请求 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- 乱码过滤器 -->
	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
    	<filter-name>characterEncodingFilter</filter-name>
    	<url-pattern>/*</url-pattern>
  	</filter-mapping>
</web-app>

  index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试接收JSON格式的数据</title>
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="js/json2.js"></script>
<script type="text/javascript">
	$(document).ready(function(){
		testRequestBody();
	});
	function testRequestBody(){
		$.ajax("${pageContext.request.contextPath}/json/testRequestBody",// 发送请求的 URL 字符串。
				{
				dataType : "json", // 预期服务器返回的数据类型。
	   			type : "post", //  请求方式  POST 或 GET
			   contentType:"application/json", //  发送信息至服务器时的内容编码类型
			   // 发送到服务器的数据。
			   data:JSON.stringify({id : 1, name : "你们都是笨蛋"}),
			   async:  true , // 默认设置下,所有请求均为异步请求。如果设置为 false ,则发送同步请求
			   // 请求成功后的回调函数。
			   success :function(data){
				  console.log(data);
				  $("#id").html(data.id);
				  $("#name").html(data.name);
				  $("#author").html(data.author);
			   },
			   // 请求出错时调用的函数
			   error:function(){
				   alert("数据发送失败");
			   }
		});
	}
</script>
</head>
<body>
	编号:<span id="id"></span><br>
	书名:<span id="name"></span><br>
	作者:<span id="author"></span><br>
</body>
</html>

  所有用到的包如下:

时间: 2024-10-14 00:44:35

Spring MVC登录注册以及转换json数据的相关文章

spring mvc接收ajax提交的JSON数据,并反序列化为对象

需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; $.ajax({ url: "/book/adddata", type: "POST", dataType: 'json', //必需设定,后台@RequestBody会根据它做数据反序列化 contentType:"application/json&quo

Spring MVC全局异常后返回JSON异常数据

Spring MVC全局异常后返回JSON异常数据 问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内容,如果是404请求不到资源或者500这类服务器的问题,可能会导致返回404和500异常页面,手机端的处理就非常麻烦,为了解决这个问题,就需要做全局的异常处理. 解决方案: (1)自定义或者使用spring自带的各种异常处理器 例如spring基于

【Spring学习笔记-MVC-4】返回Json数据-方式2

摘要 本文讲解另外一种利用spring MVC返回json数据的方法. 前文回顾 在<[Spring学习笔记-MVC-3]返回Json数据-方式1>中介绍了通过: @ResponseBody声明返回值: 配置<mvc:annotation-driven />: 来返回json数据.效果如下:   ==>, 从上面的效果看,只能返回一个对象,不能返回多个对象,不能做到形如下图的返回结果, 存在局限性(可能可以返回多个,自己不知道如何实现). 下面介绍的方式2,利用spring

Spring MVC之中前端向后端传数据

Spring MVC之中前端向后端传数据 Spring MVC之中前端向后端传数据和后端向前端传数据是数据流动的两个方向, 在此先介绍前端向后端传数据的情况. 一般而言, 前端向后端传数据的场景, 大多是出现了表单的提交,form表单的内容在后端学习的md文档之中有所介绍,form标签的语法格式如下 <FORM NAME="FORM1" ACTION="URL" METHOD="GET|POST" ENCTYPE="MIME&qu

NSJSONSerialization 转换JSON数据的 NSJSONReadingOptions的意思

[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingOptions error:&error]; NSJSONReadingOptions有三个枚举值,具体含义如下: 1.NSJSONReadingMutableContainers :Specifies that arrays and dictionaries are created as mutable objects. 指定方法创建的数组和字典是可变的对象.(意

判断JSON是否为空 (用spring mvc @ResponseBody 自动返回的json串 )

判断JSON是否为空 (用spring mvc @ResponseBody 自动返回的json串 ) 知识分类:EXTJS  spring mvc json 记录时间: 20150708 简单描述:用json.length 属性长度来判断是否为空,在此过程中spring mvc 自动返回的json串是 字符串的类型,所以用.length的方式返回的则是字符串的长度(一般空的JSON 在此处返回的长度应为3),并不是数组的长度,在EXTJS中用Ext.decode(json); 则可以将字符串js

C#的百度地图开发(二)转换JSON数据为相应的类

原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON数据,我们先将这个JSON数据,使用在线工盯进行格式化. [html] view plaincopy { "status": 0, "result": [ { "x": 39.926674689976, "y": 116.4659

Spring mvc登录拦截器

自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登录拦截,如下: spring-web.xml <mvc:interceptors> <!-- 配置登陆拦截器 --> <mvc:interceptor> <mvc:mapping path="/**"/> //拦截所有请求 <mvc:e

SpringMVC转换JSON数据(1)

SpringMVC提供了处理JSON格式请求/响应的        HttpMessageConverter:MappingJackson2HttpMessageConverter.利用Jackson开源类包处理JSON格式的请求或响应消息. 我们需要做的: 在Spring容器中为RequestmappingHandlerAdapter装配处理JSON的HttpMessageConverter 在交互过程中请求Accept指定的MIME类型 org.springframework.web.bin