热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java应用服务器_Java应用服务器如何学习SolrDay26

1Solr简介1.1Solr是什么Solr是一个基于全文检索的企业级应用服务器。全文检索:可以输入一段文字,通过分词检索数据!࿰

1 Solr简介


1.1 Solr是什么

Solr是一个基于全文检索的企业级应用服务器。

全文检索:可以输入一段文字,通过分词检索数据!!(复习)

应用服务器:它是单独的服务。

1.2 Solr能做什么

它就是用于做全文搜索。

1.3 为什么需要Solr

问题:我们已经学过Lucene,为什么还要学习solr?

答:Lucene是一个工具包,不能单独运行,需要导入到java代码中。

Solr可以独立运行在tomcat容器中,通过http协议,以接口的方式对外提供服务,java代码只需要专注于业务的处理就可以。

cd6fec98ea7d10e76d69600c9a8e3bd7.png

1.4 Solr下载路径

http://archive.apache.org/dist/lucene/solr/

solr是基于lucene实现的,和Lucene同步更新。

1.5 Solr目录结构说明

下载solr-4.10.3.zip并解压:

7d4b23a701718247353e80e56e499159.png

bin:solr的运行脚本
contrib:solr的一些扩展jar包,用于增强solr的功能。
dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
docs:solr的API文档
example:solr工程的例子目录:
licenses:solr相关的一些许可信息

2 入门示例

2.1 需求

使用Solr实现电商网站的商品搜索功能。

2.2 配置步骤说明

(1)配置Solr服务器。

(2)配置SolrHome。(Solr服务的主目录,磁盘)

(3)在Solr服务器中加载SolrHome。

(4)java程序访问Solr服务器,实现全文搜索。

2.3 配置步骤

2.4 第一部分:配置Solr服务器

--说明:Solr可以独立运行,需要servlet容器加载它。本文使用tomcat。

2.4.1 第一步:解压一个Tomcat

解压一个新的Tomcat,专门用来加载Solr。

36a3596e5eeac5087f1cdfe888fd6623.png

2.4.2 第二步:部署Solr服务到Tomcat中

--在Solr的下载包中,提供了Solr的war包程序。(空的war包程序)

513beae6b67f6937aef8785a1fbc7825.png

--拷贝solr.war到Tomcat的webapp目录下。并解压

00b3a2488f9f6b144cf00291777adc15.png

2.4.3 第三步:添加Solr运行依赖的jar包

--在Solr的下载包中,提供Solr服务器运行所依赖的jar包。

c2cf841f342bef01886bf1de5fd7ffd7.png

(1)拷贝/example/lib/ext下的所有包,到solr应用的lib目录中

6946c063881a89668f38659a09e88a6a.png

(2)拷贝/example/resource/log4j.properties,到solr应用的classes目录下。

--前提:先在/WEB-INF/目录下,创建classes目录。

4d7f421186feb45d8619a2f037287a7b.png

2.5 第二部分:配置SolrHome

--说明:Solr的下载包中,提供了标准的SolrHome配置。

b47d7fbf92fea406fcb88d1810d141b0.png

2.5.1 第一步:拷贝到本地,修改名称为SolrHome。(见名知意)

e9ecd82370344048f23ec8d350c4843f.png

2.5.1.1 SolrHome说明

--SolrHome目录结构:

a5bf9cccb0c541940f9c4b13975d067f.png

(1)SolrHome是Solr配置搜索服务的主目录。

(2)collection1称为Solr服务的一个实例(solrCore)。

(3)一个solr实例对应一个索引库。

(4)Solr可以同时配置多个实例。以便为不同的java程序提供搜索服务。

配置solr服务,就是在配置solr实例。

2.5.2 第二步:配置SolrCore

2.5.2.1 Step1:配置SolrCore实例的名称

--说明:每一个实例都有自己的名称。在core.properties文件中配置

f1b2da0376e7532d01b266cbf1a89f85.png

--在这里,我们将其修改为:soreCore0719

87da1b4b171c9d8de863502c841b386e.png

2.5.2.2 Step2:配置SolrCore所需的jar依赖

--说明:Solr下载包中,提供SolrCore所需要的所有jar依赖。

31ffcd4303fe4f3c67c7c2a61bc8b477.png

(1)在SolrHome同级目录下,创建depJar文件夹。(目的:方便管理jar依赖)

e0922441ed8972e7693e1ab17f62754b.png

(2)拷贝contrib、dist两个目录到depJar目录下。

86560c6e2c53fe3929635f56e5d327c0.png

(3)修改/collection1/conf目录下的solrconfig.xml,加载jar包

--说明:solr是通过标签,来加载运行所需要的jar包的。

5529b28c82b8303372a870bb5b6dc45e.png

(4)配置索引库目录

--说明:solr是通过标签,来指定索引库的目录的。

237b8b215a668160a6bee4de7c35ad49.png

--默认路径是在SolrCore目录下,跟conf目录同级。首次加载时,将自动创建。

0c029156f6ddca9bf060265fe735bfc5.png

本课程就使用该默认路径。

2.6 第三部分:在Solr服务器中加载SolrHome

2.6.1 第一步:修改web.xml加载SolrHome

--在solr的应用中,是通过web.xml来加载SolrHome的。

eef0d28237ae52a7fcc843ba3726e141.png

--说明:在这里是通过修改标签,来加载SolrHome的。

49699bc6c705bfd406c5aa0295b526b3.png

2.6.2 第二步:启动Tomcat测试

--访问地址 http://localhost:8080/solr

71c2a6441df7ebe8b26bfafde99328aa.png

--solr服务器配置成功!!!

2.7 第四部分:创建java程序访问solr服务器

--前提:创建好了数据库。(导入products-solr.sql文件即可)

63930001bf4c56212db566246a8e3f9d.png

--配置步骤说明:

(1)创建项目。

(2)创建索引

(3)搜索索引

2.7.1 第一步:创建项目,导入jar包

--导包说明:

SolrJ核心包 /solr-4.10.3/dist/solr-solrj-4.10.3.jar
SolrJ依赖包 /solr-4.10.3/dist/solrj-lib下的所有包
日志依赖包 /solr-4.10.3/example/lib/ext目录下的所有jar包
JDBC驱动包 mysql-connector-java-5.1.10-bin.jar

--拷贝log4j.properties到src目录下。(或者创建一个Source Folder)

--项目结构:

e5bc8b66d9aab29d58a1acffc365627e.png

2.7.2 第二步:创建索引

--步骤说明。(复习回顾)

(1)采集数据。

(2)将数据转换成Solr文档。

(3)连接solr服务器,将文档写入索引库。

2.7.2.1 Step1:采集数据

--需求采集的字段说明:

参与搜索的字段:名称、价格、商品类别、描述信息

参与结果展示的字段:商品id、图片、

(1)创建Product类

public class Product {
private Integer pid;
private String name;
private String catalog_name;
private double price;
private String description;
private String picture;
// 补全get、set方法
}

(2)创建ProductDao类

