java - 使用 Java 客户端应用程序将条目添加到 mysql 数据库中

标签 java php mysql httpclient

我现在在大学网络作业上遇到了一些麻烦。我有一个 php 书店项目,其中包含一个名为“books”的数据库和一个名为“books”的表。我可以在我的 PHP 书店上创建、更新、删除书籍没问题,但是大学作业的任务是能够创建一个 HttpClientApp 程序,该程序能够向书店发送 GET 和 POST,添加新书进入数据库。

我不太确定我为 HttpClient 和 HttpClientApp 获得的代码是否能够将新书添加到数据库中。我想知道是否有人可以看一下它们,看看我是否遗漏了什么?

这是 MyHttpClient.java 文件的完整代码: `

package com.example.bookstore;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class MyHttpClient {

    /*This creates the method MyHttpResponse execute, with a parameter of MyHttpRequest request which
     * creates a variable called request that stores a reference to the MyHttpRequest object allowing us
     * to use the objects methods in the MyHttpClient.java., we also add the throws IOException which
     * will tell us if we have an error with the input or output in the program
     */
    public MyHttpResponse execute(MyHttpRequest request) throws IOException {

        /*
         * Creates a variable called host of type string which
         * stores reference for the method getHost() which is in
         * the MyHttpRequest object. We then create a variable
         * int port which also stores the reference to the method getPort()
         * from the MyHttpRequest which gives us the port number of the avaya server
         * we are contacting, if it is less than or equal to 0 it will be set to 80 as
         * a default
         */
        String host = request.getHost();
        int port = request.getPort();
        if (port <= 0) {
            port = 80;
        }

        /*
         * Create the variable bookSoc of type Socket and is given the paramters of host and port
         * which is used in creating the socket to connect to the server
         */

        Socket bookSoc = new Socket(host, port);

        /*
        * Declares a variable called response, which allows us to assign the MyHttpResponse object to the
        * response variable. This stores a reference to the MyHttpResponse Object and allows us to reference and use
        * the methods in the MyHttpResponse Object
        */
        MyHttpResponse response = new MyHttpResponse();

        /*
         * Creates the a variable fromServer of type BufferedReader which is given the parameter of new
         * InputStreamReader which then opens up the stream using the bookSoc.getInputStream method.
         */
        BufferedReader fromServer = new BufferedReader(new InputStreamReader(bookSoc.getInputStream()));
        /*The variable toServer of type PrintWriter creates the OutPutStream which allows to output to the
         * Avaya Server
         */
        PrintWriter toServer = new PrintWriter(bookSoc.getOutputStream(), true);
        String method = request.getMethod();


        /*
         * The if statement works by checking if the the Method call equals a GET then
         * create the string path and queryString to print out to the server the path and host
         * which we require
         */
        if (method.equals("GET")) {
            String path = request.getPath();
            String queryString = request.getQueryString();
            toServer.println("GET " + path + " " + "HTTP/1.0");
            toServer.println(queryString);
            toServer.println("GET " + host);
            toServer.println(+port);

            /*
             * Creates a variable called line of type String
             * which will then be used to store the fromServer message, then we creates
             * another var called status of type int which the substring which count the
             * characters given. Then set the Status var equal to 200 OK
             */
            String line;
            line = fromServer.readLine();
            int status = Integer.parseInt(line.substring(9, 12));
            response.setStatus(status);
            String descr = line.substring(13);
            response.setDescription(descr);

            /*
             * Once the above code has been executed the do while do while loop,
             * is then run, the first do while loop reads in a line from the server
             * if the line is not null and line length is greater than 0,
             * creates a name and value var and are added to the header.
             *
             * Then the while  creates a var sbuf of type StringBuilder which
             * creates a new StringBuilder, then the next do while prints out the body of the the
             * repsonse, we then print the host and port number data.
             */
            do {
                line = fromServer.readLine();
                if (line != null && line.length() > 0) {
                    String name = line.substring(0, line.indexOf(": "));
                    String value = line.substring(line.indexOf(": ") + 2);
                    response.addHeader(name, value);
                }
            } while (line != null && line.length() > 0);
            StringBuilder sbuf = new StringBuilder();          
            do {
                line = fromServer.readLine();
                if (line != null) {
                    sbuf.append(line + "\n");
                }

            } while (line != null);
            String body = sbuf.toString();
            response.setBody(body);

            System.out.println("host: " + host);
            System.out.println("port: " + String.valueOf(port));
        } 



        /*
         * if the method call is for the POST then the code below is executed which is
         * executing the same code as the above if statment except for that it is a POST method instead
         * of a GET method.
         */
        else if (method.equalsIgnoreCase("POST")) {


            String path = request.getPath();
            String queryString = request.getQueryString();
            toServer.println("POST " + path + " " + "HTTP/1.0");
            toServer.println();
            toServer.println(queryString);

            String line;
            line = fromServer.readLine();


            int status = Integer.parseInt(line.substring(9, 12));
            response.setStatus(status);

            String descr = line.substring(13);
            response.setDescription(descr);

            do{             
                line = fromServer.readLine();
                if (line != null && line.length() > 0) {

                    String name = line.substring(0, line.indexOf(": "));
                    String value = line.substring(line.indexOf(": ") + 2);
                    response.addHeader(name, value);

                }
            } 
            while (line != null && line.length() > 0);

            StringBuilder sb = new StringBuilder();
            do 
            {
                line = fromServer.readLine();
                if (line != null) {
                    sb.append(line).append("\n");
                }

            } while (line != null);
            String body = sb.toString();

            response.setBody(body);

            System.out.println("host: " + host);
            System.out.println("port: " + String.valueOf(port));


        }
        /*Close the socket*/
        bookSoc.close();
        /*return the response*/
        return response;
    }
}

`

