Java中:struts2+jQuery+ajax调用实例演示



Java中:struts2+jQuery+ajax调用实例演示。

环境:

操作系统:Windows 7

应用程序服务器:apache-tomcat-7.0.11

开发工具:IntelliJ IDEA 11.1.1

Java版本:Java(TM) SE Runtime Environment (build 1.7.0_03-b05)

Struts版本:struts-2.2.1.1

jQuery版本:1.7.2

MySql版本: 5.5.16 MySQL Community Server (GPL)

mysql-connector-java:5.1.15

 

2013年4月16日注:本例中采用的JSON数据格式,推荐使用性能更好的jackson进行序列化,不要使用json-lib

 

关键点:

1.引入包:struts2对数据进行json序列化,必须要用到struts2的json-lib,struts2-json-plugin包;

2.json数据处理:异步提交的数据采用json格式,struts2-json-plugin会对数据进行json处理,所以struts2配置文件struts.xml中的package节点的extends必须是:extends=”json-default”;

例如:<package name=”default” namespace=”/test” extends=”json-default”>

3.同样的由于返回的是json数据,所以result的类型也必须采用json;

注意:struts2只能在引入json-lib,struts2-json-plugin包时,result的type属性设定json才不会报错:<result name=”userInfo” type=”json”></result>

4.针对异步提交,action的result节点值应该为空,即不能再转向(例如:只能为<result name=”userInfo” type=”json”></result>);

 

时序:

绿色代表客户端请求;紫色代表从数据库返回到客户端。

jsp—–(表单提交)—->jQuery——(ajax异步)—–>Struts2—–(action取得json数据)—–>调用service——->其它(spring,hibernate等)—–(model)—–>DB

DB—-(model)——>hibernate,spring———>service——-Struts2(action,result)——->jQuery(ajax)———->jsp

 

代码:

1. 入口jsp:input_user.jsp

 

[csharp] view plaincopy

  1. <%–
  2.   Created by IntelliJ IDEA.
  3.   User: Anyx
  4.   Date: 12-4-15
  5.   Time: 下午3:46
  6.   To change this template use File | Settings | File Templates.
  7. –%>
  8. <%@ page contentType=”text/html;charset=UTF-8″ language=”java” %>
  9. <html>
  10. <head>
  11.     <title></title>
  12.     <script type=”text/javascript” src=”/js/jquery-1.7.2.js”></script>
  13.     <script type=”text/javascript” src=”/js/myJs.js”></script>
  14. </head>
  15. <body>
  16.     <div>
  17.         请输入用户:
  18.     </div>
  19.     <div>
  20.         <form id=”subUserForm”>
  21.         <input type=”text” name=”userInfo.id” id=”id”/>
  22.         <input type=”text” name=”userInfo.name” id=”name”/>
  23.         </form>
  24.     </div>
  25.     <div>
  26.         <input id=”addUser” type=”button” value=”添加”/>
  27.          <input id=”users” type=”button” value=”所有用户”/>
  28.          <a href=”/test/load_allUser_jump.action”>所有用户:非异步方式</a>
  29.          <input id=”msg” type=”button” value=”hello”/>
  30.          <input id=”msgUserInfo” type=”button” value=”userInfo”/>
  31.          <input id=”msgUserInfoList” type=”button” value=”userInfoList”/>
  32.     </div>
  33. <div id=”allUser”>
  34. input_user:
  35. </div>
  36. </body>
  37. </html>


2. jQuery文件:myJs.js

 

 

