Scala 如何获得指向同一servlet的不同URL?
我对Servlet技术非常陌生,这是一个非常基本的问题,但我对那些对我来说太复杂的教程感到困惑 我有一个新的servletScala 如何获得指向同一servlet的不同URL?,scala,servlets,Scala,Servlets,我对Servlet技术非常陌生,这是一个非常基本的问题,但我对那些对我来说太复杂的教程感到困惑 我有一个新的servletHelloWorldServlet。在web.xml中,我有一个 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun
HelloWorldServlet
。在web.xml
中,我有一个
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>cz.hello.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
</web-app>
到目前为止还不错,servlet是使用Jetty加载的,我很高兴,我可以在http://localhost:8080/HelloWorldServlet
现在,我希望servlet能够响应请求,比如,http://localhost:8080/HelloWorldServlet/hello
和http://localhost:8080/HelloWorldServlet/goodbye
并以不同的方式对这两个问题进行处理。例如like(伪代码)
如何实现这一点?首先,如果您想对POST请求做出反应,应该实现
doPost
方法,而不是doGet
其次,我建议您考虑在不同的servlet中处理每个URL,除非您的代码像您提供的示例一样简单
在开发实际应用程序时,您的代码可能会变得更加复杂,因此,如果您将职责划分为两个servlet,代码会更加简洁。如果您同意这种方法,只需在web.xml
中创建另一个
和另一个
对象,如下所示:
<web-app>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>cz.hello.HelloWorldServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>GoodbyeWorldServlet</servlet-name>
<servlet-class>cz.hello.GoodbyeWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GoodbyeWorldServlet</servlet-name>
<url-pattern>/goodbye</url-pattern>
</servlet-mapping>
</web-app>
HelloWorldServlet
cz.hello.HelloWorldServlet
再见,沃尔德小酒店
cz.hello.GoodbyeWorldServlet
HelloWorldServlet
/你好
再见,沃尔德小酒店
/再见
这样,对/hello
的请求将由HelloWorldServlet
处理,对/bye
的请求将由GoodbyeWorldServlet
处理。现在只需定义GET或POST是否对您更有意义,并在您的servlet上实现相应的方法(doGet
或doPost
,或两者)
您的想法(比较servlet中URL的内容)也可行,但这不是一个好的设计,因为您可能会得到一个巨大的if/then/else链,在这种情况下这听起来是个坏主意。哦,好的。因此,推荐的设计是为不同类型的职责提供更多的类,好吗?(邮递是一个错误)这是肯定的。假设您的应用程序是一个简单的CRUD,例如处理用户和组。您将有两个URL(/users和/groups),由两个servlet处理。在这些servlet中,您将实现doGet(用于检索用户/组)、doDelete(用于删除)、doPut(用于创建)和doPost(用于更新)。这只是一个愚蠢的例子,可以让你理解这个想法背后的基本原理。不,这是一个很好的例子,也是我需要的。
override def doGet(req: HttpServletRequest, resp: HttpServletResponse) = {
resp.setContentType("text/plain")
if (req.isAddress("/hello") {
resp.getWriter.println("Hello, world")
} else {
resp.getWriter.println("Goodbye, world")
}
}
<web-app>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>cz.hello.HelloWorldServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>GoodbyeWorldServlet</servlet-name>
<servlet-class>cz.hello.GoodbyeWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GoodbyeWorldServlet</servlet-name>
<url-pattern>/goodbye</url-pattern>
</servlet-mapping>
</web-app>