取消CAS的HTTPS登陆

1、修改WEB-INF\deployerConfigContext.xml,加入

 p:requireSecure="false"

<property name="authenticationHandlers">
			<list>
				<!--
					| This is the authentication handler that authenticates services by means of callback via SSL, thereby validating
					| a server side SSL certificate.
					+-->
				<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
					p:httpClient-ref="httpClient" p:requireSecure="false"/>
				<!--
					| This is the authentication handler declaration that every CAS deployer will need to change before deploying CAS 
					| into production.  The default SimpleTestUsernamePasswordAuthenticationHandler authenticates UsernamePasswordCredentials
					| where the username equals the password.  You will need to replace this with an AuthenticationHandler that implements your
					| local authentication strategy.  You might accomplish this by coding a new such handler and declaring
					| edu.someschool.its.cas.MySpecialHandler here, or you might use one of the handlers provided in the adaptors modules.
					+-->
				<bean
					class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
			</list>
		</property>

2、修改WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml,修改p:cookieSecure=”false”

	<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
		p:cookieSecure="false"
		p:cookieMaxAge="-1"
		p:cookieName="CASTGC"
		p:cookiePath="/cas" />

3、修改修改WEB-INF\spring-configuration\warnCookieGenerator.xml,修改p:cookieSecure=”false”

	<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
		p:cookieSecure="false"
		p:cookieMaxAge="-1"
		p:cookieName="CASPRIVACY"
		p:cookiePath="/cas" />

经过以上三步,cas server端修改完毕

CAS配合server4.0返回用户更多信息

打开deployerConfigContext.xml

<bean id="attributeRepository" class="org.jasig.services.persondir.support.StubPersonAttributeDao"
            p:backingMap-ref="attrRepoBackingMap" />

将以上代码替换成以下代码:

<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
		<!-- 指定使用的数据源,此处dataSource是已配置好的数据源 -->
		<constructor-arg index="0" ref="dataSource" />
		<!-- 从数据库中查询信息的SQL语句,通常只需要修改表名即可 -->
		<constructor-arg index="1" value="select * fromuserinfo where {0}" />
		<property name="queryAttributeMapping">
			<map>
				<!-- 上述查询的参数,将userName替换为表中表示用户名的字段名称 -->
				<entry key="username" value="userName" />
			</map>
		</property>
		<property name="resultAttributeMapping">
			<map>
				<!-- 需要返回给Web应用的其它信息,多个信息时可继续增加entry节点 -->
				<!--key值为数据表中的字段名称,value值为Client端取值时的名称标识 -->
				<entry key="address" value="address" />
			</map>
		</property>
	</bean>

 

 

接着在这个文件最后的 bean class=”org.jasig.cas.services.RegexRegisteredService” 标签内加上 p:ignoreAttributes=”true”

 

 

jsp中Java的运行环境版本等信息显示

		<table width="100%" cellpadding="5">
			<tr>
				<th width="170">Java的运行环境版本</th>
				<td width="*"><%=System.getProperties().getProperty("java.version")%></td>
			</tr>
			<tr>
				<th>Java的运行环境供应商</th>
				<td><%=System.getProperties().getProperty("java.vendor")%></td>
			</tr>
			<tr>
				<th>Java供应商的URL</th>
				<td><%=System.getProperties().getProperty("java.vendor.url")%></td>
			</tr>
			<tr>
				<th>Java的安装路径</th>
				<td><%=System.getProperties().getProperty("java.home")%></td>
			</tr>
			<tr>
				<th>Java的虚拟机规范版本</th>
				<td><%=System.getProperties().getProperty("java.vm.specification.version")%></td>
			</tr>
			<tr>
				<th>Java的虚拟机规范供应商</th>
				<td><%=System.getProperties().getProperty("java.vm.specification.vendor")%></td>
			</tr>
			<tr>
				<th>Java的虚拟机规范名称</th>
				<td><%=System.getProperties().getProperty("java.vm.specification.name")%></td>
			</tr>
			<tr>
				<th>Java的虚拟机实现版本</th>
				<td><%=System.getProperties().getProperty("java.vm.version")%></td>
			</tr>
			<tr>
				<th>Java的虚拟机实现供应商</th>
				<td><%=System.getProperties().getProperty("java.vm.vendor")%></td>
			</tr>
			<tr>
				<th>Java的虚拟机实现名称</th>
				<td><%=System.getProperties().getProperty("java.vm.name")%></td>
			</tr>
			<tr>
				<th>Java运行时环境规范版本</th>
				<td><%=System.getProperties().getProperty("java.specification.version")%></td>
			</tr>
			<tr>
				<th>Java运行时环境规范供应商</th>
				<td><%=System.getProperties().getProperty("java.specification.vender")%></td>
			</tr>
			<tr>
				<th>Java运行时环境规范名称</th>
				<td><%=System.getProperties().getProperty("java.specification.name")%></td>
			</tr>
			<tr>
				<th>Java的类格式版本号</th>
				<td><%=System.getProperties().getProperty("java.class.version")%></td>
			</tr>
			<tr>
				<th>Java的类路径</th>
				<td><%=System.getProperties().getProperty("java.class.path")%></td>
			</tr>
			<tr>
				<th>加载库时搜索的路径列表</th>
				<td><%=System.getProperties().getProperty("java.library.path")%></td>
			</tr>
			<tr>
				<th>默认的临时文件路径</th>
				<td><%=System.getProperties().getProperty("java.io.tmpdir")%></td>
			</tr>
			<tr>
				<th>一个或多个扩展目录的路径</th>
				<td><%=System.getProperties().getProperty("java.ext.dirs")%></td>
			</tr>
			<tr>
				<th>操作系统的名称</th>
				<td><%=System.getProperties().getProperty("os.name")%></td>
			</tr>
			<tr>
				<th>操作系统的构架</th>
				<td><%=System.getProperties().getProperty("os.arch")%></td>
			</tr>
			<tr>
				<th>操作系统的版本</th>
				<td><%=System.getProperties().getProperty("os.version")%></td>
			</tr>
			<tr>
				<th>文件分隔符</th>
				<td><%=System.getProperties().getProperty("file.separator")%></td>
			</tr>
			<tr>
				<th>路径分隔符</th>
				<td><%=System.getProperties().getProperty("path.separator")%></td>
			</tr>
			<tr>
				<th>行分隔符</th>
				<td><%=System.getProperties().getProperty("line.separator")%></td>
			</tr>
			<tr>
				<th>用户的账户名称</th>
				<td><%=System.getProperties().getProperty("user.name")%></td>
			</tr>
			<tr>
				<th>用户的主目录</th>
				<td><%=System.getProperties().getProperty("user.home")%></td>
			</tr>
			<tr>
				<th>用户的当前工作目录</th>
				<td><%=System.getProperties().getProperty("user.dir")%></td>
			</tr>
		</table>

 

添加vsftp账号

直接使用命令:
添加ftp账号www,指定/home/www为www的宿主目录,该账户号默认不能登陆系统
useradd -d /home/mytest/ -g ftp -s /sbin/nologin mytest

 

修改账号密码:
passwd mytest

 

修改指定目录权限:
chown -R mytest /home/mytest

 

CentOS yum 安装 vsftpd

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用,下面直接上干货。

一、安装vsftp

以管理员的身份使用yum命令安装vsftp:

[root@localhost ~]#yum install vsftpd

根据系统yum的不同,可能无法找到软件包源,可以按照这里的方法解决

二、设置vsftp开机自动启动

1、查看开机自动启动服务项目

[root@localhost ~]# chkconfig –list

2、设置vsftpd服务开机自动启动

[root@localhost ~]# chkconfig –level 35 vsftpd on

三、配置环境

1、添加vsftp账号,指定账号权限

■ 添加ftp账号www,指定/home/www为www的宿主目录,该账户号默认不能登陆系统。

[root@localhost ~]# useradd -s /bin/nologin -d /home/www www  #nologin的位置通常在/usr/sbin/nologin或/sbin/nologin位置,如果指定错误则无法登陆。

■ 修改账号密码。

[root@localhost ~]# passwd www

