【问题标题】:pass values from jsp to servlet using <a href>使用 <a href> 将值从 jsp 传递到 servlet
【发布时间】:2012-08-04 03:50:38
【问题描述】:

我有 JSP 页面 -

<html>
<head>
</head>
<body>
         <%
               String valueToPass = "Hello" ; 
         %>
    <a href="goToServlet...">Go to servlet</a>
</body>
</html>

和servlet -

    @WebServlet(name="/servlet123",
             urlPatterns={"/servlet123"})
    public class servlet123 extends HttpServlet {

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

        }

        public void foo() {

        }
}

我应该在&lt;a href="goToServlet..."&gt;Go to servlet&lt;/a&gt; 中写什么以便将值(例如valueToPass 或者可能将值作为参数添加到servlet123 中)?

我可以使用JSP中的链接调用servlet123中的特定方法(如foo())吗?

编辑:

如何在 URL 中调用 servlet?我的页面层次结构如下 -

WebContent
 |-- JSPtest
 |    |-- callServletFromLink.jsp
 |-- WEB-INF
 :    :

我想调用文件夹 src->control 中的servlet123

我试过&lt;a href="servlet123"&gt;Go to servlet&lt;/a&gt;,但是当我点击链接时它没有找到servlet。

第二次编辑:

我试过&lt;a href="http://localhost:8080/MyProjectName/servlet123"&gt;Go to servlet&lt;/a&gt;,它工作。

【问题讨论】:

  • 如果需要记得对值进行编码

标签: java jsp servlets href


【解决方案1】:

如果你想使用 URL 向 servlet 发送参数,你应该这样做

<a href="goToServlet?param1=value1&param2=value2">Go to servlet</a>

然后检索将在请求中可用的值。

关于你的第二个问题。我会说不。您可以在 URL 中添加一个参数,例如

<a href="goToServlet?method=methodName&param1=value1">Go to servlet</a>

并使用该信息来调用特定的方法。

顺便说一句,如果您使用像 Struts 这样的框架,那会更容易,因为在 Struts 中,您可以将 URL 绑定到特定的 Action 方法(比如说“servlet”)

已编辑

您已经以这种方式定义了您的 servlet:

@WebServlet("/servlet123")

您,您的 servlet 将在 /servlet123 上可用。见doc

我已经测试了您的代码并且它正在运行:

@WebServlet(name = "/servlet123", urlPatterns = { "/servlet123" })
public class Servlet123 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.write("<h2>Hello Friends! Welcome to the world of servlet annotation </h2>");
        out.write("<br/>");
        out.close();
    }
}

然后,我在 http://localhost:8080/myApp/servlet123 中调用了 servlet(如果您正在使用 myApp,那么它就是您的应用程序上下文)。

【讨论】:

  • 谢谢,所以如果我使用像“goToServlet?param1=value1&param2=value2”这样的 URL,servlet 中的哪个方法会被调用? doGet ?
  • 你应该使用 doGet。看看这个答案:stackoverflow.com/a/2349741/980472
  • 然后使用 request.getParameter("method") 获取值“methodName”。您应该对任何参数值进行 url 编码,请参阅URL Encoding。如果在 Java 中,您可以使用内置的 URLEncoder 类。
  • @mrswadge 我知道编码。我不知道如何在 URL 中调用 servlet。
  • @jddsantaella 我做到了,但链接无效,我再次编辑了帖子。
【解决方案2】:

&lt;a href="url"&gt;urltitle&lt;/a&gt; 允许您定义一个 url。从这里调用 servlet 与从浏览器调用一样好,只需提供您在浏览器中提供的 url 即可调用 servlet,如 http://mysite.com?param1=val1&param2=val2 等。

【讨论】:

  • 现在如何在第二个 servlet 中检索 param1 和 param2 的值?
猜你喜欢
  • 2014-02-12
  • 2013-02-13
  • 2020-09-08
  • 2013-11-25
  • 2012-05-03
  • 1970-01-01
相关资源
最近更新 更多