您的位置:首页 > 编程语言 > Java开发

学习struts2+json简单示例(适于初学json者)

2012-11-21 20:06 405 查看
一、搭建struts2环境。

无非就是web.xml、struts.xml文件的配置,添加struts2所需要的jar包。

二、配置json环境。

下载jsonplugin.jar(我用的是jsonplugin-0.30.jar)、json.js、prototype.js。

并将jsonplugin.jar放到\WebRoot\WEB-INF\lib目录下,json.js、prototype.js放到\WebRoot\script目录下。

三、程序目录结构及源码。

1、目录结构



2、web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

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_2_5.xsd">
<filter>

<filter-name>struts2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.FilterDispatcher

</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>login.jsp</welcome-file>

</welcome-file-list>

</web-app>

3、struts.xml:

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.i18n.encoding" value="UTF-8" />

<package name="default" extends="json-default">

<action name="validateName" class="org.fuzk.demo.ValidateNameAction" >

<result type="json" />

</action>

</package>

</struts>

在struts.xml文件中有两个值得注意的地方:

第一个地方是配置 struts.i18n.encoding 常量时,不再是使用 GBK 编码,而是 UTF-8 编码,这是

因为 Ajax 的POST 请求都是以 UTF-8的方式进行编码的。

第二个地方是配置包时,自己的包继承了 json-default 包,而不再继承默认的 default 包,这是

因为只有在该包下才有 json 类型的Result。

3、login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>struts2&json</title>

<script type="text/javascript" src="script/json.js" ></script>

<script type="text/javascript" src="script/prototype.js"></script>

<script language="JavaScript" >

function validateName() {

var url = 'validateName.action';

var params = Form.Element.serialize('userBean.userName');

var myAjax = new Ajax.Request(

url,

{

method:'post',

parameters:params,

onComplete:processResponse,

asynchronous:true

});

}

function processResponse(request) {

var jsonObje = eval('('+request.responseText+')'); //此处也可以为var jsonObje = request.responseText.parseJSON(); parseJSON()

//函数在json.js文件中定义

$("tip").innerHTML = jsonObje.tip;

$("tip2").innerHTML = '欢迎您,'+jsonObje.userBean.userName; //此处在《struts2入门教程.pdf》中为$("tip2").innerHTML='欢迎

//您,'+JSON.stringify(jsonObje.userBean.name);

}

</script>

</head>

<body>

<span id="tip" style="color: red; font-weight: bold" ></span>

<br/>

<span id="tip2" style="color: red; font-weight: bold" ></span>

<form action="" method="post" name="form">

<fieldset>

<legend>

用户登录

</legend>

<p align="center">

帐 号:

<input type="text" name="userBean.userName" onblur="validateName();" />

</p>

</fieldset>

</form>

</body>

</html>

4、ValidateNameAction.java

package org.fuzk.demo;

import com.googlecode.jsonplugin.annotations.JSON;

import com.opensymphony.xwork2.ActionSupport;

public class ValidateNameAction extends ActionSupport {

private UserBean userBean;

private String tip;

@JSON

public UserBean getUserBean() {

return userBean;

}

public void setUserBean(UserBean userBean) {

this.userBean = userBean;

}

@JSON

public String getTip() {

return tip;

}

public void setTip(String tip) {

this.tip = tip;

}

public String execute() {

try {

if ( validateName(userBean)) {

tip = "你好!" + userBean.getUserName() + ", 这个用户名可用!";

// tip = "Hello!" + userBean.getUserName() + ",this username is OK!";

} else {

tip = "系统中已有" + userBean.getUserName() + "用户名,请重新选择一个!";

// tip = "Sorry, "+userBean.getUserName()+" is used. Please choose other.";

}

} catch ( Exception e) {

tip = e.getMessage();

}

return SUCCESS;

}

public boolean validateName( UserBean userBean) {

if ( "fuzk".equals(userBean.getUserName()))

return false;

else

return true;

}

}

5、UserBean.java

package org.fuzk.demo;

public class UserBean {

private String userName;

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

}

四、遇到的问题

在调试过程中遇到一个问题,就是在function processResponse(request) 函数中,request.responseText的值被截断,导致程序执行失败。将ValidateNameAction.java文件中的tip值修改成英文字符串时,则执行成功。由此认为是编码问题。接着查找资料,修改编码方式。将struts.xml文件中的编码方式修改为utf-8,将整个项目的编码方式修改为utf-8。最终还是不行,看来不完全是编码问题。继续在网上查找资料,说是jsonplugin.jar版本问题,于是下了一个jsonplugin-0.30.jar,替换掉原来用的jsonplugin-0.7.jar,问题解决!

另外,本文中红色字体标注位置按照教程中的写法也有问题,程序在此处执行失败,查找资料后,修改为现在的代码,执行成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: