gpt4 book ai didi

java - 如何使用 jython 从 pyservlet 的 url 中删除 .py

转载 作者:行者123 更新时间:2023-11-30 07:35:20 25 4
gpt4 key购买 nike

我正在查看 jython servlet 教程,一切正常。我如何使 url 成为

本地主机:8080/jythondemo/JythonServlet1

代替

localhost:8080/jythondemo/JythonServlet1.py

http://seanmcgrath.blogspot.com/JythonWebAppTutorialPart1.html

这是来自 web.xml 的相关部分

<web-app>      
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>ServletTest</servlet-class>
</servlet>
<servlet>
<servlet-name>PyServlet</servlet-name>
<servlet-class>org.python.util.PyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/ServletTest</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>PyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

我也试过

<servlet-mapping>
<servlet-name>PyServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

经过上述更改,pyservlet 似乎正在获取 url JythonServlet1,但它不知道如何处理它。这是错误消息:

javax.servlet.ServletException: I can't guess the name of the class from /.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/testjython3/JythonServlet1
org.python.util.PyServlet.createInstance(PyServlet.java:202)
org.python.util.PyServlet.loadServlet(PyServlet.java:188)
org.python.util.PyServlet.getServlet(PyServlet.java:178)
org.python.util.PyServlet.service(PyServlet.java:155)

最佳答案

如@Jigar 所述,实际的 Jython Servlet 代码中存在限制。但是,您可以通过创建一个简单的 URL 转换器来解决这个问题。它包含一个 Servlet,在内部将请求转发给 Py Servlet。

web.xml 使用以下代码:

<web-app>      
<servlet>
<servlet-name>AliasServlet</servlet-name>
<servlet-class>juanal.AliasServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>PyServlet</servlet-name>
<servlet-class>org.python.util.PyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>AliasServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>PyServlet</servlet-name>
<url-pattern>*.py</url-pattern>
</servlet-mapping>
</web-app>

创建一个新类,比如 juanal.AliasServlet,包含以下内容:

package juanal;

import java.io.IOException;

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

public class AliasServlet extends HttpServlet
{

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String URI = request.getRequestURI();
String newURI = URI + ".py";
getServletConfig().getServletContext().getRequestDispatcher(newURI).forward(request, response);
}
}

因此,对于这样的 URL:localhost:8080/jythondemo/JythonServlet1,它会在内部将请求转发到 JythonServlet1.py

关于java - 如何使用 jython 从 pyservlet 的 url 中删除 .py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com