现在的位置: 首页 > 综合 > 正文

拿起笔来做刀枪 · 之七 最终幻想 Final Fantasy

2014年11月22日 ⁄ 综合 ⁄ 共 3843字 ⁄ 字号 评论关闭

好了 现在开始我们最后的工作,实现最开始的两个DAO。

package cn.com.sitefromscrath.dao;

import net.csdn.blog.deltatang.lucene4me.LuceneTool;

public class LuceneDAOImpl implements LuceneDAO {
	
	private LuceneTool luceneTool;

	public LuceneDAOImpl(LuceneTool luceneTool) {
		super();
		this.luceneTool = luceneTool;
	}

	@SuppressWarnings("static-access")
	@Override
	public int[] findDocIDs(String keywords) {		
		return luceneTool.findDocIDs(keywords);
	}

}

package cn.com.sitefromscrath.dao;

import java.util.ArrayList;
import java.util.List;

import net.csdn.blog.deltatang.hibernate4me.Document;
import net.csdn.blog.deltatang.hibernate4me.SqlEngine;
import net.csdn.blog.deltatang.hibernate4me.SqliteDB;

public class MysqlDAOImpl implements MysqlDAO {
	
	private SqliteDB sqlEngine;

	public MysqlDAOImpl(SqliteDB sqlEngine) {
		super();
		this.sqlEngine = sqlEngine;
                sqlEngine.test();   //作为数据库初始化 当然 这样 big MUD BALL~~~! 
        }

	@Override
	public List<Document> getResultsByDocIDs(int[] idlist) {
		
		List<Document> result = new ArrayList<Document>(idlist.length);
		
		Class clazz = Document.class;
		
		for(int id : idlist) {
			result.add((Document)sqlEngine.load(id, clazz));
		}
		
		return result;
	}

}

在我们的xml中装配他们:

<beans >

	<bean id="searchService" class="cn.com.sitefromscrath.service.SearchServiceInRealBiz">
		<constructor-arg index="1" ref="luceneDAO" />
		<constructor-arg index="2" ref="mysqlDAO" />
	</bean>
	
	<bean id="luceneDAO" class="cn.com.sitefromscrath.dao.LuceneDAOImpl" >
		<constructor-arg index="1" ref="luceneTool" />
	</bean>
		
	<bean id="mysqlDAO" class="cn.com.sitefromscrath.dao.MysqlDAOImpl" >
		<constructor-arg index="1" ref="sqlEngine" />
	</bean>
	
	<bean id="luceneTool" class="net.csdn.blog.deltatang.lucene4me.LuceneTool" />
	
	<bean id="sqlEngine" class="net.csdn.blog.deltatang.hibernate4me.SqliteDB" />
	
	<bean id="/mvc/search" view="/net/csdn/blog/deltatang/mvc4me/search.template.jsp" class="net.csdn.blog.deltatang.mvc4me.SearchCtrol"/>

</beans>

DADADA。。。似乎万事大吉了:)

tomcat跑一把试试。。。问题粗线了。首先是乱码问题:

加上一个过滤器:

package net.csdn.blog.deltatang.mvc4me;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

	protected String encoding = null;

	protected FilterConfig filterConfig = null;

	public void destroy() {

		this.encoding = null;
		this.filterConfig = null;

	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
		String encoding = selectEncoding(request);
		
		request.setCharacterEncoding(encoding);
		response.setCharacterEncoding(encoding);
		
		chain.doFilter(request, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {

		this.filterConfig = filterConfig;
		this.encoding = filterConfig.getInitParameter("encoding");
	}

	protected String selectEncoding(ServletRequest request) {
		String enc = this.encoding == null ? null : this.encoding.trim();
		return enc == null ? "utf-8" : enc;
	}
}

对应的xml配置:

	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>net.csdn.blog.deltatang.mvc4me.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

其次是修改

StringToObjectBuilder

中的写入文件方法。还记得吗,我们自己实现了jsp,但是并没有支持:

<%@ page pageEncoding="UTF-8"%>

标签哦:)

所以我们要确保编译输出的文件也是utf-8格式:

	public Object build(String source, String classPath, ClassLoader classLoader) {
		
//替换这里			
//			new FileWriter(sourceFile).append(source).close();
			
            OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(sourceFile), "UTF-8");
            out.write(source);
            out.flush();
            out.close();

继续RUN。问题又来了:

Unable to load sqlite_jni: java.lang.UnsatisfiedLinkError: no sqlite_jni in java.library.path
java.sql.SQLException: java.lang.UnsatisfiedLinkError: internal_init

原因是:sqlite_jni.dll文件没有拷到 java.library.path中;简单的做法是:把这个文件copy到tomcat的bin目录下。

OK,在尝试一下:

搞定~~~~!

这个系列就此告一段落。

完整代码下载看这里:
下载地址 http://download.csdn.net/detail/deltatang/7717065

【上篇】
【下篇】

抱歉!评论已关闭.