ajax调用java后台的一个方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax调用java后台的一个方法相关的知识,希望对你有一定的参考价值。

想问一下那个url参数怎么传啊 xmlHttp.open("GET",url,true);假如我的java类名是aa.java,方法名是bb
那么这个url怎么写

   ajax调用java后台的方法,其实是通过url链接来访问,示例如下:

package com.xxxx.xxxx.servlet;  
  
import java.io.IOException;  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
  
import javax.naming.Context;  
import javax.naming.InitialContext;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.sql.DataSource;  
  
public class oaLoginLimitedServlet extends HttpServlet   
    private static final long serialVersionUID = 1L;  
    private static Connection conn=null;  
    private static PreparedStatement pstmt=null;  
      
      public oaLoginLimitedServlet()   
            super();  
          
  
      public void destroy()   
            super.destroy();   
          
      
      
    public static String getCount(String userid)   
      
        String v_sql=".....";  
        String v_count="";  
          
        try   
            pstmt = conn.prepareStatement(v_sql);  
            pstmt.setString(1, userid);  
            ResultSet rs = pstmt.executeQuery();  
            while(rs.next())  
                v_count = rs.getString(1);  
              
         catch (SQLException e)   
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        finally  
            try   
                pstmt.close();  
                conn.close();  
             catch (SQLException e)   
                // TODO Auto-generated catch block  
                e.printStackTrace();  
              
          
        return v_count;  
      
      
     public static Connection getConnection()        
            Context ctx = null;      
            try       
                ctx = new InitialContext();      
                DataSource ds = (DataSource)ctx.lookup("jndiname");      
                conn = ds.getConnection();      
             catch (Exception e)       
                e.printStackTrace();      
                            
            return conn;                  
             
       
        public void doPost(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException   
            String v_userid=request.getParameter("userid");  
            System.out.println(v_userid);  
            getConnection();  
            String v_count=getCount(v_userid);  
            response.setCharacterEncoding("UTF-8");   
            response.getWriter().write(v_count);      
          response.flushBuffer();  
          
          
        public void doGet(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException   
            doPost(request,response);  
          
  
  
  

如果要前端能够访问到该servlet,需要将该servlet注册到 web.xml文件中。需要在web.xml文件中添加以下内容
[html] view plaincopy
<servlet>  
    <servlet-name>oaLoginLimitedServlet</servlet-name>  
    <servlet-class>com.xxxx.xxxx.servlet.oaLoginLimitedServlet</servlet-class>  
</servlet>  
<servlet-mapping>  
    <servlet-name>oaLoginLimitedServlet</servlet-name>  
    <url-pattern>/oaLoginLimitedServlet</url-pattern>  
</servlet-mapping>  

重启相关服务。
通过ajax就可以调用了。

[html] view plaincopy
 var msg = $.ajax(  
     type: "post",  
     url: ....+\'/oaLoginLimitedServlet?userid=\'+ $(\'#act\').val(),  
     async:false  
 ).responseText;
参考技术A ajax调用的java的方法,实际上是访问服务,不是所有java类的方法都能够使用,最简单的方法是ajax调用servlet.而我看你的描述明显不是这么想的。综上所述,你的想法是不成立的,应该把这个方法封装到servlet中或action中暴露成服务才能用ajax调用。。 参考技术B ajax调用的java的方法,实际上是访问服务,不是所有java类的方法都能够使用,最简单的方法是ajax调用servlet或者struts的action。

servlet中或action中暴露成服务才能被ajax调用到。servlet就是doPost、doGet方法,action中就是有返回值的那些方法。传过来的参数需要通过request.getParameter来获取,然后调用相应防反再产生返回值。追问

function aa() xmlHttp = new XMLHttpRequest();url='/ddservlet?kk=1'; xmlHttp.open("GET",url,true); xmlHttp.onreadystatechange=nn; xmlHttp.send(null);
那你的意思是这样

追答

没错,你这样调用的就是servlet,这样你把ddservlet的doPost、doGet方法完善一下就行了。

本回答被提问者和网友采纳
参考技术C 直接用json格式传入追问

我是问路径怎么写 不是参数怎么传

比如说是不是 base/aa/bb?+参数
这种形式

追答

你试试,应该可以

Jquery ajax调用后台aspx后台文件方法(不是ashx)

在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下。

  (1)通过aspx.cs的静态方法+WebMethod进行处理

   简单的介绍下WebMethod方法的用法

   1.修饰符主要用public static修饰

   2.方法前面加上[WebMethod]属性表明这是WebMethod方法

   3.前台html页面(Client端)访问时要使用post方法,和后台.cs文件进行数据交互,否则会返回整个html页面。

   4.当后台页面返回数据后,前台html页面需要用data.d接收返回的json字符串。

   5.访问url:http://abc.com/abc.aspx/ajax方法

   aspx.cs代码:

using System.Web.Services; 

[WebMethod]
public static string SayHello()
{
    return "Hello Ajax!";
}

   前台jquery代码:

$(function() {     
    $("#btn").click(function() {     
        $.ajax({              
            type: "post", //要用post方式                 
            url: "Demo.aspx/SayHello",//方法所在页面和方法名
            contentType: "application/json; charset=utf-8",     
            dataType: "json",     
            success: function(data) {                    
                alert(data.d);//返回的数据用data.d获取内容
            },
            error: function(err) {     
                alert(err);     
            }     
        });
    });     
});
 

 

 html代码:

<form id="form1" runat="server">
<div>
    <asp:Button ID="btn" runat="server" Text="验证用户" />
</div>
</form>

 (2)通过一般处理程序ashx进行处理;

   Jquery代码:

 $.ajax({  
           type: "POST",  
           url: "S_CBFBM.ashx",  
           data: { ZBM: p_zdm },  
           beforeSend: function() {  
            //$("#div_load").visible = "true;  
           },  
           success: function(msg) {  
           //$("#div_load").visible = false;  
           $("#ds").html("<p>" + msg + "</p>");  
           $("#CBFBM").val(msg);  
                }  
        });  

  ashx.cs代码:

    <%@ WebHandler Language="C#" Class="AjaxHandler" %>  
    using System;  
    using System.Web;  
      
    public class AjaxHandler : IHttpHandler {  
        public void ProcessRequest (HttpContext context) {  
            context.Response.ContentType = "text/plain";  
            if (context.Request["name"].ToString() == "admin" &&  
                context.Request["pass"].ToString() == "admin")  
            {  
                context.Response.Write("Y");  
            }  
            else  
            {  
                context.Response.Write("N");  
            }   
        }  
       
        public bool IsReusable {  
            get {  
                return false;  
            }  
        }  
    }  

 

 

以上是关于ajax调用java后台的一个方法的主要内容,如果未能解决你的问题,请参考以下文章

现在通过前台一个按钮用ajax 调用后台的java timer 类 执行一个 定时任务,每10秒执

java后台获取网页ajax数据和返回数据简单源码

ajax上传文件后,后台java如何接收(求后台接收的完整代码)

js获取文件调用c#后台函数

ajax前台提交数据,Json数据在java后台怎么取出来

ajax异步请求获取后台数据,java mvc 后台应该如何封装各种实体类数据?