这是 MyHttpClientApp.java 文件的完整代码:

`

package com.example.bookstore;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class MyHttpClientApp {

    public static void main(String[] args) {
        String urlString = null;
        URI uri;
        MyHttpClient client;
        MyHttpRequest request;
        MyHttpResponse response;

        try {
            //==================================================================
            // send GET request and print response
            //==================================================================
            urlString = "http://localhost:8888/bookstore/view_books.php";
            uri = new URI(urlString);
            client = new MyHttpClient();

            request = new MyHttpRequest(uri);
            request.setMethod("GET");
            response = client.execute(request);

            System.out.println("=============================================");
            System.out.println(request);
            System.out.println("=============================================");
            System.out.println(response);
            System.out.println("=============================================");

            //==================================================================
            // send POST request and print response
            //==================================================================
            urlString = "http://localhost:8888/bookstore/view_books.php";
            uri = new URI(urlString);
            client = new MyHttpClient();

            request = new MyHttpRequest(uri);
            request.setMethod("POST");
            request.addParameter("title", "Fringe");
            request.addParameter("firstName", "JJ");
            request.addParameter("lastName", "Abrams");
            request.addParameter("ISBN", "987654321349211");
            request.addParameter("publisher", "Sci-fi");
            request.addParameter("year", "2010");
            request.addParameter("price", "19.99");
            response = client.execute(request);

            System.out.println("=============================================");
            System.out.println(request);
            System.out.println("=============================================");
            System.out.println(response);
            System.out.println("=============================================");
        } catch (URISyntaxException e) {
            String errorMessage = "Error parsing uri (" + urlString + "): " + e.getMessage();
            System.out.println("MyHttpClientApp: " + errorMessage);
        } catch (IOException e) {
            String errorMessage = "Error downloading book list: " + e.getMessage();
            System.out.println("MyHttpClientApp: " + errorMessage);
        }
    }
}

`

我很清楚我可能会提出一个模糊的问题,所以请随时让我发布更多代码等。

最佳答案

您的 Java 代码看起来不错,但我会从客户端中提取很多问题,并且只使用 HttpURLConnection 实用程序而不是自己全部完成: http://docs.oracle.com/javase/7/docs/api/java/net/HttpURLConnection.html

粘贴您的服务器端代码 (php) 进行验证。您的服务器也不需要任何 GET 或 POST 参数吗?因为现在你的请求是空的,这很好,只要确保你没有忘记发送一些东西。

关于java - 使用 Java 客户端应用程序将条目添加到 mysql 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15558128/

相关文章:

java - 如何获取 Java 组件 ID

PHP - 使用 fwrite 写入特殊字符 - 在记事本中看起来不错,但在浏览器中则错误

java - 如何处理 hibernate 映射列错误?

java - 打开 Google Play 的通知

java - 如何在Hibernate中查询嵌入对象?

php - 从命令行执行获取 Apache Document Root(无浏览器)

php - 无法关闭pdo

MySQL 每个派生表都必须有自己的别名

java - 如何使用Spring Form标签中的超链接发送表单?

javascript - 如何在 mysql 中将多个结果连接成几个通用结果?