http://www.cnblogs.com/gzggyy/archive/2013/05/14/3077510.html
2016年5月3日 # jfinal+freemarker+jquery mobile 開發出web應用, 然后找個殼子打包成apk應用。
http://www.cnblogs.com/gzggyy/archive/2013/05/14/3077510.html 可以使用AntiSamy防范XSS跨站腳本攻擊常用XSS方式分為以下幾種:1. 輸入框中直接輸入惡意腳本,如: ><script>alert(document.cookie)</script> 2. 輸入框中輸入html標簽,在標簽中嵌入惡意腳本,如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各個版本的apo
https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.2/index.html dubbo是阿里巴巴的框架,主要有4部分組成,1 服務臺提供方, 2 服務注冊方 3 服務消費分 4 監控部分 1. 注冊方一般用zookeeper, 先下載安裝,啟動zkservece.cmd 會報錯,需要修改配置文件 zoo.cfg. 路徑中conf/下,,沒有自己加一個。 正常啟動 2. 編寫一個服務器端, 創建maven項目 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 配置文件,里面定義了注冊的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" /> <!-- 注冊地址 --> <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定義接口及實現類 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; 啟動服務public interface IProcessData { public String hello(String name); } package cn.zto.app; 運行起來。如下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. 按任意鍵退出 下面再建一個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> 注冊的接口類,和要服務器端的包路徑一致 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" /> <!-- 注冊地址 --> <dubbo:registry address="zookeeper://localhost:2181"/> <dubbo:consumer timeout="5000" /> <dubbo:reference id="demoService" interface="cn.zto.service.IProcessData"/> </beans> 客戶端啟動 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(); } } 運行結果如下 log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. hello : world 這樣就基本實現了dubbo的框架,很簡單吧
spring boot 是spring 4.0提供的微框架,支持 jdk 1.8, maven 3以上, 否則會報一些錯誤。
1. pom 文件, 主要寫依賴關系, <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, 實體類User, 主要是幾個注解 @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. 然后就是程序啟動,這里不需要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. 測試路徑 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 自己理解就是分組聚合用的, 如下說明 http://blog.csdn.net/a925907195/article/details/47257243 Solr中的group與facet的區別 如果是簡單的使用的話,那么Facet與group都可以用來進行數據的聚合查詢,但是他們還是有很大的區別的。 首先上facet跟group的操作: Facet的例子: public voidFacetFieldQuery() throws Exception { solrServer = createSolrServer(); SolrQueryquery = newSolrQuery();//建立一個新的查詢 query.setQuery("jobsName:計算機維護"); query.setFacet(true);//設置facet=on // 分類信息分為:薪水,發布時間,教育背景,工作經驗,公司類型,工作類型 query.addFacetField(new String[] {"salary","publishDate", "educateBackground","jobExperience","companytype","jobsType" });//設置需要facet的字段 query.setFacetLimit(10);// 限制facet返回的數量 query.setFacetMissing(false);//不統計null的值 query.setFacetMinCount(1);// 設置返回的數據中每個分組的數據最小值,比如設置為1,則統計數量最小為1,不然不顯示
//query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO2014-04-13T00:00:00Z]"); QueryResponseresponse = solrServer.query(query); System.out.println("查詢時間:" + 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(); }
} 運行結果如下: 查詢時間: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 應屆畢業生:309 5-7年:162 1年以上:136
companytype ---------------- 民營公司:3702 民營:2605 國企:835 股份制企業:729 其他:707 合資:632 外資(非歐美):377 外商獨資:350 外資(歐美):271 上市公司:228
jobsType ---------------- 全職:10734 兼職:59 實習:39
Group查詢: /**group查詢 * @throws Exception */ public void GroupFieldQuery() throws Exception { solrServer = createSolrServer(); SolrQuery query = new SolrQuery("jobsName:計算機維護"); // 設置通過facet查詢為true,表示查詢時使用facet機制 query.setParam(GroupParams.GROUP,true); query.setParam(GroupParams.GROUP_FIELD,"salary"); // 設置每個quality對應的 query.setParam(GroupParams.GROUP_LIMIT,"1"); // 設置返回doc文檔數據,因只需要數量,故設置為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()+"數量為:"+group.getResult().getNumFound()); } } } }
} group查詢...面議數量為:6882 group查詢...4500-5999數量為:75 group查詢...2001-4000數量為:1508 group查詢...其他數量為:671 group查詢...2000-2999數量為:181 group查詢...4001-6000數量為:536 group查詢...2000-4000數量為:19 group查詢...2000-3000數量為:34 group查詢...3000-4499數量為:224 group查詢...3000-5000數量為:82
facet的查詢結果主要是分組信息:有什么分組,每個分組包括多少記錄;但是分組中有哪些數據是不可知道的,只有進一步搜索。 The Grouping feature only works if groups are inthe same shard. You must use the custom sharding feature to use the Groupingfeature.
兩者其實用起來還是有比較大的區別的,但是如果說區別的話可以看下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)
下面這兩個查詢語句一個是facet的一個是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查詢出的如下:(只截取部分結果)
根據條件查詢出的是查詢結果,facet是聚類后的信息跟查詢條件是分開的,查詢結果也跟facet沒關系。 但是下面看group查詢的
也就是你的查詢條件是跟group相關的,返回的查詢結果也是跟group相關的,比如說你想要查詢的結果在每個分組中 都有數據采集,那么就最好用group,這樣出來的數據跟group也是相關的,但是有個問題,比如說你要查詢group每個采集1個,ok那么你查詢的 時候的條件rows就無效了(也不能說無效,主要是看你怎么使用),就是最多每個分組給你返回一個,多了沒有了。 再細說點就是如果你想查詢歸查詢聚類歸聚類,那么使用facet,如果想使用類似采集的效果,每個group分組采集多少個,那么使用group查詢。 |