package cn.gzsxt.solr.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import cn.gzsxt.solr.pojo.Product;
public class ProductDao {
private Connection connection;
private PreparedStatement pst;
private ResultSet rs;/*** 采集数据,查询所有商品* @return*/
public List getAllProducts() {List products &#61; new ArrayList<>();
try {//1、加载驱动Class.forName("com.mysql.jdbc.Driver");//2、获取Connection连接connection &#61; DriverManager.getConnection("jdbc:mysql://localhost:3306/solr", "root", "gzsxt");//3、获取PreparedStatement,执行预编译pst &#61; connection.prepareStatement("select pid,name, catalog_name,price,description,picture from products");//4、执行sql搜索rs &#61; pst.executeQuery();Product p &#61; null;
while(rs.next()){p &#61; new Product();p.setPid(rs.getInt("pid"));p.setName(rs.getString("name"));p.setPrice(rs.getFloat("price"));p.setPicture(rs.getString("picture"));p.setDescription(rs.getString("description")); p.setCatalog_name(rs.getString("catalog_name"));products.add(p);}} catch (Exception e) {e.printStackTrace();}finally {
if(null!&#61;rs){
try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
if(null!&#61;pst){
try {pst.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
if(null!&#61;connection){
try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
return products;}
}

&#xff08;3&#xff09;创建一个测试类ProductDaoTest

--导入junit类库。&#xff08;快捷键ctrl&#43;1&#xff09;

package cn.gzsxt.solr.test;
import org.junit.Test;
import cn.gzsxt.solr.dao.ProductDao;
public class ProductDaoTest {&#64;Test
public void getAllProducts(){ProductDao dao &#61; new ProductDao();System.out.println(dao.getAllProducts());}
}

--测试结果&#xff0c;采集数据成功!!!

477bdbdc0b593b1612e4ef981043d536.png

2.7.2.2 Step2&#xff1a;将数据转换成Solr文档SolrInputDocument

--说明&#xff1a;solr是通过SolrInputDocument来封装数据的。部分源码如下&#xff1a;

public SolrInputDocument(Map fields){_documentBoost &#61; 1.0F;_fields &#61; fields;
}
public void addField(String name, Object value){addField(name, value, 1.0F);
}

问题&#xff1a;我们在Lucene中知道&#xff0c;域有三大属性&#xff0c;在创建文档的时候指定。而Solr的源码中&#xff0c;只是用一个Map集合来封装域的信息。那域的三大属性怎么定义呢&#xff1f;

答&#xff1a;Solr是通过一个配置文件schema.xml&#xff0c;事先定义域的信息的。

2.7.2.2.1 Solr域的说明

--通过标签定义域的名称等信息

24240cae5d326440f3d00f4cfb141c0b.png

name属性&#xff1a;域的名称
type属性&#xff1a; 域的类型&#xff08;标签&#xff0c;加载了分词器&#xff0c;指定了分词属性&#xff09;
indexed属性&#xff1a;是否索引
stored属性&#xff1a;是否存储
multiValued属性&#xff1a;是否支持多个值

--通过标签&#xff0c;定义域的类型信息

17d9dbb28994706fcedbe6e573bde0d0.png

name属性&#xff1a;域类型的名称
class属性&#xff1a;指定域类型的solr类型。
&#xff1a;指定分词器。
&#xff1a;表示在创建索引时&#xff0c;对域做分词处理。
&#xff1a;表示在检索索引时&#xff0c;对域做分词处理。
标签&#xff1a;指定分词器
标签&#xff1a;指定过滤器

2.7.2.2.2 Solr域的特点

&#xff08;1&#xff09;、Solr的域必须先定义&#xff0c;后使用。&#xff08;否则报错&#xff1a;unknown fieldName&#xff09;

&#xff08;2&#xff09;、定义solr域的时候&#xff0c;必须指定是否索引、是否存储这两个属性。

&#xff08;3&#xff09;、定义solr域的时候&#xff0c;必须指定域的类型&#xff1a;

因为域的类型确定了这个域在索引、搜索两个阶段的分词属性。

标签&#xff1a; 来指定索引、存储两个属性

标签&#xff1a;来指定分词属性

&#xff08;4&#xff09;、每一个文档中&#xff0c;必须包含id这个域&#xff0c;它的值标记文档的唯一性。

ab600cf79baf9655429508bd2cea6276.png

2.7.2.2.3 配置Solr业务域

--商品各字段属性说明

f0150fba1ccfdae04a5b193fa3e3f48d.png

--修改schema.xml&#xff0c;添加如下配置。&#xff08;id域不用配置&#xff0c;直接使用solr的id域&#xff09;


multiValued&#61;"false" />




2.7.2.2.4 修改ProductDao&#xff0c;新增getDocuments方法

/*** 将采集到的商品数据&#xff0c;转换成solr文档类型* &#64;param products* &#64;return*/
public List getDocuments(List products){List docs &#61; new ArrayList<>();SolrInputDocument doc &#61; null;
for (Product product : products) {doc &#61; new SolrInputDocument();doc.addField("id", product.getPid());doc.addField("product_name", product.getName());doc.addField("product_price", product.getPrice());doc.addField("product_catalog_name", product.getCatalog_name());doc.addField("product_description", product.getDescription());doc.addField("product_picture", product.getPicture());docs.add(doc);}
return docs;}

2.7.2.3 Step3&#xff1a;连接Solr服务器&#xff0c;创建索引

--前提&#xff1a;已经启动了Tomcat&#xff0c;加载了Solr服务器。&#xff08;前面给过schema.xml&#xff0c;需要重写启动Tomcat&#xff09;

--修改ProductDaoTest类&#xff0c;新增createIndex方法

&#64;Test
public void createIndex(){// 1、 创建HttpSolrServer对象&#xff0c;通过它和Solr服务器建立连接。// 参数&#xff1a;solr服务器的访问地址HttpSolrServer server &#61; new HttpSolrServer("http://localhost:8080/solr/solrCore0719");// 2、 通过HttpSolrServer对象将SolrInputDocument添加到索引库。ProductDao dao &#61; new ProductDao();
try {server.add(dao.getDocuments(dao.getAllProducts()));// 3、 提交。server.commit(); System.out.println("创建索引库成功!!!");} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

2.7.2.4 Step4&#xff1a;访问Solr主界面&#xff0c;在Query选项下测试

--创建索引库成功&#xff01;&#xff01;&#xff01;

5bdd8c3a97f4867747fe5d113e6d6da5.png

2.7.3 第三步&#xff1a;搜索索引

--修改ProductDaoTest类型&#xff0c;新增一个查询方法

&#64;Test
public void queryIndex() throws Exception {// 创建HttpSolrServer对象&#xff0c;通过它和Solr服务器建立连接。// 参数&#xff1a;solr服务器的访问地址HttpSolrServer server &#61; new HttpSolrServer("http://localhost:8080/solr/solrCore0719");// 创建SolrQuery对象SolrQuery query &#61; new SolrQuery();// 设置查询条件,参考主界面query.set("q", "*:*");// 调用server的查询方法&#xff0c;查询索引库QueryResponse response &#61; server.query(query);// 查询结果SolrDocumentList results &#61; response.getResults();// 查询结果总数
long cnt &#61; results.getNumFound();System.out.println("查询结果总数:" &#43; cnt);System.out.println("--------------------分隔符-------------------");
for (SolrDocument solrDocument : results) {System.out.println("商品id:"&#43;solrDocument.get("id"));System.out.println("商品名称:"&#43;solrDocument.get("product_name"));System.out.println("商品价格:"&#43;solrDocument.get("product_price")); System.out.println("商品类别:"&#43;solrDocument.get("product_catalog_name"));System.out.println("商品图片:"&#43;solrDocument.get("product_picture"));System.out.println("----------------------------------------");}}

--查询结果&#xff0c;非常成功&#xff01;&#xff01;&#xff01;

2db07adbc584a9f8feb2217fe85efecc.png

3 solr管理控制台

3.1 查询界面说明

539a1f8a1fa340c5871fc037bf16ec5e.png

&#xff08;1&#xff09; q - 查询关键字&#xff0c;必须&#xff0c;如果查询所有文档时&#xff0c;使用*:*。

92c7c6371764740b6fcf7d18d407b52f.png

&#xff08;2&#xff09; fq - &#xff08;filter query&#xff09;过虑查询&#xff0c;可以有多个。如&#xff1a;价格10到50的记录。

8954ba4e31c48343abf393b3485ea565.png

&#xff08;3&#xff09; sort - 排序&#xff0c;格式&#xff1a;sort&#61;&#43;。如&#xff1a;按价格升序

039d96ce1a2959fcf2d092861a415c62.png

&#xff08;4&#xff09; start - 分页显示使用&#xff0c;开始记录下标&#xff0c;从0开始

f33a3fce2d0bf1d0ae8ae812ef1d42b9.png

&#xff08;5&#xff09; rows - 指定返回结果最多有多少条记录&#xff0c;配合start来实现分页。

5b15722edbc8fdbdede634b19d474fc7.png

&#xff08;6&#xff09; fl - 指定返回那些字段内容&#xff0c;用逗号或空格分隔多个。

5b15722edbc8fdbdede634b19d474fc7.png

&#xff08;7&#xff09; df-指定一个默认搜索的Field

8b64a2da83762a943c05d876b53be9fa.png

&#xff08;8&#xff09; wt - (writer type)指定输出格式&#xff0c;默认json格式。

c30c9830edda3080de3db2867b1e379e.png

3.1.1 对照界面&#xff0c;实现复杂查询

--修改ProductDaoTest类型&#xff0c;新增动态查询方法

&#64;Test
public void queryDynamic(){//1、连接solr服务器HttpSolrServer server &#61; new HttpSolrServer("http://localhost:8080/solr/solrCore0719");//2、创建查询对象&#xff0c;封装查询条件SolrQuery query &#61; new SolrQuery();//设置默认搜索的域query.set("df", "product_name");//参考管理界面中的 "q"标签&#xff0c;封装查询的关键词query.set("q", "音乐盒");//添加价格过滤query.addFilterQuery("product_price:[10 TO 50]");//添加类别过滤query.addFilterQuery("product_catalog_name:幽默杂货");//设置排序 价格升序query.set("sort","product_price asc");//设置分页信息 第二页 每页10条 start&#61;(page-1)*pageSizequery.set("start", 10);query.set("rows",10);//设置要查询字段query.set("fl", "id,product_name,product_price");//3、执行查询
try {QueryResponse response &#61; server.query(query);//获取查询的响应码
int status &#61; response.getStatus();System.out.println("响应码:"&#43;status);
if(0&#61;&#61;status){SolrDocumentList solrDocumentList &#61; response.getResults();
long numFound &#61; solrDocumentList.getNumFound();System.out.println("共查询到"&#43;numFound&#43;"条满足条件的数据!");System.out.println("--------------");
for (SolrDocument s : solrDocumentList) {System.out.println("商品的id:"&#43;s.get("id"));System.out.println("商品的名称:"&#43;s.get("product_name"));System.out.println("商品的价格:"&#43;s.get("product_price"));System.out.println("商品的图片:"&#43;s.get("product_picture"));System.out.println("商品的类别名称:"&#43;s.get("product_catalog_name"));System.out.println("商品的描述:"&#43;s.get("product_decsription"));System.out.println("-----------分隔符---------------");}}} catch (SolrServerException e) {e.printStackTrace();}}

--测试结果&#xff1a;非常成功&#xff01;&#xff01;&#xff01;&#xff08;对比管理界面查询结果&#xff09;

cafb467acb58d0b92529b0dc9bf51192.png

3.2 安装DataImport插件

3.2.1 Dataimport插件说明

--好处&#xff1a;可以在管理界面直接从数据库导入数据到索引库。&#xff08;即&#xff1a;一个插件解决入门示例中&#xff0c;创建索引的全部操作&#xff09;

c0b3576fb1f4db52317797079cc49192.png

3.2.2 安装步骤

3.2.2.1 第一步&#xff1a;添加jar依赖

&#xff08;1&#xff09;将/solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar拷贝到

/depJar/contrib/dataimporthandler/lib目录下

cc1b6fbf3b069f4ff6874631169685a0.png

&#xff08;2&#xff09;、将jdbc驱动包拷贝到 /depJar/contrib/db/lib 目录下

cb1832e4d759c7c225f06abb42d00187.png

&#xff08;3&#xff09;、在solrconfig.xml文件中&#xff0c;加载这两个jar依赖


3.2.2.2 第二步&#xff1a;配置数据库表和solr域的映射关系

--在solr实例的conf目录下&#xff0c;配置数据库映射文件data-config.xml






3.2.2.3 第三步&#xff1a;创建dataimport处理器

--说明&#xff1a;Solr是在solrconfig.xml文件中&#xff0c;通过标签定义各类请求处理器

--修改solrconfig.xml&#xff0c;添加如下配置。&#xff08;加载data-config.xml映射文件&#xff09;

class&#61;"org.apache.solr.handler.dataimport.DataImportHandler">data-config.xml

3.2.2.4 第四步&#xff1a;重启tomcat&#xff0c;在管理界面测试

--测试清空索引库&#xff0c;成功&#xff01;&#xff01;&#xff01;

ecc95fc91fc3d42e9c7dc4a57132986c.png

--测试重新导入数据&#xff0c;成功&#xff01;&#xff01;&#xff01;

829c3171ce02f126b155ff5dca67362e.png

3.3 Analyzer分析器&#xff0c;配置中文分词器

3.3.1 Solr自带分词器的缺陷

--solr跟Lucene一样&#xff0c;提供了很多分析器。可以在Analyzer选型下测试分词效果。

300ba3f3e2f3878f70174967f9f707f2.png

--测试发现&#xff1a;所以的分词器&#xff0c;对中文支持都不友好。

解决办法&#xff1a;配置中文分词器。

3.3.2 Solr配置中文分析器

3.3.2.1 中文分析器选择

选择IK中文分词器。

3.3.2.2 配置步骤

3.3.2.2.1 第一步&#xff1a;添加IkAnalyze的jar依赖

--把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib目录下。

a668c7e1309d298d8d2e70d48b1c3051.png

3.3.2.2.2 第二步&#xff1a;加载IkAnalyzer的核心配置文件

--拷贝IkAnalyzer的配置文件到solr/WEB-INF/classes目录

3.3.2.2.3 第三步&#xff1a;创建中文分词器

--在schema.xml中自定义一个FieldType&#xff0c;指定中文分词器IKAnalyzer。

3.3.2.3 测试中文分词器

3.3.2.3.1 第一步&#xff1a;重启tomcat

3.3.2.3.2 第二步&#xff1a;在analysis选项卡下&#xff0c;测试分词效果。成功&#xff01;&#xff01;&#xff01;

3.3.3 改造业务域&#xff0c;使用IK做分词器

--修改schem.xml文件&#xff0c;修改需要分词的域的fieldType类型

我们只需要修改product_name、product_description两个业务域即可。

--重启tomcat即可。

4 Solr案例实战

入门案例讲义&#xff0c;就告一段落啦&#xff0c;下一期是关于Sorl的实战案例&#xff01;我们一起期待吧&#xff01;&#xff01;




推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
author-avatar
犹豫的海波V5_697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有