■ 修改指定目录权限。

[root@localhost ~]# chown -R www /home/www  #-R参数:递归设置/home/www目录及期子目录的所有者为用户www。

2、配置vsftp

编辑vsftp的配置文件/etc/vsftpd/vsftpd.conf,修改配置文件相关配置项,如下:

anonymous_enable=NO  #不允许匿名登陆

ascii_upload_enable=YES #上传时允许ASCII模式

ascii_download_enable=YES #下载时允许ASCII模式

local_enable=YES  #允许本地用户登录ftp服务器,默认是允许,不包含id为500以下用户陆

write_enable=YES  #允许用户具有在ftp服务器文件中具有写的权限

chroot_local_user=YES  ##是否将所有用户锁定在主目录,YES为启用 NO禁用

chroot_list_enable=YES  #是否启动锁定用户的名单,YES为启用 NO禁用

chroot_list_file=/etc/vsftpd/chroot_list  #当chroot_list_enable=YES时,该项有效,禁用的列表名单格式为一行一个用户, 如果名单里面有一个test01的用户, 则test01用户不会锁定在主目录,用户将可以自由切换目录。

举例:

情况一:

现在有 test1 test2 test3 这三个ftp的用户,想让1跟2用户锁定主目录不允许切换到其他目录, 但是允许3用户自由切换那么/etc/vsftpd/chroot_list列表名单如下:

test3

也就说chroot_local_user=YES,并且chroot_list_enable=YES的时候,/etc/vsftpd/chroot_list名单里面添加的是排除锁定主目录的用户名单。

情况二:

如果chroot_local_user=NO并且chroot_list_enable=YES的时候,那么/etc/vsftpd/chroot_list列表名单如下:

test1

test2

情况三:

如果chroot_local_user=YES 并且 chroot_list_enable=NO 的时候那列表名单也就不生效了,因此满足上面的条件时,所有的FTP用户将全部锁定在主目录。

ls_recurse_enable=YES  #启用递归

listen=YES  #使用IPV4时设置为YES

listen_ipv6=NO   #使用IPV6时设置为YES

local_root=/data/ftproot    #指定根目录,如果未指定,用户的宿主目录将作为FTP主目录

use_localtime=YES  # use localtime

seccomp_sandbox=NO     #turn off for seccomp filter ( if you cannot login, add this line )

3、修改shells配置

编辑shell的配置文件/etc/shells,如果文件中没有/sbin/nologin或者usr/sbin/nologin,在文件中追加该上即可。

4、配置防火墙

编辑/etc/sysconfig/iptables文件,在REJECT行之前添加如下命令:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT  #从上一行中进行复制粘贴后修改端口号为21即可

添加后保存,然后重启防火墙服务。

[root@localhost ~]# service iptables restart  #其它命令:service iptables stop停止防止墙服务

六、启动vsftp并测试登陆

启动vsftp服务

[root@localhost ~]# service vsftpd start #其它命令:service vsftpd restart重启FTP服务、service vsftpd stop停止FTP服务

服务成功启动后,用FTP客户端登陆即可(推荐使用Xshell ),ftpadmin管理目录是/www/web。

七、错误处理

1、500 OOPS: cannot change directory:/home/www

该错误原因是在CentOS系统下默认安装了SELinux,没有开启FTP支持,所以访问时都被阻止了,需要手动开启。

[root@localhost ~]# getsebool -a|grep ftp   #查看所有ftp设置

[root@localhost ~]# setsebool ftp_home_dir 1  #setsebool -P ftp_home_dir 1 使用P参数实现重启后ftp_home_dir自动为1

TortoiseGit(乌龟git)保存用户名密码的方法

windows下比较比较好用的git客户端有2种:

1. msysgitTortoiseGit(乌龟git)

2. GitHub for Windows

github的windows版也用过一段时间,但还是不太习惯。所以目前仍然青睐与msysgit+乌龟git的组合。TortoiseGit在提交时总数会提示你输入用户名密码,非常麻烦。解决方案如下:

方法一:

设置 -> git 编辑本地 .git/config 增加

1 [credential]
2     helper = store

