Servlet链接用于语义搜索

时间:2011-08-25 17:10:31

标签: java servlets chaining

我在一个学术语义Web项目中工作,所以我设计并尝试实现一个网站,以便用户可以执行“语义搜索”。我使用Jena包写了两个servlet,我需要这两个servlet链接。

package controlador;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.compObjA.GeraSequenciaBean;
import com.compObjA.model.ConceitosSelecionados;
import com.compObjA.model.ListaConceitos;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.ontology.OntTools.Path;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.util.iterator.Filter;

/**
 * Servlet implementation class GeraSequenciaServlet
 */
public class GeraSequenciaServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public GeraSequenciaServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        OntModel m_model = ModelFactory
                .createOntologyModel(OntModelSpec.OWL_DL_MEM);
        final Filter<Statement> ANY = Filter.any();

        // RDFNode end;
        String c1, c2; // define as variáveis c1 e c1, conceitos inicial e final
        String NS = "http://example.com/test#"; // define a URI

        // dois parametros para definir a lista dos conceitos
        c1 = request.getParameter(ConceitosSelecionados.getConceitoInicial());
        c2 = request.getParameter(ConceitosSelecionados.getConceitoFinal());

        // cria os nós inicial e final do caminho
        Resource start1 = m_model.createResource(NS + c1);
        RDFNode end = m_model.createResource(NS + c2);

        // instancia o gerador de sequencias & gera o caminho
        GeraSequenciaBean geraSequencia = new GeraSequenciaBean();
        Path caminho = geraSequencia
                .generateSequence(m_model, start1, end, ANY);

        // instancia a lista de conceitos e cria uma lista de conceitos a partir
        // do caminho
        ListaConceitos listaConceitos = new ListaConceitos();
        List<String> sugestao = listaConceitos.getListaConceitos(caminho);
        request.setAttribute("sugestao", sugestao);
        // chama o dispatcher e cria o jsp para mostrar a sequencia de conceitos
        RequestDispatcher view = request
                .getRequestDispatcher("SequenciaDosConceitos.jsp");
        // passa para frente.
        view.forward(request, response);
    }
}

package controlador;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.compObjA.model.ConceitosSelecionados;
import com.compObjA.model.SelecionaConceitosForm;

/**
 * Servlet implementation class ControlaSelecaoConceitosUsuario
 */
public class ControlaSelecaoConceitosUsuario extends HttpServlet {
    private static final long serialVersionUID = 1L;

    // Constantes ----------------------

    private static final String VIEW = "selecionaConceitos.jsp";
    private static final String ATTRIBUTE_FORM = "selecionaConceitosForm";
    private static final String ATTRIBUTE_SELECTED = "conceitosSelecionados";

    // Variaveis -----------------------------------------

    private ConceitosSelecionados conceitosSelecionados;

    // Actions --------------------

    public ControlaSelecaoConceitosUsuario() {
        super();
        // TODO Auto-generated constructor stub

    }

    @Override
    public void init() throws ServletException {
        // Obtém o UserDAO do DAOFactory por meio do Config.

    }

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

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        request.getRequestDispatcher(VIEW).forward(request, response);

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    @Override
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        // Prepara o formBean

        SelecionaConceitosForm selecionaConceitosForm = new SelecionaConceitosForm(
                conceitosSelecionados);
        request.setAttribute(ATTRIBUTE_FORM, selecionaConceitosForm);

        // Processa a solicitação e obtém os resultados
        ConceitosSelecionados conceitosSelecionados = selecionaConceitosForm
                .selecaoUsuario(request);
        request.setAttribute(ATTRIBUTE_SELECTED, conceitosSelecionados);

        String destino = "/GeraSequenciaServlet";
        request.getRequestDispatcher(destino).forward(request, response);

    }

}

我有一个例外。有人能给我一个暗示吗?

1 个答案:

答案 0 :(得分:0)

每当你想从servlet内部调用另一个servlet然后返回(!)时,你应该使用RequestDispatcher#include()。你不应该使用RequestDispatcher#forward()

另见: