首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java教程读写URLConnection

Java教程读写URLConnection
EN

Stack Overflow用户
提问于 2021-05-11 14:15:02
回答 1查看 84关注 0票数 0

我正在按照java教程读写URL,但是我被卡住了。

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

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

Servlet。

代码语言:javascript
复制
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) {
            }
        }        
    }          
}

和客户端

代码语言:javascript
复制
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();
    }
}

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

代码语言:javascript
复制
java http://localhost:8080/ReverseString "Reverse me" 

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

代码语言:javascript
复制
<!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, 2021, 6:47:06 AM&nbsp;</td><td class="size">1,551 bytes&nbsp;</td></tr>
</tbody>
</table>
</body></html>

web.xml为:

代码语言:javascript
复制
<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>

我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-07-09 03:54:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67481431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档