微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 教程 读写 URLConnection

如何解决Java 教程 读写 URLConnection

我正在关注 Java 教程读取和写入 URL,但我卡住了。

https://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html

有两个代码块。一种用于 servlet,一种用于客户端。

小服务程序。

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.net.*;
 
public class ReverseServlet extends HttpServlet
{
    private static String message = "Error during Servlet processing";
     
    public void doPost(HttpServletRequest req,HttpServletResponse resp) {
        try {
            int len = req.getContentLength();
            byte[] input = new byte[len];
         
            ServletInputStream sin = req.getInputStream();
            int c,count = 0 ;
            while ((c = sin.read(input,count,input.length-count)) != -1) {
                count +=c;
            }
            sin.close();
         
            String inString = new String(input);
            int index = inString.indexOf("=");
            if (index == -1) {
                resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                resp.getWriter().print(message);
                resp.getWriter().close();
                return;
            }
            String value = inString.substring(index + 1);
             
            //decode application/x-www-form-urlencoded string
            String decodedString = URLDecoder.decode(value,"UTF-8");
             
            //reverse the String
            String reverseStr = (new StringBuffer(decodedString)).reverse().toString();
             
            // set the response code and write the response data
            resp.setStatus(HttpServletResponse.SC_OK);
            OutputStreamWriter writer = new OutputStreamWriter(resp.getoutputStream());
             
            writer.write(reverseStr);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            try{
                resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                resp.getWriter().print(e.getMessage());
                resp.getWriter().close();
            } catch (IOException ioe) {
            }
        }        
    }          
}

和客户

import java.io.*;
import java.net.*;

public class Reverse {
    public static void main(String[] args) throws Exception {

        if (args.length != 2) {
            System.err.println("Usage:  java Reverse "
                + "http://<location of your servlet/script>"
                + " string_to_reverse");
            System.exit(1);
        }

        String stringToReverse = URLEncoder.encode(args[1],"UTF-8");

        URL url = new URL(args[0]);
        URLConnection connection = url.openConnection();
        connection.setDoOutput(true);

        OutputStreamWriter out = new OutputStreamWriter(
                                         connection.getoutputStream());
        out.write("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();
    }
}

当我使用命令运行客户端时

java http://localhost:8080/ReverseString "Reverse me" 

输出的是一个页面而不是一个反转的字符串。

<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="utf-8">
<link href="jetty-dir.css" rel="stylesheet" />
<title>Directory: /ReverseServlet/</title>
</head>
<body>
<h1 class="title">Directory: /ReverseServlet/</h1>
<table class="listing">
<thead>
<tr><th class="name"><a href="?C=N&O=D">Name&nbsp; &#8679;</a></th><th class="lastmodified"><a href="?C=M&O=A">Last Modified</a></th><th class="size"><a href="?C=S&O=A">Size</a></th></tr>
</thead>
<tbody>
<tr><td class="name"><a href="/ReverseServlet/meta-inf/">meta-inf/&nbsp;</a></td><td class="lastmodified">May 11,2021,6:52:48 AM&nbsp;</td><td class="size">4,096 bytes&nbsp;</td></tr>
<tr><td class="name"><a href="/ReverseServlet/ReverseServlet.java">ReverseServlet.java&nbsp;</a></td><td class="lastmodified">May 11,6:47:06 AM&nbsp;</td><td class="size">1,551 bytes&nbsp;</td></tr>
</tbody>
</table>
</body></html>

web.xml 是:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
      version="3.1">
      <servlet>
            <servlet-name>ReverseServlet</servlet-name>
        <servlet-class>ReverseServlet</servlet-class>
          </servlet>
          <servlet-mapping>
        <servlet-name>ReverseServlet</servlet-name>
        <url-pattern>/*</url-pattern>
          </servlet-mapping>
    <display-name>ReverseServlet</display-name>
</web-app>

我错过了什么?

解决方法

解决了。我已经在 github 上发布了代码以及我让它工作的步骤。 https://github.com/viardot/ReadingfromandWritingtoURL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。