[javascript] view plaincopy

  1. $(document).ready(function () {
  2.     $(“#msg”).click(function () {
  3.         $.ajax({
  4.             url:’/test/input_user!queryHello’,
  5.             type:’POST’,
  6.             data:”{}”,
  7.             dataType:’json’,
  8.             success:function (data) {
  9.                 $(“#allUser”).append(“输出了:id:” + data.hello);
  10.             }
  11.         });
  12.         /*$.getJSON(“/test/input_user!queryHello”, function (data) {
  13.          //通过.操作符可以从data.hello中获得Action中hello的值
  14.          $(“#allUser”).html(“输出了: ” + data.hello);
  15.          });*/
  16.     });
  17.     $(“#msgUserInfo”).click(function () {
  18.         $.ajax({
  19.             url:’/test/userInfo!loadUserInfo’,
  20.             type:’post’,
  21.             data:”{}”,
  22.             dataType:’json’,
  23.             success:function (data) {
  24.                 $(“#allUser”).append(“<div>输出了:id:” + data.userInfo.id + ”, name: ” + data.userInfo.name + ”</div>”);
  25.             }
  26.         });
  27.     });
  28.     $(“#msgUserInfoList”).click(function () {
  29.         $.ajax({
  30.             url:’/test/userInfoList.action’,
  31.             type:’post’,
  32.             data:”{}”,
  33.             dataType:’json’,
  34.             success:function (data) {
  35.                 /*$.each(data.userList, function(i, value){
  36.                  $(“#allUser”).append(“<div>输出了:id:”+value.id+”, name: ”+value.name+”</div>”);
  37.                  });*/
  38.                 $(data.userList).each(function (i, value) {
  39.                     $(“#allUser”).append(“<div>输出了:id:” + value.id + ”, name: ” + value.name + ”</div>”);
  40.                 });
  41.             }
  42.         });
  43.     });
  44.     $(“#addUser”).click(function () {
  45.         //必须先对提交表单数据数据进行序列化,采用jQuery的serialize()方法
  46.         var params = $(“#subUserForm”).serialize();
  47.         $.ajax({
  48.             url:’/test/add_user.action’,
  49.             type:’post’,
  50.             data:params,
  51.             dataType:’json’,
  52.             success:function (data) {
  53.                 /*$.each(data.userList, function(i, value){
  54.                  $(“#allUser”).append(“<div>输出了:id:”+value.id+”, name: ”+value.name+”</div>”);
  55.                  });*/
  56.                 $(data.userList).each(function (i, value) {
  57.                     $(“#allUser”).append(“<div>输出了:id:” + value.id + ”, name: ” + value.name + ”</div>”);
  58.                 });
  59.             }
  60.         });
  61.     });
  62.     $(“#users”).click(function () {
  63.         $.ajax({
  64.             url:’/test/load_allUser.action’,
  65.             type:’post’,
  66.             data:”{}”,
  67.             dataType:’json’,
  68.             success:function (data) {
  69.                 /*$.each(data.userList, function (i, value) {
  70.                  $(“#allUser”).append(“<div>输出了:id:” + value.id + ”, name: ” + value.name + ”</div>”);
  71.                  });*/
  72.                 $(data.userList).each(function (i, value) {
  73.                     $(“#allUser”).append(“<div>输出了:id:” + value.id + ”, name: ” + value.name + ”</div>”);
  74.                 });
  75.             }
  76.         });
  77.     });
  78. });

3.action类:UserAction.java

 

 

  1. public class UserAction extends ActionSupport {
  2.     UserService us = new UserService();
  3.     public String inputUser() {
  4.         return ”INPUT_USER”;
  5.     }
  6.     public String queryHello() {
  7.         this.hello = ”hello world”;
  8.         return ”hel”;
  9.     }
  10.     public String loadUserInfo() {
  11.         userInfo = new UserInfo();
  12.         userInfo.setId(3);
  13.         userInfo.setName(“取得userInfo”);
  14.         return ”userInfo”;
  15.     }
  16.     public String loadUserInfoList() {
  17.         userList = new ArrayList<UserInfo>();
  18.         UserInfo u1 = new UserInfo();
  19.         u1.setId(1);
  20.         u1.setName(“取得userInfo1″);
  21.         UserInfo u2 = new UserInfo();
  22.         u2.setId(2);
  23.         u2.setName(“取得userInfo2″);
  24.         UserInfo u3 = new UserInfo();
  25.         u3.setId(3);
  26.         u3.setName(“取得userInfo3″);
  27.         userList.add(u1);
  28.         userList.add(u2);
  29.         userList.add(u3);
  30.         return ”userInfoList”;
  31.     }
  32.     public String addUser() {
  33.         /*userInfo = new UserInfo();
  34.         userInfo.setId(7);
  35.         userInfo.setName(“张7″);*/
  36.         //如果是异步提交json格式,必须先在js中对提交的表单form进行序列化
  37.         //var params = $(“subUserForm”).serialize();
  38.         us.addUser(userInfo);
  39.         userList = us.getUser();
  40.         return ”ADD_SUCCESS”;
  41.     }
  42.     public String loadAllUser() {
  43.         userList = us.getUser();
  44.         return ”USER”;
  45.     }
  46.     /////////////////
  47.     private String hello;
  48.     public String getHello() {
  49.         return hello;
  50.     }
  51.     public void setHello(String hello) {
  52.         this.hello = hello;
  53.     }
  54.     public List<UserInfo> getUserList() {
  55.         return userList;
  56.     }
  57.     public void setUserList(List<UserInfo> userList) {
  58.         this.userList = userList;
  59.     }
  60.     public UserInfo getUserInfo() {
  61.         return userInfo;
  62.     }
  63.     public void setUserInfo(UserInfo userInfo) {
  64.         this.userInfo = userInfo;
  65.     }
  66.     private UserInfo userInfo;
  67.     private List<UserInfo> userList;
  68. }

 

4.Struts配置文件:struts.xml

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <!DOCTYPE struts PUBLIC
  3.         ”-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN”
  4.         ”http://struts.apache.org/dtds/struts-2.1.7.dtd”>
  5. <struts>
  6.     <!–struts2的开发模式–>
  7.     <constant name=”struts.devMode” value=”true”/>
  8.     <!–采用json数据格式,package的extends必须是extends=”json-default”–>
  9.     <!–并且必须要用到struts2的json-lib,struts2-json-plugin包–>
  10.     <!–采用异步提交方式,result的type=”json”,并且result节点值为空–>
  11.     <package name=”default” namespace=”/test” extends=”json-default”>
  12.         <!–客户端请求采用DMI(动态调用)–>
  13.         <action name=”input_user” class=”com.agcro.jquery.action.UserAction”>
  14.             <result name=”INPUT_USER”>/input_user.jsp</result>
  15.             <result name=”hel” type=”json”></result>
  16.         </action>
  17.         <!–客户端请求(非动态调用)–>
  18.         <action name=”userInfo” class=”com.agcro.jquery.action.UserAction” method=”loadUserInfo”>
  19.             <result name=”userInfo” type=”json”></result>
  20.         </action>
  21.         <action name=”userInfoList” class=”com.agcro.jquery.action.UserAction” method=”loadUserInfoList”>
  22.             <result name=”userInfoList” type=”json”></result>
  23.         </action>
  24.         <action name=”add_user” class=”com.agcro.jquery.action.UserAction” method=”addUser”>
  25.             <result name=”ADD_SUCCESS” type=”json”></result>
  26.         </action>
  27.         <action name=”load_allUser” class=”com.agcro.jquery.action.UserAction” method=”loadAllUser”>
  28.             <result name=”USER” type=”json”></result>
  29.         </action>
  30.         <!–不采用异步提交方式显示–>
  31.         <action name=”load_allUser_jump” class=”com.agcro.jquery.action.UserAction” method=”loadAllUser”>
  32.             <result name=”USER”>/user.jsp</result>
  33.         </action>
  34.     </package>
  35. </struts>

 

5.Service类:UserService.java

 

 

  1. public class UserService {
  2.     public List<UserInfo> getUser(){
  3.         Connection conn=Db.createConnection();
  4.         String sql=”select * from user”;
  5.         UserInfo userInfo =null;
  6.         List<UserInfo> users =new ArrayList<UserInfo>();
  7.         try{
  8.             PreparedStatement ps=Db.prepare(conn, sql);
  9.             ResultSet rs= ps.executeQuery();
  10.             while(rs.next()){
  11.                 userInfo = new UserInfo();
  12.                 userInfo.setId(rs.getInt(“id”));
  13.                 userInfo.setName(rs.getString(“name”));
  14.                 users.add(userInfo);
  15.             }
  16.             Db.close(rs);
  17.             Db.close(ps);
  18.             Db.close(conn);
  19.         }catch (Exception e){
  20.             e.printStackTrace();
  21.         }
  22.         return users;
  23.     }
  24.     public void addUser(UserInfo userInfo){
  25.         Connection conn=Db.createConnection();
  26.         String sql=”insert into user (id, name) values(?,?)”;
  27.         try{
  28.             PreparedStatement ps=Db.prepare(conn, sql);
  29.             ps.setInt(1, userInfo.getId());
  30.             ps.setString(2, userInfo.getName());
  31.             ps.executeUpdate();
  32.             Db.close(ps);
  33.             Db.close(conn);
  34.         }catch (Exception e){
  35.             e.printStackTrace();
  36.         }
  37.     }
  38. }

 

 

6.采用非异步提交后转向的jsp:user.jsp

 

  1. <%@ page contentType=”text/html;charset=UTF-8″ language=”java” %>
  2. <%@ taglib uri=”/struts-tags” prefix=”s” %>
  3. <html>
  4. <head>
  5.     <title></title>
  6. </head>
  7. <body>
  8.     <div id=”u”>
  9.         <s:iterator value=”userList” var=”c”>
  10.             <s:property value=”#c.id”/> |
  11.             <s:property value=”#c.name”/> |
  12.             </br>
  13.         </s:iterator>
  14.     </div>
  15. </body>
  16. </html>

7.每个人都知道的应用程序配置文件:web.xml 

 

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>
  2. <web-app xmlns=”http://java.sun.com/xml/ns/javaee”
  3.            xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
  4.            xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
  5.           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”
  6.            version=”2.5″>
  7.     <welcome-file-list>
  8.         <welcome-file>index.jsp</welcome-file>
  9.       </welcome-file-list>
  10.     <filter>
  11.         <filter-name>struts2</filter-name>
  12.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  13.     </filter>
  14.     <filter-mapping>
  15.         <filter-name>struts2</filter-name>
  16.         <url-pattern>/*</url-pattern>
  17.     </filter-mapping>
  18. </web-app>

 

 

8.访问数据库类:Db.java

 

  1. package com.agcro.jquery.util;
  2. import java.sql.*;
  3. /**
  4.  * Created by IntelliJ IDEA.
  5.  * UserInfo: Anyx
  6.  * Date: 12-4-15
  7.  * Time: 下午4:44
  8.  * To change this template use File | Settings | File Templates.
  9.  */
  10. public class Db {
  11.     public static Connection createConnection(){
  12.         Connection conn=null;
  13.         String url=”jdbc:mysql://localhost/test”;
  14.         String username=”root”;
  15.         String password=”123″;
  16.         try{
  17.             Class.forName(“com.mysql.jdbc.Driver”);
  18.             conn= DriverManager.getConnection(url, username, password);
  19.         }catch (Exception e){
  20.             e.printStackTrace();
  21.         }
  22.         return conn;
  23.     }
  24.     public static PreparedStatement prepare(Connection conn, String sql){
  25.         PreparedStatement ps=null;
  26.         try{
  27.             ps=conn.prepareStatement(sql);
  28.         }catch (Exception e){
  29.             e.printStackTrace();
  30.         }
  31.         return ps;
  32.     }
  33.     public static void close(Connection conn){
  34.         if(conn == null){
  35.             return;
  36.         }
  37.         try{
  38.             conn.close();
  39.             conn=null;
  40.         }catch (Exception e){
  41.             e.printStackTrace();
  42.         }
  43.     }
  44.     public static void close(PreparedStatement ps){
  45.         try{
  46.             ps.close();
  47.             ps=null;
  48.         }catch(Exception e){
  49.             e.printStackTrace();
  50.         }
  51.     }
  52.     public  static void close(ResultSet rs){
  53.         try{
  54.             rs.close();
  55.             rs=null;
  56.         }catch (Exception e){
  57.             e.printStackTrace();
  58.         }
  59.     }
  60. }

我的工程结构: