导包

添加文章

addArticle.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>添加文章</title>

</head>

<body>

<center>

<h2>添加文章</h2>

<form action="${pageContext.request.contextPath}/addArtical.action" method="post">

<table>

<tr>

<td>文章标题</td>

<td>

<input type="text" name="title"/>

</td>

</tr>

<tr>

<td>文章内容</td>

<td>

<textarea rows="20" cols="20" name="content"></textarea>

</td>

</tr>

<tr>

<td>

<input type="submit" value="添加">

</td>

<td>

<input type="button" value="跳转至列表页面" onclick="window.location = '${pageContext.request.contextPath}/listArticle.jsp'">

</td>

</tr>

</table>

</form>

</center>

</body>

</html>

addServlet.java

package org.crdit.action;

import java.io.IOException;

import java.nio.file.Paths;

import java.util.UUID;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.StringField;

import org.apache.lucene.document.TextField;

import org.apache.lucene.document.Field.Store;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.IndexWriterConfig;

import org.apache.lucene.index.IndexWriterConfig.OpenMode;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

/**

* Servlet implementation class AddServlet

* 添加文章信息

*/

@WebServlet("/addArtical.action")

public class AddServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public AddServlet() {

super();

// TODO Auto-generated constructor stub

}

@Override

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {

//通过request设置请求编码信息,防止中文乱码

request.setCharacterEncoding("UTF-8");

//获取用户输入的信息

String title=request.getParameter("title");

String content=request.getParameter("content");

//指定索引所在目录

Directory directory=FSDirectory.open(Paths.get("E:\\Lucene\\Lucene_db\\artical_tb"));

//词库分词   需要导jar包   lucene-analyzers-smartcn.jar

Analyzer analyzer = new SmartChineseAnalyzer();

//创建IndexWriterConfig实例  指定添加索引的配置信息

IndexWriterConfig config=new IndexWriterConfig(analyzer);

//如果索引不存在,则创建。存在,则追加。

config.setOpenMode(OpenMode.CREATE_OR_APPEND);

//创建IndexWriter

IndexWriter indexWriter=new IndexWriter(directory, config);

//往索引库中添加记录  Lucene中一个document实例代表数据表中的一条记录

Document document=new Document();

/*

*StringFiled:不会对关键字进行分词

*TextFiled:会对关键字进行分词

*

* Store.YES:会将数据进行存储并分词

* Store.NO:不会将数据进行存储,不会分词,索引还是会创建。有索引,没有内容。

*/

//通过UUID生成一个唯一的随机数

String articleId=UUID.randomUUID().toString();

document.add(new StringField("articleId",articleId , Store.YES));

document.add(new TextField("title", title, Store.YES));

document.add(new TextField("content", content, Store.YES));

document.add(new TextField("allArticle", "@allArticle", Store.YES));

indexWriter.addDocument(document);

//提交事务

indexWriter.commit();

//关闭事务

indexWriter.close();

System.out.println("添加成功");

} catch (Exception e) {

e.printStackTrace();

}

//跳转至添加文章页面

request.getRequestDispatcher("/addArticle.jsp").forward(request, response);

}

}

添加分页

添加pager.tld放到WEB-INF下

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

<!-- 标签版本号 -->

<tlibversion>1.0</tlibversion>

<!-- JSP版本号 -->

<jspversion>1.1</jspversion>

<!-- 标签简称号 -->

<shortname>checkLogon</shortname>

<!-- URI地址,jsp页面可以通过引入该地址与标签进行关联 并找到标签处理类 -->

<uri>myPager-tag</uri>

<info>

我的分页标签,总共24种

</info>

<tag>

<!-- 指定标签名 -->

<name>pager</name>

<!-- 标签处理类 需要指定 包名+类名 -->

<tagclass>org.crdit.pager.Pager</tagclass>

<!-- 标签中的属性 -->

<attribute>

<!--声明属性名称  -->

<name>pageIndex</name>

<!-- 是否必填 -->

<required>false</required>

<!-- 是否支持EL表达式 -->

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>pageSize</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>totalNum</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>submitUrl</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>pageStyle</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

</taglib>

Pager.java

package org.crdit.pager;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

/**

* @author crd

* 创建标签处理类

*/

public class Pager extends TagSupport {

private int pageIndex; //当前页码

private int pageSize; //每一页显示的记录数

private int totalNum; //总记录数

private String submitUrl; //提交地址

private String pageStyle="";//样式

public int getPageIndex() {

return pageIndex;

}

public void setPageIndex(int pageIndex) {

if(pageIndex==0){

pageIndex = 1;

}

this.pageIndex = pageIndex;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public int getTotalNum() {

return totalNum;

}

public void setTotalNum(int totalNum) {

this.totalNum = totalNum;

}

public String getSubmitUrl() {

return submitUrl;

}

public void setSubmitUrl(String submitUrl) {

this.submitUrl = submitUrl;

}

public String getPageStyle() {

return pageStyle;

}

public void setPageStyle(String pageStyle) {

this.pageStyle = pageStyle;

}

@Override

public int doStartTag() throws JspException {

try {

JspWriter jspWriter= this.pageContext.getOut();

//创建StringBuffer实例,用于拼装页码相关信息

StringBuffer sbf=new StringBuffer();

String jumpUrl;

//判断总记录数是否大于0

if(totalNum>0){

//计算总共的页数

int totalPageNum=this.totalNum%this.pageSize==0?this.totalNum/this.pageSize:this.totalNum/this.pageSize+1;

StringBuffer pager=new StringBuffer();

//如果当前在第一页

if(pageIndex==1){

pager.append("<span class='disabled'>上一页</span>");

//计算中间页码

calcMiddle(pager,totalPageNum);

//如果总共就一页,那么下一页也不能点击

if(totalPageNum==1){

pager.append("<span class='disabled'>下一页</span>");

}else{

jumpUrl=this.submitUrl.replace("{0}", String.valueOf(this.pageIndex+1));

//可以点击下一页

pager.append("<a href='"+jumpUrl+"'>下一页</a>");

}

//如果当前页码是尾页

}else if(this.pageIndex==totalPageNum){

jumpUrl=this.submitUrl.replace("{0}", String.valueOf(this.pageIndex-1));

//可以点击下一页

pager.append("<a href='"+jumpUrl+"'>上一页</a>");

//计算中间页码

calcMiddle(pager,totalPageNum);

pager.append("<span class='disabled'>下一页</span>");

//当前页码既不是首页也不是尾页

}else{

jumpUrl=this.submitUrl.replace("{0}", String.valueOf(this.pageIndex-1));

//可以点击下一页

pager.append("<a href='"+jumpUrl+"'>上一页</a>");

//计算中间页码

calcMiddle(pager,totalPageNum);

jumpUrl=this.submitUrl.replace("{0}", String.valueOf(this.pageIndex+1));

//可以点击下一页

pager.append("<a href='"+jumpUrl+"'>下一页</a>");

}

sbf.append("<table align='center' class='"+pageStyle+"' style='width:100%;font-size:14px'> <tr><td>"+pager.toString()+"</td></tr>");

//定义开始记录号,每页显示10条

int startSize=(this.pageIndex-1)*this.pageSize+1;

//定义结束记录号

int endSize=this.pageIndex==totalPageNum?totalNum:this.pageIndex*this.pageSize;

sbf.append("<tr><td>总共<font color='red'>"+totalNum+"</font>条记录,当前显示"+startSize+"-"+endSize+"条记录</td></tr></table>");

}else{

sbf.append("<table align='center' class='"+pageStyle+"' style='width:100%;font-size:14px'><tr><td>总共<font color='red'>0</font>条记录,当前显示0-0条记录</td></tr></table>");

}

jspWriter.write(sbf.toString());

} catch (IOException e) {

e.printStackTrace();

}

return super.doStartTag();

}

/**

* 计算中间页码

* @param pager

* @param totalPageNum 总页码数

*/

public void calcMiddle(StringBuffer pager,int totalPageNum) {

String jumpUrl="";

//如果总页码数小于等于10  1 2 3 4 5 6 7 8 9 10

if(totalPageNum<=10){

for (int i = 1; i <=totalPageNum; i++) {

//如果i等于当前页码,则不能点

if(i==this.pageIndex){

pager.append("<span class='current'>"+i+"</span>");

}else{

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(i));

pager.append("<a href='"+jumpUrl+"'>"+i+"</a>");

}

}

}else{

//如果当前页码靠近首页  1 2 3 4 5 6 7 8 9 ... 100

if(pageIndex<=8){

for (int i = 1; i <=9; i++) {

//如果i等于当前页码,则不能点

if(i==this.pageIndex){

pager.append("<span class='current'>"+i+"</span>");

}else{

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(i));

pager.append("<a href='"+jumpUrl+"'>"+i+"</a>");

}

}

pager.append("...");

//拼装尾页

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(totalPageNum));

pager.append("<a href='"+jumpUrl+"'>"+totalPageNum+"</a>");

//当前页码靠近尾页

}else if(pageIndex+8>=totalPageNum){

//拼装首页

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(1));

pager.append("<a href='"+jumpUrl+"'>"+1+"</a>");

pager.append("...");

for (int i = totalPageNum-9; i <=totalPageNum; i++) {

//如果i等于当前页码,则不能点

if(i==this.pageIndex){

pager.append("<span class='current'>"+i+"</span>");

}else{

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(i));

pager.append("<a href='"+jumpUrl+"'>"+i+"</a>");

}

}

