门户页的搜索 过程
1 ../search_Document_List.do?category=news&keyword='+encodeURIComponent(keyWord)
2 searchNameContext.xml :
<bean name="/search_Document_List.do" class="com.trs.cis4.search.view.controller.Search_Document_List_Controller">
<property name="successView" value="search/search_document_list" />
</bean>
3 Search_Document_List_Controller :
public ModelAndView _handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception, ExceptionUtil {
PageInfo pageInfo = PageData.getRequestParams(request);
Map<String, Object> model = new HashMap<String, Object>();
String category = request.getParameter("category");
if (StringUtil.isNotEmpty(category)) {
model.put("category", category);
}
ShowProperty showProperty = CisFileReader.getSysShowProperty();
String channelid = request.getParameter("channelid");
List<SysChannel> sysChannels = null;
if ("search".equals(category)) {
sysChannels = this.sysChannelLogic.getAllShowChannels(Integer.valueOf(SysConst.PORTAlTYPE_SEARCH));
model.put("sysChannels", sysChannels);
}
model.put("channelid", channelid);
List<SysChannel> channels = this.sysChannelLogic.getChannelsByIds(channelid);
QueryForm queryForm = SearchParamUtil.getQuery(request, showProperty, channels); //keyword 封装在quertForm对象中
queryForm.setChannelids(channelid);
queryForm.setPrefixChar(this.prefixChar.trim());
queryForm.setSuffixChar(this.suffixChar.trim());
if (StringUtil.isEmpty(queryForm.getKeyWordAll())) {
String redirectUrl = request.getParameter("redirectUrl");
if (StringUtil.isNotEmpty(redirectUrl))
return new ModelAndView(redirectUrl, model);
if (StringUtil.isNotEmpty(this.defaultRedirectView)) {
return new ModelAndView(this.defaultRedirectView, model);
}
}
String forbidWords = CisFileReader.getSysForbidWords();
String keyWord = queryForm.getKeyWord();
if ((StringUtil.isNotEmpty(keyWord)) && (forbidWords.indexOf(keyWord.trim()) != -1)) {
pageInfo.setListItems(new ArrayList());
pageInfo.setAllRecords(0);
model.put("pageInfo", pageInfo);
model.put("showProperty", showProperty);
request.getSession().removeAttribute("queryFormSession");
} else {
pageInfo = setCountPerPage(request, pageInfo, showProperty);
String orderby = disposeOrderBy(request, pageInfo, model, showProperty.getIfUseUrllevel());
model.put("orderby", orderby);
pageInfo.setPicSize(1);
long bt2 = System.currentTimeMillis();
String searchCondition = queryForm.getTrsSql();
if (queryForm.getListType() == SysConst.CHANNEL_LISTTYPE_PIC)
pageInfo.setWebShowFields(this.docDocumentLogic.getListPicFieldsVector());
else if (queryForm.getListType() == SysConst.CHANNEL_LISTTYPE_TITLE)
pageInfo.setWebShowFields(this.docDocumentLogic.getListFieldsVector());
else {
pageInfo.setWebShowFields(this.docDocumentLogic.getListBriefFieldsVector());
}
this.log.info("查询条件为:" + searchCondition);
List searchResult = this.docDocumentLogic.search(searchCondition, pageInfo, true);
request.getSession().setAttribute("queryFormSession", queryForm);
long consumeTime = System.currentTimeMillis() - bt2;
this.log.info("检索共耗时:" + consumeTime);
if (searchResult != null) {
List dataList = (List) searchResult.get(1);
pageInfo.setListItems(dataList);
pageInfo.setAllRecords(((Integer) searchResult.get(0)).intValue());
} else {
pageInfo.setListItems(new ArrayList());
pageInfo.setAllRecords(0);
}
if (showProperty.getIfUsingCkm().booleanValue()) {
String[] pinyin = pinyinCheck(keyWord, queryForm, orderby, pageInfo, showProperty);
model.put("pinyin", pinyin);
String[] recomWords = getRelatedPhrases(keyWord); 加载词典demo失败
model.put("recomWords", recomWords);
}
if (queryForm.getListType() != SysConst.CHANNEL_LISTTYPE_PIC) {
disposeSimRelCount(pageInfo);
}
DocUtils.checkPicture(pageInfo.getListItems());
if (showProperty.getIfUsingRdb().booleanValue()) {
String filterKeyWord = queryForm.getKeyWordAll();
filterKeyWord = filterKeyWord(filterKeyWord);
if ((StringUtil.isNotEmpty(filterKeyWord)) && (filterKeyWord.length() < 20)) {
try {
saveOrUpdateKeyWord(filterKeyWord);
} catch (Exception e) {
this.log.info("save keyword exception!", e);
}
}
List spanList = this.docTimeSpanLogic.getShowTimeSpans(showProperty.getTimeSpanNum().intValue());
model.put("spanList", spanList);
getFakeResults(request, pageInfo, model, queryForm, keyWord);
}
PageData.calculationPageParams(pageInfo);
model.put("showProperty", showProperty);
model.put("pageInfo", pageInfo);
model.put("consumeTime", (consumeTime / 1000L) + "." + (consumeTime % 1000L));
model.put("timespan", request.getParameter("timespan"));
model.put("queryForm", queryForm);
searchCondition = searchCondition.replaceAll("\\\\", "\\\\\\\\");
model.put("searchCondition", searchCondition);
}
return new ModelAndView(getSuccessView(), model);
}