Комбинация сервлетов JSP
У меня есть страница JSP с именем SearchBoxNew.jsp, которую я добавил под тегом Welcome-File файла Web.xml.
Эта страница в основном имеет одно поле поиска, в котором, когда я набираю что-то и нажимаю ввод, я вызываю другой сервлет "SolrServlet1.java", это в основном запрашивает некоторое файловое хранилище и добавляет объект ответа в HTTPRequest и перенаправляет в SearchBoxNew.jsp с помощью "dispatcher".forward(запрос, ответ);"
Но, к сожалению, когда я ввожу текст и нажимаю ввод, это говорит мне о статусе HTTP 404 - /SearchBoxcComp/SearchBox.jsp
И URL-адрес выглядит следующим образом http://localhost:8080/SearchBoxcComp/hello, где / hello - это отображение URL-адреса для сервлета.
Вот мой web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SearchBoxcComp</display-name>
<welcome-file-list>
<welcome-file>SearchBoxNew.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>SolrServlet1</servlet-name>
<servlet-class>Servlets.SolrServlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SolrServlet1</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SearchBoxNew</servlet-name>
<jsp-file>/SearchBoxNew.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SearchBoxNew</servlet-name>
<url-pattern>/SearchBoxNew</url-pattern>
</servlet-mapping>
</web-app>
Может кто-нибудь сказать мне, что мне не хватает или как я могу снова попасть на страницу поиска после нажатия Enter?
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import ="org.apache.solr.common.*" %>
<%@ page import = "java.util.*" %>
<%@ page import = "org.apache.solr.client.solrj.response.*" %>
<%@ page import="org.apache.solr.client.solrj.response.FacetField.Count" %>
<%@ page import = "java.util.List" %>
<%@ page import = "com.google.gson.*" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<body>
<h1>Search Component</h1>
<div>
<form id="formsearch" name="formsearch" method="post" action="/SearchBoxcComp/hello">
<span><input name="searchWord" class="editbox_search" id="editbox_search" maxlength="120" value="" type="text" style="width:180px; height:20px"/></span>
<input name="button_search" value="search" type="submit" name="submit"/>
<div class="clr"></div>
<%! public QueryResponse QryRspnsMain; %>
<%
if(request.getParameter("submit") != null){
//String paramValue = request.getAttribute("SearchResult");
//System.out.println(paramValue);
//out.println("<tr><td>" + paramValue + "</td></tr>");
QueryResponse QryRspnsMain = (QueryResponse)request.getAttribute("SearchResult");
Gson gson= new Gson();
SolrDocumentList results = QryRspnsMain.getResults();
// Get the Json Object
//*************String Jresponse= gson.toJson(results);
Iterator<SolrDocument> litr = results.iterator();
String res = gson.toJson(results);
for (int i = 0; i < results.size(); ++i) {
out.print("<li>" + res);
}
}
%>
<%
if(request.getParameter("submit") != null){
QueryResponse QryRspnsMain = (QueryResponse)request.getAttribute("SearchResult");
Gson gson= new Gson();
SolrDocumentList results = QryRspnsMain.getResults();
List<FacetField> facetList = QryRspnsMain.getFacetFields();
Iterator<FacetField> itr = facetList.iterator();
while(itr.hasNext()) {
FacetField facetField = itr.next();
List<Count> facvalue = facetField.getValues();
for(int i=0; i<facvalue.size(); i++){
System.out.println(facvalue.get(i));
out.print("<li><a href= \"/SearchBoxcComp/facetServlet?facetFiled=\"" + facvalue.get(i) + "&catlevel=" + facetField.getName());
}
}
}
%>
</form>
</div>
</body>
</body>
</html>
Servlet:
package Servlets;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;
/**
*
*/
/**
* Servlet implementation class SolrServlet
*/
public class SolrServlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SolrServlet1() {
super();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String searchWord = request.getParameter("searchWord");
RequestDispatcher dispatcher = getServletConfig ( ) .getServletContext ().getRequestDispatcher("/SearchBox.jsp");
//if(searchWord == "" || searchWord == null ){
try {
QueryResponse SearchResult = searchQuery(searchWord);
//String SearchResult = "Avinash Upadhya is Here";
request.setAttribute("SearchResult", SearchResult);
dispatcher.forward(request, response);
} catch (SolrServerException e) {
e.printStackTrace();
}
}
private static QueryResponse searchQuery(String search) throws SolrServerException{
HttpSolrServer server =new HttpSolrServer("http://localhost:8983/solr");
server.setParser(new XMLResponseParser());
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.setFacet(true);
query.setFacetMinCount(1);
query.addFacetField("manu");
query.setStart(0);
//String SolrQuery;
if(search != ""){
query.addFilterQuery("name:" + search + "OR description: " + search);
}
QueryResponse response = server.query(query);
//SolrDocumentList results = response.getResults();
return response;
}
}
1 ответ
Если вы хотите перенаправить элемент управления в свой SearchBoxNew.jsp, то вы должны правильно назвать его в своем методе getRequestDispatcher как
// get dispatcher to jsp
RequestDispatcher dispatcher = getServletConfig()
.getServletContext ()
.getRequestDispatcher("/SearchBoxNew.jsp");
Замените SearchBox.jsp на SearchBoxNew.jsp в методе сервлета, остальные должны работать нормально.