AJAX for Java简单表数据查询实例

 

AJAX for Java简单表数据查询实例

AJAX WebShop 3Java开发具有良好的支持,同时也提供了各种层次的后台服务开发接口,本系列文章对AJAX for Java的数据库应用编程方式进行全面介绍。

 

.数据表说明

例子采用了Access数据库,当然你也可以使用mysql 或其他类型数据库,数据库名称为:demo.mdb,表名为product,创建字段分别是PRODUCT_ID, PRODUCT_NAME, PRODUCT_PRICE, PRODUCT_AREA

 

.实现数据查询

首先启动AJAX WebShop 3,在File中选择“New Project”建立新工程。

 

在弹出的New Project对话框中设置projectname web server本例中设置projectname为:java_example和设置web server为:Java。如果要修改工程路径,请在Directory中设置要存放的路径。

 

首先我们要实现后台的数据库访问服务类,实现Java后台服务类的方法有几种,但都是使用XmlDataSet类,在3.0版本之前是使用XmlRequestXmlPost类,而XmlDataSet是这两个功能的集成,并提供了更简单易用的方法:

方法A:通过WebShop的向导产生基于BusinessObjectBean的类代码框架,然后在此基础上修改query_XMLupdate_XML方法

 

设置好New Project后,再打开“File”选择“New .Java Service”,在弹出的对话框内目录输入包名:demo,设置”Class Name”为:Simple,点击“OK“后,向导将按默认模板生成Java单表数据读取和数据提交的代码,修改代码中的数据库连接串、表名就可以了。

      

方法B       使用其他Java开发工具,建立基于BusinessObjectBean的类并覆盖query_XMLupdate_XML方法。

方法AB需要使用两个ServletQuery.classUpdate.class这两个Servletweb.xml中有配置。

方法C       使用其他Java开发工具,分别建立数据读取和数据提交的servletjsp,当然也可以建立您自己的框架与控制机制,比如用您的servlet控制调用相关的JavaBean,在JavaBean中实现数据读取和数据提交。此种方法也可以与现有的流行框架很好地融合。

 

不管采用以上何种方法主要涉及XmlDataSet类,常用的属性:maxRowsrecNo,常用的方法:opengetParamfillFieldsfillDatafillRowaddFieldappendsetValuesetRecordCountgetXmlsetError,详细请参考帮助文档。

 

简单读取数据的几种实现方法:

JavaBean数据读取方法

 

import joyistar.eip.bs.*;

import joyistar.eip.vo.*;

import java.sql.*;

 

public class Simple extends BusinessObjectBean {

    String drivers   = "sun.jdbc.odbc.JdbcOdbcDriver";

    String url       = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=database/demo.mdb";

    String tablename = "product";

    String username  = "";

    String password  = "";

   

    public Simple() {

    }

   

    public joyistar.eip.vo.XmlDataSet query_XML(joyistar.eip.vo.XmlDataSet xmlDataSet) throws Exception {

        Connection conn = null;

        String sql      = "";

        ResultSet rs    = null;

        Statement stmt  = null;

        try{

            System.setProperty("jdbc.drivers", drivers);

            conn = DriverManager.getConnection(url, username, password);

            sql  = "select * from " + tablename;

            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

            rs   = stmt.executeQuery(sql);

            rs.last();

            xmlDataSet.setRecordCount(rs.getRow());

                     xmlDataSet.fillFields(rs);

                     xmlDataSet.fillData(rs);

         }

               catch(Exception e) {

            xmlDataSet.error = e.getMessage();

               e.printStackTrace();

        }

              finally {

            if(rs != null)

            rs.close();

            if(stmt != null)

            stmt.close();

            if(conn != null)

            conn.close();

        } 

        return xmlDataSet; 

    }   

 

JSP数据读取使用方法

<%@ page contentType="text/xml; charset=utf-8" %>

<%@ page import="joyistar.eip.vo.*" %>

<%@ page import="java.sql.*" %>

<%

    String drivers   = "sun.jdbc.odbc.JdbcOdbcDriver";

    String url       = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=database/demo.mdb";

    String tablename = "product";

    String username  = "";

    String password  = "";       

       Connection conn  = null;

    String sql       = "";

    ResultSet rs     = null;

    Statement stmt   = null;

    XmlDataSet xmlDataSet = new XmlRequest();

    try{

           xmlDataSet.open(request);

        System.setProperty("jdbc.drivers", drivers);

        conn = DriverManager.getConnection(url, username, password);

        sql  = "select * from " + tablename;

        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

        rs   = stmt.executeQuery(sql);

        rs.last();

        xmlDataSet.setRecordCount(rs.getRow());

              xmlDataSet.fillFields(rs);

              xmlDataSet.fillData(rs);

              out.println(xmlDataSet.getXml());

              out.flush();

    }

       catch(Exception e) {

        xmlDataSet.error = e.getMessage();

              out.println(xmlDataSet.getXml());

              out.flush();

           e.printStackTrace();

    }