//当前页码靠中间

}else{

//拼装首页

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(1));

pager.append("<a href='"+jumpUrl+"'>"+1+"</a>");

pager.append("...");

for (int i = this.pageIndex-4; i <=this.pageIndex+4; i++) {

//如果i等于当前页码,则不能点

if(i==this.pageIndex){

pager.append("<span class='current'>"+i+"</span>");

}else{

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(i));

pager.append("<a href='"+jumpUrl+"'>"+i+"</a>");

}

}

pager.append("...");

//拼装尾页

jumpUrl=this.submitUrl.replace("{0}",String.valueOf(totalPageNum));

pager.append("<a href='"+jumpUrl+"'>"+totalPageNum+"</a>");

}

}

}

}

添加样式文件

.digg {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.digg A {

BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #000099; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none

}

.digg A:hover {

BORDER-RIGHT: #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #000; BORDER-BOTTOM: #000099 1px solid

}

.digg A:active {

BORDER-RIGHT: #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #000; BORDER-BOTTOM: #000099 1px solid

}

.digg SPAN.current {

BORDER-RIGHT: #000099 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #000099 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #000099 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #000099 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.digg SPAN.disabled {

BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid

}

/*CSS yahoo style pagination*/

.yahoo {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.yahoo A {

BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #fff 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #fff 1px solid; COLOR: #000099; PADDING-TOP: 2px; BORDER-BOTTOM: #fff 1px solid; TEXT-DECORATION: underline

}

.yahoo A:hover {

BORDER-RIGHT: #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #000; BORDER-BOTTOM: #000099 1px solid

}

.yahoo A:active {

BORDER-RIGHT: #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #f00; BORDER-BOTTOM: #000099 1px solid

}

.yahoo SPAN.current {

BORDER-RIGHT: #fff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #fff 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #fff 1px solid; COLOR: #000; PADDING-TOP: 2px; BORDER-BOTTOM: #fff 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.yahoo SPAN.disabled {

BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid

}

/*CSS meneame style pagination*/

.meneame {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 80%; PADDING-BOTTOM: 3px; MARGIN: 3px; COLOR: #ff6500; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.meneame A {

BORDER-RIGHT: #ff9600 1px solid; PADDING-RIGHT: 7px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #ff9600 1px solid; PADDING-LEFT: 7px; BACKGROUND-IMAGE: url(meneame.jpg); PADDING-BOTTOM: 5px; BORDER-LEFT: #ff9600 1px solid; COLOR: #ff6500; MARGIN-RIGHT: 3px; PADDING-TOP: 5px; BORDER-BOTTOM: #ff9600 1px solid; TEXT-DECORATION: none

}

.meneame A:hover {

BORDER-RIGHT: #ff9600 1px solid; BORDER-TOP: #ff9600 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #ff9600 1px solid; COLOR: #ff6500; BORDER-BOTTOM: #ff9600 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.meneame A:active {

BORDER-RIGHT: #ff9600 1px solid; BORDER-TOP: #ff9600 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #ff9600 1px solid; COLOR: #ff6500; BORDER-BOTTOM: #ff9600 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.meneame SPAN.current {

BORDER-RIGHT: #ff6500 1px solid; PADDING-RIGHT: 7px; BORDER-TOP: #ff6500 1px solid; PADDING-LEFT: 7px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; BORDER-LEFT: #ff6500 1px solid; COLOR: #ff6500; MARGIN-RIGHT: 3px; PADDING-TOP: 5px; BORDER-BOTTOM: #ff6500 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.meneame SPAN.disabled {

BORDER-RIGHT: #ffe3c6 1px solid; PADDING-RIGHT: 7px; BORDER-TOP: #ffe3c6 1px solid; PADDING-LEFT: 7px; PADDING-BOTTOM: 5px; BORDER-LEFT: #ffe3c6 1px solid; COLOR: #ffe3c6; MARGIN-RIGHT: 3px; PADDING-TOP: 5px; BORDER-BOTTOM: #ffe3c6 1px solid

}

/*CSS flickr style pagination*/

.flickr {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.flickr A {

BORDER-RIGHT: #dedfde 1px solid; PADDING-RIGHT: 6px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #dedfde 1px solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; BORDER-LEFT: #dedfde 1px solid; COLOR: #0061de; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #dedfde 1px solid; TEXT-DECORATION: none

}

.flickr A:hover {

BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #000 1px solid; COLOR: #fff; BORDER-BOTTOM: #000 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.meneame A:active {

BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #000 1px solid; COLOR: #fff; BORDER-BOTTOM: #000 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.flickr SPAN.current {

PADDING-RIGHT: 6px; PADDING-LEFT: 6px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; COLOR: #ff0084; MARGIN-RIGHT: 3px; PADDING-TOP: 2px

}

.flickr SPAN.disabled {

PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; COLOR: #adaaad; MARGIN-RIGHT: 3px; PADDING-TOP: 2px

}

/*CSS sabrosus style pagination*/

.sabrosus {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.sabrosus A {

BORDER-RIGHT: #9aafe5 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #9aafe5 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #9aafe5 1px solid; COLOR: #2e6ab1; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #9aafe5 1px solid; TEXT-DECORATION: none

}

.sabrosus A:hover {

BORDER-RIGHT: #2b66a5 1px solid; BORDER-TOP: #2b66a5 1px solid; BORDER-LEFT: #2b66a5 1px solid; COLOR: #000; BORDER-BOTTOM: #2b66a5 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.pagination A:active {

BORDER-RIGHT: #2b66a5 1px solid; BORDER-TOP: #2b66a5 1px solid; BORDER-LEFT: #2b66a5 1px solid; COLOR: #000; BORDER-BOTTOM: #2b66a5 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.sabrosus SPAN.current {

BORDER-RIGHT: navy 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: navy 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: navy 1px solid; COLOR: #fff; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: navy 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.sabrosus SPAN.disabled {

BORDER-RIGHT: #929292 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #929292 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #929292 1px solid; COLOR: #929292; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #929292 1px solid

}

/*CSS scott style pagination*/

.scott {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.scott A {

BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ddd 1px solid; COLOR: #88af3f; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; TEXT-DECORATION: none

}

.scott A:hover {

BORDER-RIGHT: #85bd1e 1px solid; BORDER-TOP: #85bd1e 1px solid; BORDER-LEFT: #85bd1e 1px solid; COLOR: #638425; BORDER-BOTTOM: #85bd1e 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.scott A:active {

BORDER-RIGHT: #85bd1e 1px solid; BORDER-TOP: #85bd1e 1px solid; BORDER-LEFT: #85bd1e 1px solid; COLOR: #638425; BORDER-BOTTOM: #85bd1e 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.scott SPAN.current {

BORDER-RIGHT: #b2e05d 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #b2e05d 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #b2e05d 1px solid; COLOR: #fff; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #b2e05d 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.scott SPAN.disabled {

BORDER-RIGHT: #f3f3f3 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f3f3f3 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #f3f3f3 1px solid; COLOR: #ccc; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #f3f3f3 1px solid

}

/*CSS quotes style pagination*/

.quotes {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.quotes A {

BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ddd 1px solid; COLOR: #aaa; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; TEXT-DECORATION: none

}

.quotes A:hover {

BORDER-RIGHT: #a0a0a0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a0a0a0 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #a0a0a0 1px solid; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #a0a0a0 1px solid

}

.quotes A:active {

BORDER-RIGHT: #a0a0a0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a0a0a0 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #a0a0a0 1px solid; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #a0a0a0 1px solid

}

.quotes SPAN.current {

BORDER-RIGHT: #e0e0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #e0e0e0 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #e0e0e0 1px solid; COLOR: #aaa; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #e0e0e0 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.quotes SPAN.disabled {

BORDER-RIGHT: #f3f3f3 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f3f3f3 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #f3f3f3 1px solid; COLOR: #ccc; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #f3f3f3 1px solid

}

/*CSS black style pagination*/

.black {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 80%; PADDING-BOTTOM: 10px; MARGIN: 3px; COLOR: #a0a0a0; PADDING-TOP: 10px; TEXT-ALIGN: center

}

.black A {

BORDER-RIGHT: #909090 1px solid; PADDING-RIGHT: 5px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #909090 1px solid; PADDING-LEFT: 5px; BACKGROUND-IMAGE: url(bar.gif); PADDING-BOTTOM: 2px; BORDER-LEFT: #909090 1px solid; COLOR: #c0c0c0; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #909090 1px solid; TEXT-DECORATION: none

}

.black A:hover {

BORDER-RIGHT: #f0f0f0 1px solid; BORDER-TOP: #f0f0f0 1px solid; BACKGROUND-IMAGE: url(invbar.gif); BORDER-LEFT: #f0f0f0 1px solid; COLOR: #ffffff; BORDER-BOTTOM: #f0f0f0 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black A:active {

BORDER-RIGHT: #f0f0f0 1px solid; BORDER-TOP: #f0f0f0 1px solid; BACKGROUND-IMAGE: url(invbar.gif); BORDER-LEFT: #f0f0f0 1px solid; COLOR: #ffffff; BORDER-BOTTOM: #f0f0f0 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black SPAN.current {

BORDER-RIGHT: #ffffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #ffffff 1px solid; COLOR: #ffffff; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #ffffff 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black SPAN.disabled {

BORDER-RIGHT: #606060 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #606060 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #606060 1px solid; COLOR: #808080; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #606060 1px solid

}

/*CSS black2 style pagination*/

.black2 {

PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; MARGIN: 3px; PADDING-TOP: 7px; TEXT-ALIGN: center

}

.black2 A {

BORDER-RIGHT: #000000 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #000000 1px solid; COLOR: #000000; PADDING-TOP: 2px; BORDER-BOTTOM: #000000 1px solid; TEXT-DECORATION: none

}

.black2 A:hover {

BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; COLOR: #fff; BORDER-BOTTOM: #000000 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black2 A:active {

BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; COLOR: #fff; BORDER-BOTTOM: #000000 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black2 SPAN.current {

BORDER-RIGHT: #000000 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #000000 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #000000 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #000000 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black2 SPAN.disabled {

BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid

}

/*CSS black-red style pagination*/

.black-red {

FONT-SIZE: 11px; COLOR: #fff; FONT-FAMILY: Tahoma, Arial, Helvetica, Sans-serif; TEXT-ALIGN: center;

}

.black-red A {

PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; COLOR: #fff; PADDING-TOP: 2px; TEXT-DECORATION: none

}

.black-red A:hover {

COLOR: #fff; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black-red A:active {

COLOR: #fff; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black-red SPAN.current {

PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; COLOR: #fff; PADDING-TOP: 2px; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.black-red SPAN.disabled {

PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; COLOR: #868686; PADDING-TOP: 2px; mso-para-margin-bottom:0.0000gd;text-align:left;">}

/*CSS grayr style pagination*/

.grayr {

PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 11px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; FONT-FAMILY: Tahoma, Arial, Helvetica, Sans-serif; TEXT-ALIGN: center;

}

.grayr A {

PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; COLOR: #000; PADDING-TOP: 2px; TEXT-DECORATION: none

}

.grayr A:hover {

COLOR: #000; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.grayr A:active {

COLOR: #000; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.grayr SPAN.current {

PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; COLOR: #303030; PADDING-TOP: 2px; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.grayr SPAN.disabled {

PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; COLOR: #797979; PADDING-TOP: 2px; mso-para-margin-bottom:0.0000gd;text-align:left;">}

/*CSS yellow style pagination*/

.yellow {

PADDING-RIGHT: 7px; PADDING-LEFT: 7px; PADDING-BOTTOM: 7px; MARGIN: 3px; PADDING-TOP: 7px; TEXT-ALIGN: center

}

.yellow A {

BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #ccc 1px solid; COLOR: #000; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid; TEXT-DECORATION: none

}

.yellow A:hover {

BORDER-RIGHT: #f0f0f0 1px solid; BORDER-TOP: #f0f0f0 1px solid; BORDER-LEFT: #f0f0f0 1px solid; COLOR: #000; BORDER-BOTTOM: #f0f0f0 1px solid

}

.yellow A:active {

BORDER-RIGHT: #f0f0f0 1px solid; BORDER-TOP: #f0f0f0 1px solid; BORDER-LEFT: #f0f0f0 1px solid; COLOR: #000; BORDER-BOTTOM: #f0f0f0 1px solid

}

.yellow SPAN.current {

BORDER-RIGHT: #d9d300 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d9d300 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #d9d300 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #d9d300 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.yellow SPAN.disabled {

BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid

}

/*CSS jogger style pagination*/

.jogger {

PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: 7px; PADDING-TOP: 2px; FONT-FAMILY: "Lucida Sans Unicode", "Lucida Grande", LucidaGrande, "Lucida Sans", Geneva, Verdana, sans-serif;TEXT-ALIGN: center;

}

.jogger A {

PADDING-RIGHT: 0.64em; PADDING-LEFT: 0.64em; PADDING-BOTTOM: 0.43em; MARGIN: 2px; COLOR: #fff; PADDING-TOP: 0.5em; TEXT-DECORATION: none

}

.jogger A:hover {

PADDING-RIGHT: 0.64em; PADDING-LEFT: 0.64em; PADDING-BOTTOM: 0.43em; MARGIN: 2px; COLOR: #fff; PADDING-TOP: 0.5em; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.jogger A:active {

PADDING-RIGHT: 0.64em; PADDING-LEFT: 0.64em; PADDING-BOTTOM: 0.43em; MARGIN: 2px; COLOR: #fff; PADDING-TOP: 0.5em; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.jogger SPAN.current {

PADDING-RIGHT: 0.64em; PADDING-LEFT: 0.64em; PADDING-BOTTOM: 0.43em; MARGIN: 2px; COLOR: #6d643c; PADDING-TOP: 0.5em; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.jogger SPAN.disabled {

DISPLAY: none

}

/*CSS starcraft2 style pagination*/

.starcraft2 {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; FONT-SIZE: 13.5pt; PADDING-BOTTOM: 3px; MARGIN: 3px; COLOR: #fff; PADDING-TOP: 3px; FONT-FAMILY: Arial; TEXT-ALIGN: center

}

.starcraft2 A {

MARGIN: 2px; COLOR: #fa0; TEXT-DECORATION: none

}

.starcraft2 A:hover {

COLOR: #fff; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.starcraft2 A:active {

COLOR: #fff; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.starcraft2 SPAN.current {

FONT-WEIGHT: bold; MARGIN: 2px; COLOR: #fff; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.starcraft2 SPAN.disabled {

MARGIN: 2px; COLOR: #444; mso-para-margin-bottom:0.0000gd;text-align:left;">}

/*CSS tres style pagination*/

.tres {

PADDING-RIGHT: 7px; PADDING-LEFT: 7px; FONT-WEIGHT: bold; FONT-SIZE: 13.2pt; PADDING-BOTTOM: 7px; MARGIN: 3px; PADDING-TOP: 7px; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-ALIGN: center

}

.tres A {

BORDER-RIGHT: #d9d300 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d9d300 2px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #d9d300 2px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #d9d300 2px solid; TEXT-DECORATION: none

}

.tres A:hover {

BORDER-RIGHT: #ff0 2px solid; BORDER-TOP: #ff0 2px solid; BORDER-LEFT: #ff0 2px solid; COLOR: #000; BORDER-BOTTOM: #ff0 2px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.tres A:active {

BORDER-RIGHT: #ff0 2px solid; BORDER-TOP: #ff0 2px solid; BORDER-LEFT: #ff0 2px solid; COLOR: #000; BORDER-BOTTOM: #ff0 2px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.tres SPAN.current {

BORDER-RIGHT: #fff 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #fff 2px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #fff 2px solid; COLOR: #000; PADDING-TOP: 2px; BORDER-BOTTOM: #fff 2px solid

}

.tres SPAN.disabled {

DISPLAY: none

}

/*CSS megas512 style pagination*/

.megas512 {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.megas512 A {

BORDER-RIGHT: #dedfde 1px solid; PADDING-RIGHT: 6px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #dedfde 1px solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; BORDER-LEFT: #dedfde 1px solid; COLOR: #99210b; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #dedfde 1px solid; TEXT-DECORATION: none

}

.megas512 A:hover {

BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #000 1px solid; COLOR: #fff; BORDER-BOTTOM: #000 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.megas512 A:active {

BORDER-RIGHT: #000 1px solid; BORDER-TOP: #000 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #000 1px solid; COLOR: #fff; BORDER-BOTTOM: #000 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.megas512 SPAN.current {

PADDING-RIGHT: 6px; PADDING-LEFT: 6px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; COLOR: #99210b; MARGIN-RIGHT: 3px; PADDING-TOP: 2px

}

.megas512 SPAN.disabled {

PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; COLOR: #adaaad; MARGIN-RIGHT: 3px; PADDING-TOP: 2px

}

/*CSS technorati style pagination*/

.technorati {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.technorati A {

BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 6px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 6px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px solid; COLOR: rgb(66,97,222); MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid; TEXT-DECORATION: none

}

.technorati A:hover {

BACKGROUND-IMAGE: none; COLOR: #fff; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.technorati A:active {

BACKGROUND-IMAGE: none; COLOR: #fff; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.technorati SPAN.current {

PADDING-RIGHT: 6px; PADDING-LEFT: 6px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; COLOR: #000; MARGIN-RIGHT: 3px; PADDING-TOP: 2px

}

.technorati SPAN.disabled {

DISPLAY: none

}

/*CSS youtube style pagination*/

.youtube {

PADDING-RIGHT: 6px; BORDER-TOP: #9c9a9c 1px dotted; PADDING-LEFT: 0px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; COLOR: #313031; PADDING-TOP: 4px; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-ALIGN: center;

}

.youtube A {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-WEIGHT: bold; PADDING-BOTTOM: 1px; MARGIN: 0px 1px; COLOR: #0030ce; PADDING-TOP: 1px; TEXT-DECORATION: underline

}

.youtube A:hover {

}

.youtube A:active {

}

.youtube SPAN.current {

PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 1px; COLOR: #000; PADDING-TOP: 1px; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.youtube SPAN.disabled {

DISPLAY: none

}

/*CSS msdn style pagination*/

.msdn {

PADDING-RIGHT: 6px; PADDING-LEFT: 0px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; COLOR: #313031; PADDING-TOP: 4px; FONT-FAMILY: Verdana,Tahoma,Arial,Helvetica,Sans-Serif; TEXT-ALIGN: right

}

.msdn A {

BORDER-RIGHT: #b7d8ee 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #b7d8ee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 4px; MARGIN: 0px 3px; BORDER-LEFT: #b7d8ee 1px solid; COLOR: #0030ce; PADDING-TOP: 5px; BORDER-BOTTOM: #b7d8ee 1px solid; TEXT-DECORATION: none

}

.msdn A:hover {

BORDER-RIGHT: #b7d8ee 1px solid; BORDER-TOP: #b7d8ee 1px solid; BORDER-LEFT: #b7d8ee 1px solid; COLOR: #0066a7; BORDER-BOTTOM: #b7d8ee 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.pagination A:active {

BORDER-RIGHT: #b7d8ee 1px solid; BORDER-TOP: #b7d8ee 1px solid; BORDER-LEFT: #b7d8ee 1px solid; COLOR: #0066a7; BORDER-BOTTOM: #b7d8ee 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.msdn SPAN.current {

BORDER-RIGHT: #b7d8ee 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #b7d8ee 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 4px; MARGIN: 0px 3px; BORDER-LEFT: #b7d8ee 1px solid; COLOR: #444444; PADDING-TOP: 5px; BORDER-BOTTOM: #b7d8ee 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.msdn SPAN.disabled {

DISPLAY: none

}

/*CSS badoo style pagination*/

.badoo {

PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 13px; PADDING-BOTTOM: 10px; COLOR: #48b9ef; PADDING-TOP: 10px; FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-ALIGN: center

}

.badoo A {

BORDER-RIGHT: #f0f0f0 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f0f0f0 2px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 0px 2px; BORDER-LEFT: #f0f0f0 2px solid; COLOR: #48b9ef; PADDING-TOP: 2px; BORDER-BOTTOM: #f0f0f0 2px solid; TEXT-DECORATION: none

}

.badoo A:hover {

BORDER-RIGHT: #ff5a00 2px solid; BORDER-TOP: #ff5a00 2px solid; BORDER-LEFT: #ff5a00 2px solid; COLOR: #ff5a00; BORDER-BOTTOM: #ff5a00 2px solid

}

.badoo A:active {

BORDER-RIGHT: #ff5a00 2px solid; BORDER-TOP: #ff5a00 2px solid; BORDER-LEFT: #ff5a00 2px solid; COLOR: #ff5a00; BORDER-BOTTOM: #ff5a00 2px solid

}

.badoo SPAN.current {

BORDER-RIGHT: #ff5a00 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ff5a00 2px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #ff5a00 2px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #ff5a00 2px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.badoo SPAN.disabled {

DISPLAY: none

}

/*CSS manu style pagination*/

.manu {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.manu A {

BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #036cb4; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid; TEXT-DECORATION: none

}

.manu A:hover {

BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: #999 1px solid; COLOR: #666; BORDER-BOTTOM: #999 1px solid

}

.manu A:active {

BORDER-RIGHT: #999 1px solid; BORDER-TOP: #999 1px solid; BORDER-LEFT: #999 1px solid; COLOR: #666; BORDER-BOTTOM: #999 1px solid

}

.manu .current {

BORDER-RIGHT: #036cb4 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #036cb4 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #036cb4 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #036cb4 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.manu .disabled {

BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid

}

/*CSS green-black style pagination*/

.green-black {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center

}

.green-black A {

BORDER-RIGHT: #2c2c2c 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #2c2c2c 1px solid; PADDING-LEFT: 5px; BACKGROUND: url(image1.gif) #2c2c2c; PADDING-BOTTOM: 2px; BORDER-LEFT: #2c2c2c 1px solid; COLOR: #fff; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #2c2c2c 1px solid; TEXT-DECORATION: none

}

.green-black A:hover {

BORDER-RIGHT: #aad83e 1px solid; BORDER-TOP: #aad83e 1px solid; BACKGROUND: url(image2.gif) #aad83e; BORDER-LEFT: #aad83e 1px solid; COLOR: #fff; BORDER-BOTTOM: #aad83e 1px solid

}

.green-black A:active {

BORDER-RIGHT: #aad83e 1px solid; BORDER-TOP: #aad83e 1px solid; BACKGROUND: url(image2.gif) #aad83e; BORDER-LEFT: #aad83e 1px solid; COLOR: #fff; BORDER-BOTTOM: #aad83e 1px solid

}

.green-black SPAN.current {

BORDER-RIGHT: #aad83e 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aad83e 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; BACKGROUND: url(image2.gif) #aad83e; PADDING-BOTTOM: 2px; BORDER-LEFT: #aad83e 1px solid; COLOR: #fff; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #aad83e 1px solid

}

.green-black SPAN.disabled {

BORDER-RIGHT: #f3f3f3 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f3f3f3 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #f3f3f3 1px solid; COLOR: #ccc; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #f3f3f3 1px solid

}

/*CSS viciao style pagination*/

.viciao {

MARGIN-TOP: 20px; MARGIN-BOTTOM: 10px

}

.viciao A {

BORDER-RIGHT: #8db5d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #8db5d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #8db5d7 1px solid; COLOR: #000; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #8db5d7 1px solid; TEXT-DECORATION: none

}

.viciao A:hover {

BORDER-RIGHT: red 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: red 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: red 1px solid; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: red 1px solid

}

.viciao A:active {

BORDER-RIGHT: red 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: red 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: red 1px solid; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: red 1px solid

}

.viciao SPAN.current {

BORDER-RIGHT: #e89954 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #e89954 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; BORDER-LEFT: #e89954 1px solid; COLOR: #000; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #e89954 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.viciao SPAN.disabled {

BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px solid; COLOR: #ccc; MARGIN-RIGHT: 2px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid

}

/*CSS yahoo2 style pagination*/

.yahoo2 {

PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 0.85em; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; FONT-FAMILY: Tahoma,Helvetica,sans-serif; TEXT-ALIGN: center

}

.yahoo2 A {

BORDER-RIGHT: #ccdbe4 1px solid; PADDING-RIGHT: 8px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #ccdbe4 1px solid; PADDING-LEFT: 8px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccdbe4 1px solid; COLOR: #0061de; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccdbe4 1px solid; TEXT-DECORATION: none

}

.yahoo2 A:hover {

BORDER-RIGHT: #2b55af 1px solid; BORDER-TOP: #2b55af 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #2b55af 1px solid; COLOR: #fff; BORDER-BOTTOM: #2b55af 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.yahoo2 A:active {

BORDER-RIGHT: #2b55af 1px solid; BORDER-TOP: #2b55af 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #2b55af 1px solid; COLOR: #fff; BORDER-BOTTOM: #2b55af 1px solid; mso-para-margin-bottom:0.0000gd;text-align:left;">}

.yahoo2 SPAN.current {

PADDING-RIGHT: 6px; PADDING-LEFT: 6px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; COLOR: #000; MARGIN-RIGHT: 3px; PADDING-TOP: 2px

}

.yahoo2 SPAN.disabled {

DISPLAY: none

}

.yahoo2 A.next {

BORDER-RIGHT: #ccdbe4 2px solid; BORDER-TOP: #ccdbe4 2px solid; MARGIN: 0px 0px 0px 10px; BORDER-LEFT: #ccdbe4 2px solid; BORDER-BOTTOM: #ccdbe4 2px solid

}

.yahoo2 A.next:hover {

BORDER-RIGHT: #2b55af 2px solid; BORDER-TOP: #2b55af 2px solid; BORDER-LEFT: #2b55af 2px solid; BORDER-BOTTOM: #2b55af 2px solid

}

.yahoo2 A.prev {

BORDER-RIGHT: #ccdbe4 2px solid; BORDER-TOP: #ccdbe4 2px solid; MARGIN: 0px 10px 0px 0px; BORDER-LEFT: #ccdbe4 2px solid; BORDER-BOTTOM: #ccdbe4 2px solid

}

.yahoo2 A.prev:hover {

BORDER-RIGHT: #2b55af 2px solid; BORDER-TOP: #2b55af 2px solid; BORDER-LEFT: #2b55af 2px solid; BORDER-BOTTOM: #2b55af 2px solid

}

添加文章实体类

package org.crdit.bean;

public class Article {

private String articleId;

private String title;

private String content;

public String getArticleId() {

return articleId;

}

public void setArticleId(String articleId) {

this.articleId = articleId;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

}

文章列表

listArticle.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!-- 引入c标签 -->

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!-- 引入分页标签 -->

<%@ taglib prefix="crd" uri="myPager-tag"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<!-- 引入分页样式 -->

<link rel=stylesheet type=text/css href="${pageContext.request.contextPath}/css/pager.css"/>

</head>

<body>

<center>

<h2>文章列表</h2>

<form action="${pageContext.request.contextPath}/listArticle.action" method="post">

请输入查询关键字:

<input type="text" name="keyword" value="${keyword}"/>

<input type="submit" value="检索"/>

<input type="button" value="跳转至添加文章页面" onclick="window.location = '${pageContext.request.contextPath}/addArticle.jsp'"/>

</form>

<c:choose>

<c:when test="${empty articles}">

未找到您想查询的记录!

</c:when>

<c:otherwise>

<table border="1" style="width:100%;height:100%;">

<tr>

<td width="20%">文章ID</td>

<td width="20%">标题</td>

<td width="50%">内容</td>

<td width="10%">操作</td>

</tr>

<c:forEach items="${articles}" var="article">

<tr>

<td>${article.articleId}</td>

<td>${article.title}</td>

<td>${article.content}</td>

<td>

<a href="${pageContext.request.contextPath}/deleteArticle.action?articleId=${article.articleId}">

删除

</a>

<a href="${pageContext.request.contextPath}/showUpdateArticle.action?articleId=${article.articleId}">

更新

</a>

</td>

</tr>

</c:forEach>

</table>

<!--

crd:标签前缀

pager:标签名字,在tld文件中指定

pageIndex(当前页码)、totalNum(总记录数)、pageSize(每页显示的记录)、submitUrl(提交地址)标签属性

-->

<crd:pager pageIndex="${pageIndex}"  totalNum="${totalNum}" pageSize="2"  submitUrl="listArticle.action?pageIndex={0}&keyword=${keyword}"  pageStyle="yellow">

</crd:pager>

</c:otherwise>

</c:choose>

</center>

</body>

</html>

ListServlet.java

package org.crdit.action;

import java.io.IOException;

import java.nio.file.Paths;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.index.DirectoryReader;

import org.apache.lucene.index.IndexReader;

import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;

import org.apache.lucene.queryparser.classic.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TopDocs;

import org.apache.lucene.search.highlight.Formatter;

import org.apache.lucene.search.highlight.Fragmenter;

import org.apache.lucene.search.highlight.Highlighter;

import org.apache.lucene.search.highlight.QueryScorer;

import org.apache.lucene.search.highlight.Scorer;

import org.apache.lucene.search.highlight.SimpleFragmenter;

import org.apache.lucene.search.highlight.SimpleHTMLFormatter;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.crdit.bean.Article;

/**

* Servlet implementation class ListServlet

* 文章信息分页查询,并且达到高亮显示

*/

@WebServlet("/listArticle.action")

public class ListServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public ListServlet() {

super();

// TODO Auto-generated constructor stub

}

@Override

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {

//通过request设置请求编码信息,防止中文乱码

request.setCharacterEncoding("utf-8");

//获取用户输入的关键字

String keyword=request.getParameter("keyword");

request.setAttribute("keyword",keyword);

String pageIndex=request.getParameter("pageIndex");

if(pageIndex==null || pageIndex.equals("")){

pageIndex="1";

}

request.setAttribute("pageIndex", pageIndex);

int pageSize=2;

//指定索引所在目录

Directory directory=FSDirectory.open(Paths.get("E:\\Lucene\\Lucene_db\\artical_tb"));

//DirectoryReader的open方法指定需要读取的索引库信息,并返回相应的实例

IndexReader indexReader=DirectoryReader.open(directory);

//创建IndexSearcher实例,通过IndexSearcher实例进行全文检索

IndexSearcher   indexSearcher = new IndexSearcher(indexReader);

//词库分词   需要导jar包   lucene-analyzers-smartcn.jar

Analyzer analyzer = new SmartChineseAnalyzer();

//创建QueryParser实例 通过MultiFieldQueryParser可以指定需要查询的多个字段以及分词器信息

QueryParser queryParser=new MultiFieldQueryParser((keyword==null||keyword.equals(""))?new String[]{"allArticle"}:new String[]{"title","content"}, analyzer);

//通过queryParser实例得到query实例,并指定查询的关键字

Query query =queryParser.parse((keyword==null||keyword.equals(""))?"@allArticle":keyword);

//通过格式器指定咋样对关键字进行处理

Formatter formatter=new SimpleHTMLFormatter("<font color='red'>", "</font>");

//通过Scorer包装query

Scorer fragmentScorer=new QueryScorer(query);

//创建高亮器

Highlighter highlighter=new Highlighter(formatter, fragmentScorer);

//创建格式化片段

Fragmenter fragmenter=new SimpleFragmenter(10);

//将格式化片段实例与高亮器关联,最终通过高亮器对文本信息进行处理

highlighter.setTextFragmenter(fragmenter);

/*通过indexSearch进行检索,并指定两个参数

*第一个参数:封装查询的相关信息,比如查询的关键字、分词器,是否需要分词,或者需要分词的话,采取什么分词器

*第二个参数:最多只要多少条记录

*

*查询数据,最终都封装在TopDocs的实例中

*/

TopDocs topDocs=indexSearcher.search(query, 100);

//通过topDocs获取匹配全部记录

ScoreDoc[] scoreDocs=topDocs.scoreDocs;

//将总记录数存放在request中,便于页面中实现分页

int totalNum=scoreDocs.length;

request.setAttribute("totalNum", totalNum);

//定义查询的起始记录号以及结束的记录号

int startSize=(Integer.valueOf(pageIndex)-1)*pageSize;

int endSize=Integer.valueOf(pageIndex)*pageSize>scoreDocs.length?scoreDocs.length:Integer.valueOf(pageIndex)*pageSize;

//创建集合用于存储所有的文章信息

List<Article>  articles= new ArrayList<>();

for (int i = startSize; i < endSize; i++) {

//获取记录的id

int id=scoreDocs[i].doc;

//获取文章得分

float score=scoreDocs[i].score;

Document document=indexSearcher.doc(id);

String articleId= document.get("articleId");

String title= document.get("title");

String content= document.get("content");

String postTitle=highlighter.getBestFragment(analyzer, "title", title);

String postContent=highlighter.getBestFragment(analyzer, "content", content);

//创建Article 对象封装文章相关信息,

Article article=new Article();

article.setArticleId(articleId);

article.setTitle(postTitle==null?title:postTitle);

article.setContent(postContent==null?content.length()<=20?content:content.substring(0,20)+"...":postContent);

//将文章实例存放到集合中

articles.add(article);

}

//将集合存放到request中

request.setAttribute("articles", articles);

} catch (Exception e) {

e.printStackTrace();

}

//跳转至列表页面

request.getRequestDispatcher("/listArticle.jsp").forward(request, response);

}

}

更新文章

ShowUpdateServlet.java

package org.crdit.action;

import java.io.IOException;

import java.nio.file.Paths;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.index.DirectoryReader;

import org.apache.lucene.index.IndexReader;

import org.apache.lucene.index.Term;

import org.apache.lucene.queryparser.classic.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TermQuery;

import org.apache.lucene.search.TopDocs;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.crdit.bean.Article;

/**

* Servlet implementation class UpdateServlet

* 跳转至更新文章页面

*/

@WebServlet("/showUpdateArticle.action")

public class ShowUpdateServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public ShowUpdateServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)

*/

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

//获取文字id

String articleId=request.getParameter("articleId");

//指定索引所在目录

Directory directory=FSDirectory.open(Paths.get("E:\\Lucene\\Lucene_db\\artical_tb"));

//DirectoryReader的open方法指定需要读取的索引库信息,并返回相应的实例

IndexReader indexReader=DirectoryReader.open(directory);

//创建IndexSearcher实例,通过IndexSearcher实例进行全文检索

IndexSearcher   indexSearcher = new IndexSearcher(indexReader);

TermQuery query=new TermQuery(new Term("articleId",articleId));

/*通过indexSearch进行检索,并指定两个参数

*第一个参数:封装查询的相关信息,比如查询的关键字、分词器,是否需要分词,或者需要分词的话,采取什么分词器

*第二个参数:最多只要多少条记录

*

*查询数据,最终都封装在TopDocs的实例中

*/

TopDocs topDocs=indexSearcher.search(query, 1);

//通过topDocs获取匹配全部记录

ScoreDoc[] scoreDocs=topDocs.scoreDocs;

ScoreDoc scoreDoc=scoreDocs[0];

//获取记录的id

int id=scoreDoc.doc;

//获取文章得分

float score=scoreDoc.score;

Document document=indexSearcher.doc(id);

String title= document.get("title");

String content= document.get("content");

//创建Article实例,封装文章相关信息

Article article=new Article();

article.setArticleId(articleId);

article.setTitle(title);

article.setContent(content);

request.setAttribute("article", article);

//跳转至更新文章页面

request.getRequestDispatcher("/updateArticle.jsp").forward(request, response);;

}

}

updateArticle.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>更新文章</title>

</head>

<body>

<center>

<h2>更新文章</h2>

<form action="${pageContext.request.contextPath}/updateArticle.action" method="post">

<input type="hidden" name="articleId" value="${article.articleId}">

<table>

<tr>

<td>文章标题</td>

<td>

<input type="text" name="title" value="${article.title}"/>

</td>

</tr>

<tr>

<td>文章内容</td>

<td>

<textarea rows="20" cols="20" name="content" >

${article.content}

</textarea>

</td>

</tr>

<tr>

<td><input type="submit" value="更新"></td>

<td>

<input type="button" value="跳转至列表页面" onclick="window.location = '${pageContext.request.contextPath}/listArticle.jsp'">

</td>

</tr>

</table>

</form>

</center>

</body>

</html>

UpdateServlet.java

package org.crdit.action;

import java.io.IOException;

import java.nio.file.Paths;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.StringField;

import org.apache.lucene.document.TextField;

import org.apache.lucene.document.Field.Store;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.IndexWriterConfig;

import org.apache.lucene.index.Term;

import org.apache.lucene.index.IndexWriterConfig.OpenMode;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

/**

* Servlet implementation class UpdateServlet

* 更新文章

*/

@WebServlet("/updateArticle.action")

public class UpdateServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public UpdateServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)

*/

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {

//设置编码,以防中文乱码

request.setCharacterEncoding("utf-8");

//获取文章信息(id title content)

String articleId=request.getParameter("articleId");

String title=request.getParameter("title");

String content=request.getParameter("content");

//指定索引所在目录

Directory directory=FSDirectory.open(Paths.get("E:\\Lucene\\Lucene_db\\artical_tb"));

//词库分词   需要导jar包   lucene-analyzers-smartcn.jar

Analyzer analyzer = new SmartChineseAnalyzer();

//创建IndexWriterConfig实例  指定添加索引的配置信息

IndexWriterConfig config=new IndexWriterConfig(analyzer);

//如果索引不存在,则创建。存在,则追加。

config.setOpenMode(OpenMode.CREATE_OR_APPEND);

//创建IndexWriter

IndexWriter indexWriter=new IndexWriter(directory, config);

//往索引库中添加记录  Lucene中一个document实例代表数据表中的一条记录

Document document=new Document();

/*

*StringFiled:不会对关键字进行分词

*TextFiled:会对关键字进行分词

*

* Store.YES:会将数据进行存储并分词

* Store.NO:不会将数据进行存储,不会分词,索引还是会创建。有索引,没有内容。

*/

document.add(new StringField("articleId", articleId, Store.YES));

document.add(new TextField("title", title, Store.YES));

document.add(new TextField("content", content, Store.YES));

document.add(new TextField("allArticle", "@allArticle", Store.YES));

//更新的原理:先删除之前的索引,再创建新的索引====删除与添加两个动作的合集

indexWriter.updateDocument(new Term("articleId",articleId), document);

//提交事务

indexWriter.commit();

//关闭事务

indexWriter.close();

System.out.println("更新成功");

} catch (Exception e) {

e.printStackTrace();

}

//跳转至列表页面

request.getRequestDispatcher("/listArticle.jsp").forward(request, response);

}

}

删除文章

DeleteServlet.java

package org.crdit.action;

import java.io.IOException;

import java.nio.file.Paths;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.IndexWriterConfig;

import org.apache.lucene.index.Term;

import org.apache.lucene.index.IndexWriterConfig.OpenMode;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

/**

* Servlet implementation class DeleteServlet

*/

@WebServlet("/deleteArticle.action")

public class DeleteServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public DeleteServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)

*/

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try {

//获取articleId

String articleId=request.getParameter("articleId");

//指定索引所在目录

Directory directory=FSDirectory.open(Paths.get("E:\\Lucene\\Lucene_db\\artical_tb"));

//词库分词   需要导jar包   lucene-analyzers-smartcn.jar

Analyzer analyzer = new SmartChineseAnalyzer();

//创建IndexWriterConfig实例  指定添加索引的配置信息

IndexWriterConfig config=new IndexWriterConfig(analyzer);

//如果索引不存在,则创建。存在,则追加。

config.setOpenMode(OpenMode.CREATE_OR_APPEND);

//创建IndexWriter

IndexWriter indexWriter=new IndexWriter(directory, config);

//删除索引库中指定的索引

indexWriter.deleteDocuments(new Term("articleId",articleId));

//删除索引库中全部的索引

//indexWriter.deleteAll();

//提交事务

indexWriter.commit();

//关闭事务

indexWriter.close();

System.out.println("删除成功");

} catch (Exception e) {

e.printStackTrace();

}

//跳转至添加文章页面

request.getRequestDispatcher("/listArticle.jsp").forward(request, response);;

}

}

项目地址:Lucene\code\03

Lucene实战的更多相关文章

  1. Lucene实战(第2版)》

    <Lucene实战(第2版)>基于Apache的Lucene 3.0,从Lucene核心.Lucene应用.案例分析3个方面详细系统地介绍了Lucene,包括认识Lucene.建立索引.为 ...

  2. 3.2 Lucene实战:一个简单的小程序

    在讲解Lucene索引和检索的原理之前,我们先来实战Lucene:一个简单的小程序! 一.索引小程序 首先,new一个java project,名字叫做LuceneIndex. 然后,在project ...

  3. Lucene实战构建索引

    搭建lucene的步骤这里就不详细介绍了,无外乎就是下载相关jar包,在eclipse中新建java工程,引入相关的jar包即可 本文主要在没有剖析lucene的源码之前实战一下,通过实战来促进研究 ...

  4. 《Lucene实战(第2版)》 配书代码在IDEA下的编译方法

    参考: hankcs http://www.hankcs.com/program/java/lucene-combat-2nd-edition-book-with-code-compiled-unde ...

  5. lucene实战(第二版)学习笔记

    初识Lucene 构建索引 为应用程序添加搜索功能 Lucene的分析过程

  6. Lucene实战之初体验

    前言 最早做非结构化数据搜索时用的还是lucene.net,一直说在学习java的同时把lucene这块搞一搞,这拖了2年多了,终于开始搞这块了. 开发环境 idea2016.lucene6.0.jd ...

  7. lucene实战--打分算法没有那么难!

    作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了L ...

  8. Lucene实战之基于StandardAnalyzer读写索引

    前言 使用lucene创建索引时如果指定了解析器,则需要读写都使用这个解析器,目前我发现也就是在处理中文这块比较麻烦,像你在使用solr时如果配置了ik分词,则需要把index清空重新创建才能继续搜索 ...

  9. Lucene实战之关键字匹配多个字段

    前言 当我们输入关键字时希望可以支持筛选多个字段,这样搜索内容的覆盖率就会大一些. 匹配多个字段主要用 MultiFieldQueryParser类. 单一字段搜索 QueryParser parse ...

随机推荐

  1. 上下文ac获取为null,SpringContextUtil配置位置,以及各配置xml的加载顺序有讲究

    发现一个有趣的现象,一般job都会在执行前去初始化一次ac,而任务监视器SupervisorQueueJob不会,因此启动时初始化ac为null,SupervisorQueueJob会始终无法获取上下 ...

  2. java控制某个字段当天递增

    ①思路 1.获取当前时间年月日 如:2018-01-15 00:00:00 2018-01-15 24:00:00 2.查询表中对应日期字段是否在当天时间段内 3.若是在,则从0开始递增 4.若是不在 ...

  3. agc001E - BBQ Hard(dp 组合数)

    题意 题目链接 Sol 非常妙的一道题目. 首先,我们可以把\(C_{a_i + b_i + a_j + b_j}^{a_i + a_j}\)看做从\((-a_i, -b_i)\)走到\((a_j, ...

  4. LOJ#137. 最小瓶颈路 加强版(Kruskal重构树 rmq求LCA)

    题意 三倍经验哇咔咔 #137. 最小瓶颈路 加强版 #6021. 「from CommonAnts」寻找 LCR #136. 最小瓶颈路 Sol 首先可以证明,两点之间边权最大值最小的路径一定是在最 ...

  5. npm下载某个版本

    如果我想要引入的是Jquery的1.7.2版本,则输入npm intall jquery@1.7.2,那么npm包管理器就会帮助你下载jquery1.7.2的版本到你当前操作目录下的node_modu ...

  6. 安装BI Publisher Desktop报错:“Template Builder Installer Failed:Unexpected Error”

    原因:office的版本未安装正确,应该安装X86版本的,如果是X64的会出现,重新安装X86版本的office后解决问题.

  7. Android GreenDao清空数据库的方法

    最近在做项目的时候,为了方便测试人员测试,在应用中加入正式库和测试库切换的功能.为了防止正式库和测试库切换带来的数据冲突,切换的时候必须把当前的数据库清空.代码如下: package com.exam ...

  8. SQL Union和Union All使用方法

    格式: [SQL 语句 1]UNION [SQL 语句 2] 对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: select ID,NAME from A UNION select I ...

  9. android studio gradle统一管理版本

    创建config.gradle ext { android = [ compileSdkVersion : 26, buildToolsVersion : "26.0.2", mi ...

  10. seleenium与Vs结合

    Vs 自带自动化测试录制工具.selenium则是开源的大众工具.在使用发现vs 自带的工具录制方便,但是修改很难.但是可以提供后续的BUG管理和邮件通知,自动构建等功能.selenium在.net平 ...