2017-09-01 136 views
0

我最近使用restlet.org框架在Eclipse中创建一个简单的servlet部署web服务(使用Tomcat),我可以在浏览器中显示文本文本。我还用简单的表单创建了一个JSP(input.jsp):一个文本框和一个按钮。当用户输入一个单词并单击按钮时,应打开第二个JSP(result.jsp),仅显示包含该单词的文本文件的短语。JSP客户端测试Servlet部署的RESTful web服务

我想建立一个测试客户端使用这些JSP测试我的web服务,但我真的不知道如何去做这件事。这两个JPS目前都位于我项目的/ WEB-INF文件夹中,但如果我尝试在我的服务器上运行第一个JSP,会弹出一个错误消息:“服务器未找到与请求URI匹配的任何内容”。简单地导航到下面的QuotesApplication类中定义的URI是完全正常的。

应用类:

package edu.ap.rest; 

import org.restlet.Application; 
import org.restlet.Restlet; 
import org.restlet.routing.Router; 

public class QuotesApplication extends Application { 

    /** 
    * Creates a root Restlet that will receive all incoming calls. 
    */ 
    @Override 
    public synchronized Restlet createInboundRoot() { 

     Router router = new Router(getContext()); 

     router.attach("/quotes", QuotesResource.class); 
     router.attach("/quotes/{searchTerm}", QuotesSearchResource.class); 
     return router; 
    } 
} 

资源1​​:

package edu.ap.rest; 

import org.restlet.resource.Get; 
import org.restlet.resource.Post; 
import org.restlet.resource.ServerResource; 

import edu.ap.txt.TXTParser; 

public class QuotesResource extends ServerResource { 

    @Get("html") 
    public String getQuotes() { 
     TXTParser parser = new TXTParser(); 
     return parser.getQuotes(); 
    } 

} 

资源2:

package edu.ap.rest; 

import org.restlet.resource.Get; 
import org.restlet.resource.Post; 
import org.restlet.resource.ServerResource; 

import edu.ap.txt.TXTParser; 

public class QuotesSearchResource extends ServerResource { 

    @Get("html") 
    public String getSearchQuotes(String searchTerm) { 
     searchTerm = getAttribute("searchTerm"); 
     TXTParser parser = new TXTParser(); 
     return parser.getSearchQuotes(searchTerm); 
    } 
} 

Web.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
      xmlns="http://java.sun.com/xml/ns/j2ee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
       http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>first steps servlet</display-name> 

    <!-- Application class name --> 
    <context-param> 
    <param-name>org.restlet.application</param-name> 
    <param-value> 
     edu.ap.rest.QuotesApplication 
    </param-value> 
    </context-param> 

    <!-- Restlet adapter --> 
    <servlet> 
     <servlet-name>RestletServlet</servlet-name> 
     <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class> 
    </servlet> 

    <!-- Catch all requests --> 
    <servlet-mapping> 
     <servlet-name>RestletServlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

输入JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
 
    pageEncoding="UTF-8"%> 
 
<!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=UTF-8"> 
 
<title>Zoek een quote</title> 
 
</head> 
 
<body> 
 

 
    <form method="POST" action="Result.jsp"> 
 
    Zoekterm: <input type="text" name="searchTerm"><br/> 
 
    <br/><br/> 
 
    <input type="submit" value="Submit"> 
 
    </form> 
 

 
</body> 
 
</html>

的Result.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
 
\t pageEncoding="UTF-8"%> 
 
<%@page import="edu.ap.rest.*"%> 
 
<!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=UTF-8"> 
 
<title>Resultaat</title> 
 
</head> 
 

 
<% 
 
\t QuotesSearchResource resource = new QuotesSearchResource(); 
 
\t String searchTerm = ("searchTerm"); 
 
\t System.out.println("Test: " + searchTerm); 
 
\t String Result = resource.getSearchQuotes(searchTerm); 
 
%> 
 
<body> 
 
<%= Result %> 
 
</body> 
 
</html>

回答

1

JSP是一个servlet太。 你错过这样的部分:

<servlet> 
    <servlet-name>QuoteInputServlet</servlet-name> 
    <jsp-file>/Input.jsp</jsp-file> 
</servlet> 

<servlet-mapping> 
    <servlet-name>QuoteInputServlet</servlet-name> 
    <url-pattern>/input</url-pattern> 
</servlet-mapping> 
+0

好吧,我加了这一点,它正确地显示了JSP在浏览器中。但是,当我在文本框中键入单词并按下按钮时,它不会重定向到我的表单(Result.jsp)的action属性中指定的URL。相反,出现以下错误: org.restlet.resource.ResourceException:Not Found(404) - 服务器未找到与请求URI匹配的任何内容。我还为我的第二个JSP(QuoteResultServlet)添加了servlet和servlet映射。我不明白为什么服务器没有找到这个JSP。 – RobVH

+0

来吧,这太明显了:以同样的方式声明和映射Result.jsp&引用映射的URL,而不是jsp脚本名称 –

+0

是的,这正是我在阅读您对我的文章的初始答案后所做的。我只需要清除我的Tomcat服务器的工作目录。一切都完美了! – RobVH