使用<a href>将值从JSP传递到Servlet

9
我有一个JSP页面 -
<html>
<head>
</head>
<body>
         <%
               String valueToPass = "Hello" ; 
         %>
    <a href="goToServlet...">Go to servlet</a>
</body>
</html>

And servlet -

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

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

        }

        public void foo() {

        }
}

如何在 <a href="goToServlet...">转到servlet</a> 中传递值(例如 valueToPass 或将该值作为参数添加到 )以便传递给 servlet123

我能否使用JSP中的链接调用 servlet123 中的特定方法(例如 foo())?

编辑:

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

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

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

我尝试了<a href="servlet123">转到servlet</a>,但是当我点击链接时它找不到servlet。

第二次编辑:

我尝试了<a href="http://localhost:8080/MyProjectName/servlet123">转到servlet</a>,并且它可以工作。


记得在必要时对值进行编码。 - FrancescoAzzola
2个回答

8
如果您想通过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上可用。请参阅文档

我已测试过您的代码,它可以正常运行:

@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是您的应用程序上下文)。


你应该使用doGet。请查看此答案:https://dev59.com/XXE95IYBdhLWcg3wWMhQ#2349741 - jddsantaella
然后使用request.getParameter("method")获取值"methodName"。您应该对任何参数值进行URL编码,请参见URL编码。如果在Java中,您可以使用内置的URLEncoder类。 - mrswadge
@mrswadge 我知道编码的问题。但我不知道如何在URL中调用servlet。 - URL87
@jddsantaella,我做到了,但链接不起作用,我又编辑了帖子。 - URL87
有没有办法通过调用多个servlet来使用这种方法? - roeygol
显示剩余2条评论

2

<a href="url">urltitle</a> 允许您定义一个URL。从这里调用servlet与从浏览器中调用它一样,只需像在浏览器中调用servlet一样给出URL,例如 http://mysite.com?param1=val1&param2=val2 等。


现在我该如何在第二个servlet中检索param1和param2的值? - Sparker0i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接