       finally {

        if(rs != null)

        rs.close();

        if(stmt != null)

                     stmt.close();

        if(conn != null)

            conn.close();

    } 

%>

在这里需要说明的是,如果带有参数的查询,需要加入类似以下取参数的代码:

        Param param1     = xmlDataSet.getParam("SALE_ID");

        if(param1!=null) {

            sql += " where SALE_ID="+param1.value;

        }

 

如果是JavaBean,需要使用Run->Build编译生成类文件(相关的路径在工程属性中可以查看),后台数据访问类建立好后,在“File”中选择“New Page”打开“New Page”对话框在“File Name”中设置页面名称,如本例“simple.htm”点击ok完成设置。

 

   webshop的元件选项板“Data Access ”,“DBControl”中,拖拉向表单加入DataSet和数据感应控件DBNavigatorDBEditDBGrid等,简单地可视化拖拉建立界面,点击组件,会在右侧出现相应属性。

       注意:AJAX for Java开发中DataSet的服务路径设置有几种方法,分别对应以上几种后台的开发方式,一种是设置DataSource的类名,另一种是设置OpenURLUpdateURL。如果设置了DataSource将系统优先采用这种方式。DataSource是用于JavaBean的方式,而 OpenURLUpdateURL适用于您的JSP、Servlet或框架。

选择DataSet1,在“DataSource”属性中添加Java Service类路径或在“OpenURL”属性中添加ServiceJSPServlet),这里设置DataSource为“demo/Simple”,如果是使用JSPServlet),这里可能是demo/simple_query.jsp

打开WebShop中的“Run”启动”Start WebServer”服务,内嵌的Tomcat将启动。

成功启动 WebServer”服务后,在DataSet1的“Fields”属性中添加数据字段,方法为点击右侧“”弹出Fields对话框,在页面单击右键,在弹出选项中选择“Add Field”在弹出的“Field List”中点击 “Refresh”会在列表中显示数据表 Product ”的字段名,全部选中后,点击“ok”完成设置(操作见下图)。

 

 

设置好数据连接后,“DataSet1的“Active”属性设置为“true如图;

  同时选择DBGrid1DBNavigatorDBEdit等界面对象,在DataSet属性中选择数据源 “DataSet1”。完成数据库连接;另外,DBEdit需要选择设置DataField属性,指定要绑定的字段,点击“Run”查看运行效果。

 

       这里实现的是一个简单的表数据读取,后续的文章中我将介绍表数据提交、主从表及更高级的AJAX数据库应用编程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于 Shiro 的 Ajax 登录的简单示例,包括.xml文件: 1. 创建一个login.html页面,包括一个单和jQuery代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> </head> <body> <h2>Login</h2> <form id="loginForm"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <br> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <br> <input type="submit" value="Login"> </form> <div id="message"></div> <script> $(document).ready(function() { $('#loginForm').submit(function(e) { e.preventDefault(); $.ajax({ type: 'POST', url: 'login', data: $(this).serialize(), success: function(data) { if (data.success) { window.location.href = 'index.html'; } else { $('#message').text(data.message); } } }); }); }); </script> </body> </html> ``` 2. 创建一个Controller类,处理登录请求,返回JSON数据: ```java @Controller public class LoginController { @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public Map<String, Object> login(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> result = new HashMap<>(); String username = request.getParameter("username"); String password = request.getParameter("password"); UsernamePasswordToken token = new UsernamePasswordToken(username, password); try { SecurityUtils.getSubject().login(token); result.put("success", true); } catch (UnknownAccountException e) { result.put("success", false); result.put("message", "Unknown account"); } catch (IncorrectCredentialsException e) { result.put("success", false); result.put("message", "Incorrect password"); } catch (LockedAccountException e) { result.put("success", false); result.put("message", "Account is locked"); } catch (AuthenticationException e) { result.put("success", false); result.put("message", "Authentication failed"); } return result; } } ``` 3. 配置Shiro的.xml文件,包括Shiro的过滤器和Realm: ```xml <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <property name="loginUrl" value="/login.html"/> <property name="successUrl" value="/index.html"/> <property name="unauthorizedUrl" value="/unauthorized.html"/> <property name="filterChainDefinitions"> <value> /login = anon /logout = logout /static/** = anon /** = authc </value> </property> </bean> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myRealm"/> </bean> <bean id="myRealm" class="com.example.MyRealm"> <property name="credentialsMatcher" ref="hashedCredentialsMatcher"/> </bean> <bean id="hashedCredentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher"> <property name="hashAlgorithmName" value="SHA-256"/> <property name="hashIterations" value="1000"/> </bean> ``` 4. 创建一个Realm类,实现Shiro的认证和授权方法: ```java public class MyRealm extends AuthorizingRealm { @Autowired private UserService userService; @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // TODO: 实现授权方法 } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken userToken = (UsernamePasswordToken) token; String username = userToken.getUsername(); User user = userService.getUserByUsername(username); if (user == null) { throw new UnknownAccountException(); } return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName()); } } ``` 以上是一个基于 Shiro 的 Ajax 登录的简单示例,可以参考实现自己的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值