JSP Servlet 组合

JSP Servlet Combination

我有一个名为 SearchBoxNew.jsp 的 JSP 页面,我将其添加到 Web.xml

的欢迎文件标签下

这个页面基本上有一个搜索框,当我在其中输入内容并按下回车键时,我将调用另一个 Servlet "SolrServlet1.java",这基本上查询一些文件存储并将响应对象添加到 HTTPRequest 并重定向到 SearchBoxNew.jsp 使用 "dispatcher.forward(request, response);"

但不幸的是,当我输入文本并按回车键时,它告诉我 HTTP 状态 404 - /SearchBoxcComp/SearchBox.jsp

而 URL 就像这样 http://localhost:8080/SearchBoxcComp/hello 其中 /hello 是 servlet 的 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>

谁能告诉我我遗漏了什么,或者我怎样才能在按回车键后再次进入搜索页面?

<%@ 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;

    }

}

如果您想将控件转发给您的 SearchBoxNew.jsp,那么您应该在 getRequestDispatcher 方法中将其正确命名为

// get dispatcher to jsp
RequestDispatcher dispatcher = getServletConfig()
                .getServletContext ()
                .getRequestDispatcher("/SearchBoxNew.jsp");

将servlet方法中的SearchBox.jsp替换为SearchBoxNew.jsp,其余的应该没问题。