如何与 Java 客户端的 servlet 通信
How to communicate with a servlet from a Java client
我在 Windows 10 上使用 Netbeans 12 开发了一个 servlet。该 servlet 部署在我的机器上的 Apache Tomcat 9.0.39 上,它与 Netbeans IDE 集成。在开发 servlet 时,Netbeans IDE 会自动创建一个包含静态 Html 内容的 index.html 文件,并将该文件放在“src->main->webapp”文件夹下。
客户端向 servlet 发送一个字符串,然后 servlet 反转字符串并将 returns 返回给客户端。但是,我的客户端只能在 servlet 的响应中看到 index.html(上面提到的)的静态内容,而不是 servlet 写入 PrintWriter 对象的反向字符串对象(从 Response.getWriter() ).
这里是index.html的内容:
<!DOCTYPE html>
<html>
<head>
<title>My first servlet</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>Reversing Strings!!!</h1>
<p> This is index.html page</p>
</body>
</html>
这里是web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>ReverseString</servlet-name>
<servlet-class>org.me.servletlearning.ReverseString</servlet-class>
<init-param>
<param-name>greeting</param-name>
<param-value>Hello Tony</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ReverseString</servlet-name>
<url-pattern>/reversestring</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
这里是context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/reversestring"/>
这是 servlet:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String inputString = request.getParameter("reverse_string");
StringBuilder temp = new StringBuilder(inputString);
String result = temp.reverse().toString();
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ReverseString</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ReverseString at " + request.getContextPath() + "</h1>");
out.println("<p> The input string: "+inputString+"<br>");
out.println("The reversed string: "+result+" </p>");
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
客户:
public static void writeToURL() {
try {
// need to study and understand servlet
// then write to a servelt through a URL object.
String stringToReverse = URLEncoder.encode("HelloWorld", "UTF-8");
URL url = new URL("http://localhost:8080/reversestring/");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream());
out.write("reverse_string=" + stringToReverse);
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
String decodedString;
while ((decodedString = in.readLine()) != null) {
System.out.println(decodedString);
}
in.close();
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
客户端从servlet接收到的内容:
<!DOCTYPE html>
<html>
<head>
<title>My first servlet</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>Reversing Strings!!!</h1>
<p> This is index.html page</p>
</body>
</html>
我的代码缺少什么?
谢谢
您的 webapp 上下文路径是 /reversestring
。 string-reversing servlet 在该上下文中的路径 /reversestring
处注册。要向 servlet 发出请求,URL 应该是:
http://localhost:8080/reversestring/reversestring
我在 Windows 10 上使用 Netbeans 12 开发了一个 servlet。该 servlet 部署在我的机器上的 Apache Tomcat 9.0.39 上,它与 Netbeans IDE 集成。在开发 servlet 时,Netbeans IDE 会自动创建一个包含静态 Html 内容的 index.html 文件,并将该文件放在“src->main->webapp”文件夹下。
客户端向 servlet 发送一个字符串,然后 servlet 反转字符串并将 returns 返回给客户端。但是,我的客户端只能在 servlet 的响应中看到 index.html(上面提到的)的静态内容,而不是 servlet 写入 PrintWriter 对象的反向字符串对象(从 Response.getWriter() ).
这里是index.html的内容:
<!DOCTYPE html>
<html>
<head>
<title>My first servlet</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>Reversing Strings!!!</h1>
<p> This is index.html page</p>
</body>
</html>
这里是web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>ReverseString</servlet-name>
<servlet-class>org.me.servletlearning.ReverseString</servlet-class>
<init-param>
<param-name>greeting</param-name>
<param-value>Hello Tony</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ReverseString</servlet-name>
<url-pattern>/reversestring</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
这里是context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/reversestring"/>
这是 servlet:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String inputString = request.getParameter("reverse_string");
StringBuilder temp = new StringBuilder(inputString);
String result = temp.reverse().toString();
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ReverseString</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ReverseString at " + request.getContextPath() + "</h1>");
out.println("<p> The input string: "+inputString+"<br>");
out.println("The reversed string: "+result+" </p>");
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
客户:
public static void writeToURL() {
try {
// need to study and understand servlet
// then write to a servelt through a URL object.
String stringToReverse = URLEncoder.encode("HelloWorld", "UTF-8");
URL url = new URL("http://localhost:8080/reversestring/");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream());
out.write("reverse_string=" + stringToReverse);
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
String decodedString;
while ((decodedString = in.readLine()) != null) {
System.out.println(decodedString);
}
in.close();
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
客户端从servlet接收到的内容:
<!DOCTYPE html>
<html>
<head>
<title>My first servlet</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>Reversing Strings!!!</h1>
<p> This is index.html page</p>
</body>
</html>
我的代码缺少什么?
谢谢
您的 webapp 上下文路径是 /reversestring
。 string-reversing servlet 在该上下文中的路径 /reversestring
处注册。要向 servlet 发出请求,URL 应该是:
http://localhost:8080/reversestring/reversestring