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

来源:互联网 发布:淘宝店铺视频怎么制作 编辑:程序博客网 时间:2024/05/21 12:32

环境:

操作系统: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 plaincopyprint?
  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 plaincopyprint?
  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

[java] view plaincopyprint?
  1. public class UserActionextends 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

[html] view plaincopyprint?
  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

[java] view plaincopyprint?
  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

[java] view plaincopyprint?
  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

[html] view plaincopyprint?
  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

[java] view plaincopyprint?
  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 staticvoid 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 staticvoid 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. }

我的工程结构:



0 0
原创粉丝点击