保存,输入一次密码后第二次就会记住密码了

方法二:

1. Windows中添加一个HOME环境变量,值为%USERPROFILE%

2. 在“开始>运行”中打开%Home%,新建一个名为“_netrc”的文件

3. 用记事本打开_netrc文件,输入Git服务器名、用户名、密码,并保存:

1 machine github.com      #git服务器名称
2 login user         #git帐号
3 passwordpwd  #git密码

在windows上建_netrc

1 copy con _netrc #创建_netrc文件
2 #依次输入以下3行:
3 machine github.com   #git服务器名称
4 login username       #git帐号
5 password password    #git密码

在最后一行后输入ctrl+z,文件会自动保存并退出

再次在git上提交时就不用重复输入用户名密码了

java中实现HashMap中的按照key的字典顺序排序输出

 HashMap<String, String> maptest =new  HashMap<String, String>();
		 maptest.put("1天","day1");
		 maptest.put("5天","day5");
		 maptest.put("4天","day4");
		 maptest.put("2天","day2");
		 maptest.put("3天","day3");
		 
		 Collection<String> keyset= maptest.keySet();
		 List<String> list = new ArrayList<String>(keyset);
		 
		 //对key键值按字典升序排序
		 Collections.sort(list);
		 
		 
		 for (int i = 0; i < list.size(); i++) {
			 System.out.println("key键---值: "+list.get(i)+","+maptest.get(list.get(i)));
		 }

 

Exception occurred during processing request: Cannot create XmlPullParser 解决方法

严重: Exception occurred during processing request: Cannot create XmlPullParser
com.thoughtworks.xstream.io.StreamException: Cannot create XmlPullParser
	at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:56)
	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040)
	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1031)
	at cn.com.sway.cms.web.weixin.action.TokenAction.token(TokenAction.java:109)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:446)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:285)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at cn.com.sway.cms.interceptor.GlobalInterceptor.intercept(GlobalInterceptor.java:116)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544)
	at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:119)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:122)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
	at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:170)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2430)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)

 

原因:缺少jar包

解决方法:

使用xStream需要引入以下3个jar包
xstream-1.4.7.jar
xmlpull_1_1_3_4c.jar
kxml2-2.3.0.jar

 

$.getJSON回调函数不执行

最近做的项目遇到一个跨域请求做验证的问题,为了解决这个跨域问题,愁了老半天,最后发现jQuery提供的一个特别简单的方法,就是用jQuery.getJSON(url, [data], [callback])

jQuery的Api提供一个列子:

$.getJSON(“http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?”, function(data){
$.each(data.items, function(i,item){
$(“<img/>”).attr(“src”, item.media.m).appendTo(“#images”);
if ( i == 3 ) return false;
});
});

说明一下注意事项:

1、请求地址一定要有 jsoncallback=? ,例如我请求 百度,传一个参数userName=123,应该这样写:http://www.baidu.com?userName=123&jsoncallback=? ,如果我不传参数userName,应该这样写:http://www.baidu.com?jsoncallback=?

2、第二个参数一定要是json格式键/值对的格式。例:{ “email”: “”}

3、回调函数,您请求的地址需要返回数据,返回的数据必须是严格的json格式的数据,还需要用 参数jsoncallback加小括号包裹jsoncallback(json格式的数据),否则就会出现回调函数不会执行的问题。

下面有有两个页面参考:

a.jsp:

<html>
<head>
<title>TEST</title>
<script type=”text/javascript” src=”./jquery-1.6.2.min.js”></script>

<script type=”text/javascript”>
jQuery(function(){
$.getJSON(“http://www.ma.com/ids/cn/b.jsp?email=123@163.com&callback=?”, function(data){
alert(data.resultMsg);
});

});
</script>
</head>
<body>
</body>
</html>

 

b.jsp

 

<%@ page contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″ errorPage=”/error.jsp” %>

<%
response.setContentType(“application/json”);//这个一定要加
String callback =    request.getParameter(“callback”);
int status = 0;
String remsg = “{\”resultMsg\”:\””+status+”\”}”;
%>
<%=callback+”(“+remsg+”)”%>

 

close