http://www.cnblogs.com/gzggyy/archive/2013/05/14/3077510.html
2016年5月3日 # jfinal+freemarker+jquery mobile 開(kāi)發(fā)出web應(yīng)用, 然后找個(gè)殼子打包成apk應(yīng)用。
http://www.cnblogs.com/gzggyy/archive/2013/05/14/3077510.html 可以使用AntiSamy防范XSS跨站腳本攻擊常用XSS方式分為以下幾種:1. 輸入框中直接輸入惡意腳本,如: ><script>alert(document.cookie)</script> 2. 輸入框中輸入html標(biāo)簽,在標(biāo)簽中嵌入惡意腳本,如src,href,css style等。 <IMG SRC="javascript:alert('XSS');">; <BODY BACKGROUND="javascript:alert('XSS')"> <STYLE>li {list-style-image:url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS</br> 3. 將惡意腳本注入在event事件中,如onClick,onBlur,onMouseOver等事件。 <a onmouseover="alert(document.cookie)">xxslink</a> 4. 在remote style sheet,javascript中,如 <LINK REL="stylesheet"HREF="javascript:alert('XSS');">
ElasticSearch各個(gè)版本的apo
https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.2/index.html dubbo是阿里巴巴的框架,主要有4部分組成,1 服務(wù)臺(tái)提供方, 2 服務(wù)注冊(cè)方 3 服務(wù)消費(fèi)分 4 監(jiān)控部分 1. 注冊(cè)方一般用zookeeper, 先下載安裝,啟動(dòng)zkservece.cmd 會(huì)報(bào)錯(cuò),需要修改配置文件 zoo.cfg. 路徑中conf/下,,沒(méi)有自己加一個(gè)。 正常啟動(dòng) 2. 編寫一個(gè)服務(wù)器端, 創(chuàng)建maven項(xiàng)目 pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>DubboService</groupId> <artifactId>DubboService</artifactId> <version>0.0.1-SNAPSHOT</version> <build/> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.18.1-GA</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <artifactId>jms</artifactId> <groupId>javax.jms</groupId> </exclusion> <exclusion> <artifactId>mail</artifactId> <groupId>javax.mail</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6.SEC03</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> <type>pom</type> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version> </dependency> </dependencies> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/libs-snapshot</url> </repository> </repositories> </project> config/applicationProvider.xml 配置文件,里面定義了注冊(cè)的bean, 和zookeeper的地址 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd "> <dubbo:application name="hello-world" /> <!-- 注冊(cè)地址 --> <dubbo:registry address="zookeeper://localhost:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <!-- Service interface Concurrent Control --> <dubbo:service interface="cn.zto.service.IProcessData" ref="demoService" executes="10" /> <!-- designate implementation --> <bean id="demoService" class="cn.zto.service.impl.ProcessDataImpl" /> </beans> IProcessData定義接口及實(shí)現(xiàn)類 package cn.zto.service.impl; import cn.zto.service.IProcessData; public class ProcessDataImpl implements IProcessData { public String hello(String name) { System.out.println(name); return "hello : " + name; }} package cn.zto.service; 啟動(dòng)服務(wù)public interface IProcessData { public String hello(String name); } package cn.zto.app; 運(yùn)行起來(lái)。如下import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext( new String[] { "config/applicationProvider.xml" }); context.start(); System.out.println("按任意鍵退出"); System.in.read(); }} log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. 按任意鍵退出 下面再建一個(gè)client程序 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>DubboClient</groupId> <artifactId>DubboClient</artifactId> <version>0.0.1-SNAPSHOT</version> <build/> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.18.1-GA</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <artifactId>jms</artifactId> <groupId>javax.jms</groupId> </exclusion> <exclusion> <artifactId>mail</artifactId> <groupId>javax.mail</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6.SEC03</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> <type>pom</type> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.4</version> </dependency> </dependencies> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/libs-snapshot</url> </repository> </repositories> </project> 注冊(cè)的接口類,和要服務(wù)器端的包路徑一致 package cn.zto.service; public interface IProcessData { public String hello(String name); } 客戶端的配置文件,接口定義及zookeeper的地址 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd "> <dubbo:application name="consumer-of-helloworld-app" /> <!-- 注冊(cè)地址 --> <dubbo:registry address="zookeeper://localhost:2181"/> <dubbo:consumer timeout="5000" /> <dubbo:reference id="demoService" interface="cn.zto.service.IProcessData"/> </beans> 客戶端啟動(dòng) package cn.zto.consumer; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.zto.service.IProcessData; public class ConsumerThd{ public void sayHello(){ ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext( new String[] {"config/applicationProvider.xml"}); context.start(); IProcessData demoService=(IProcessData) context.getBean("demoService"); System.out.println(demoService.hello("world")); } public static void main(String args[]){ new ConsumerThd().sayHello(); } } 運(yùn)行結(jié)果如下 log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. hello : world 這樣就基本實(shí)現(xiàn)了dubbo的框架,很簡(jiǎn)單吧
spring boot 是spring 4.0提供的微框架,支持 jdk 1.8, maven 3以上, 否則會(huì)報(bào)一些錯(cuò)誤。
1. pom 文件, 主要寫依賴關(guān)系, <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>spring-boot</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-example</name> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/libs-snapshot</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/libs-snapshot</url> </pluginRepository> </pluginRepositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 2. 然后就是提供的接口類UserController, 實(shí)體類User, 主要是幾個(gè)注解 @RestController l類同spring mvc 的@Controller @RequestMapping 類同spring mvc package two; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/user") public class UserController { @RequestMapping("/hello") public User view(){ User user=new User(); user.setId((long)100); user.setName("fanjs"); return user; } package two; public class User { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } 3. 然后就是程序啟動(dòng),這里不需要spring xml文件,完全依賴注解。 @EnableAutoConfiguration @Configuration @ComponentScan package two; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan @EnableAutoConfiguration public class RunMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SpringApplication.run(RunMain.class, args); } } 4. 測(cè)試路徑 http://localhost:8080/user/hello {"id":100,"name":"fanjs"} 1、maven包查詢: http://mvnrepository.com/ http://mirrors.ibiblio.org/pub/mirrors/maven2/ http://gradle.artifactoryonline.com/gradle/plugins http://www.jarvana.com/jarvana/browse/ http://maven.alfresco.com/nexus/content/groups/public facet 自己理解就是分組聚合用的, 如下說(shuō)明 http://blog.csdn.net/a925907195/article/details/47257243 Solr中的group與facet的區(qū)別 如果是簡(jiǎn)單的使用的話,那么Facet與group都可以用來(lái)進(jìn)行數(shù)據(jù)的聚合查詢,但是他們還是有很大的區(qū)別的。 首先上facet跟group的操作: Facet的例子: public voidFacetFieldQuery() throws Exception { solrServer = createSolrServer(); SolrQueryquery = newSolrQuery();//建立一個(gè)新的查詢 query.setQuery("jobsName:計(jì)算機(jī)維護(hù)"); query.setFacet(true);//設(shè)置facet=on // 分類信息分為:薪水,發(fā)布時(shí)間,教育背景,工作經(jīng)驗(yàn),公司類型,工作類型 query.addFacetField(new String[] {"salary","publishDate", "educateBackground","jobExperience","companytype","jobsType" });//設(shè)置需要facet的字段 query.setFacetLimit(10);// 限制facet返回的數(shù)量 query.setFacetMissing(false);//不統(tǒng)計(jì)null的值 query.setFacetMinCount(1);// 設(shè)置返回的數(shù)據(jù)中每個(gè)分組的數(shù)據(jù)最小值,比如設(shè)置為1,則統(tǒng)計(jì)數(shù)量最小為1,不然不顯示
//query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO2014-04-13T00:00:00Z]"); QueryResponseresponse = solrServer.query(query); System.out.println("查詢時(shí)間:" + response.getQTime()); List<FacetField>facets = response.getFacetFields();//返回的facet列表 for (FacetField facet :facets) { System.out.println(facet.getName()); System.out.println("----------------"); List<Count>counts = facet.getValues(); for (Count count : counts){ System.out.println(count.getName()+":"+ count.getCount()); } System.out.println(); }
} 運(yùn)行結(jié)果如下: 查詢時(shí)間:66 salary ---------------- 面議:6882 2001-4000:1508 其他:671 4001-6000:536 3000-4499:224 2000-2999:181 6001-8000:179 3000-5000:82 1000-2000:81 4500-5999:75
publishDate ---------------- 2014-08-05T00:00:00Z:793 2014-08-04T00:00:00Z:775 2014-07-30T00:00:00Z:601 2014-08-07T00:00:00Z:548 2014-08-06T00:00:00Z:539 2014-08-11T00:00:00Z:472 2014-08-20T00:00:00Z:439 2014-08-12T00:00:00Z:438 2014-08-01T00:00:00Z:405 2014-08-03T00:00:00Z:376
educateBackground ---------------- 大專:4486 本科:1872 其他:1344 不限:1147 中專:680 高中:472 薪水范圍::430 中技:161 初中:140 碩士:94
jobExperience ---------------- 其他:2623 不限:2249 1-3年:1770 1年:1301 2年:773 3-4年:528 3-5年:379 應(yīng)屆畢業(yè)生:309 5-7年:162 1年以上:136
companytype ---------------- 民營(yíng)公司:3702 民營(yíng):2605 國(guó)企:835 股份制企業(yè):729 其他:707 合資:632 外資(非歐美):377 外商獨(dú)資:350 外資(歐美):271 上市公司:228
jobsType ---------------- 全職:10734 兼職:59 實(shí)習(xí):39
Group查詢: /**group查詢 * @throws Exception */ public void GroupFieldQuery() throws Exception { solrServer = createSolrServer(); SolrQuery query = new SolrQuery("jobsName:計(jì)算機(jī)維護(hù)"); // 設(shè)置通過(guò)facet查詢?yōu)?/span>true,表示查詢時(shí)使用facet機(jī)制 query.setParam(GroupParams.GROUP,true); query.setParam(GroupParams.GROUP_FIELD,"salary"); // 設(shè)置每個(gè)quality對(duì)應(yīng)的 query.setParam(GroupParams.GROUP_LIMIT,"1"); // 設(shè)置返回doc文檔數(shù)據(jù),因只需要數(shù)量,故設(shè)置為0 query.setRows(10); QueryResponse response = solrServer.query(query); if (response !=null) { GroupResponse groupResponse =response.getGroupResponse(); if(groupResponse !=null) { List<GroupCommand> groupList =groupResponse.getValues(); for(GroupCommand groupCommand : groupList){ List<Group> groups =groupCommand.getValues(); for(Group group : groups) { System.out.println("group查詢..."+group.getGroupValue()+"數(shù)量為:"+group.getResult().getNumFound()); } } } }
} group查詢...面議數(shù)量為:6882 group查詢...4500-5999數(shù)量為:75 group查詢...2001-4000數(shù)量為:1508 group查詢...其他數(shù)量為:671 group查詢...2000-2999數(shù)量為:181 group查詢...4001-6000數(shù)量為:536 group查詢...2000-4000數(shù)量為:19 group查詢...2000-3000數(shù)量為:34 group查詢...3000-4499數(shù)量為:224 group查詢...3000-5000數(shù)量為:82
facet的查詢結(jié)果主要是分組信息:有什么分組,每個(gè)分組包括多少記錄;但是分組中有哪些數(shù)據(jù)是不可知道的,只有進(jìn)一步搜索。 The Grouping feature only works if groups are inthe same shard. You must use the custom sharding feature to use the Groupingfeature.
兩者其實(shí)用起來(lái)還是有比較大的區(qū)別的,但是如果說(shuō)區(qū)別的話可以看下wiki上的這段 Field Collapsing and Result Grouping aredifferent ways to think about the same Solr feature. Field Collapsing collapsesa group of results with the same field value down to a single (or fixed number)of entries. For example, most search engines such as Google collapse on site soonly one or two entries are shown, along with a link to click to see moreresults from that site. Field collapsing can also be used to suppress duplicatedocuments. Result Grouping groupsdocuments with a common field value into groups, returning the top documentsper group, and the top groups based on what documents are in the groups. Oneexample is a search at Best Buy for a common term such as DVD, that shows thetop 3 results for each category ("TVs &Video","Movies","Computers", etc)
下面這兩個(gè)查詢語(yǔ)句一個(gè)是facet的一個(gè)是group的 http://localhost:8080/solr/JobsOtherWeb0/select?q=jobsName%3A%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%B4%E6%8A%A4&group=true&group.field=salary&group.limit=1&rows=10
其中facet查詢出的如下:(只截取部分結(jié)果)
根據(jù)條件查詢出的是查詢結(jié)果,facet是聚類后的信息跟查詢條件是分開(kāi)的,查詢結(jié)果也跟facet沒(méi)關(guān)系。 但是下面看group查詢的
也就是你的查詢條件是跟group相關(guān)的,返回的查詢結(jié)果也是跟group相關(guān)的,比如說(shuō)你想要查詢的結(jié)果在每個(gè)分組中 都有數(shù)據(jù)采集,那么就最好用group,這樣出來(lái)的數(shù)據(jù)跟group也是相關(guān)的,但是有個(gè)問(wèn)題,比如說(shuō)你要查詢group每個(gè)采集1個(gè),ok那么你查詢的 時(shí)候的條件rows就無(wú)效了(也不能說(shuō)無(wú)效,主要是看你怎么使用),就是最多每個(gè)分組給你返回一個(gè),多了沒(méi)有了。 再細(xì)說(shuō)點(diǎn)就是如果你想查詢歸查詢聚類歸聚類,那么使用facet,如果想使用類似采集的效果,每個(gè)group分組采集多少個(gè),那么使用group查詢。 |