小编joh*_*ohn的帖子

如何在Spring MVC Controller中提取IP地址?

我正在开发Spring MVC控制器项目,我正在从浏览器中进行GET URL调用 -

以下是我通过浏览器进行GET调用的网址 -

http://127.0.0.1:8080/testweb/processing?workflow=test&conf=20140324&dc=all
Run Code Online (Sandbox Code Playgroud)

以下是在浏览器上点击后调用的代码 -

@RequestMapping(value = "processing", method = RequestMethod.GET)
public @ResponseBody ProcessResponse processData(@RequestParam("workflow") final String workflow,
    @RequestParam("conf") final String value, @RequestParam("dc") final String dc) {

        System.out.println(workflow);
        System.out.println(value);
        System.out.println(dc);

        // some other code
    }
Run Code Online (Sandbox Code Playgroud)

问题陈述:-

现在有什么办法,我可以从一些标题中提取IP地址吗?意思是我想知道哪个IP地址,呼叫即将到来,这意味着无论谁在上面调用URL,我都需要知道他们的IP地址.这可能吗?

java spring-mvc ip-address

65
推荐指数
8
解决办法
11万
查看次数

如何从RestTemplate调用URL中提取HTTP状态代码?

RestTemplate用来对我们的服务进行HTTP调用,返回一个简单的JSON响应.我根本不需要解析那个JSON.我只需要返回我从该服务中获得的任何内容.

所以我将其映射到String.class并将实际值JSON response作为字符串返回.

RestTemplate restTemplate = new RestTemplate();

String response = restTemplate.getForObject(url, String.class);

return response;
Run Code Online (Sandbox Code Playgroud)

现在的问题是 -

我想HTTP Status codes在点击URL后提取.如何从上面的代码中提取HTTP状态代码?我是否需要以目前的方式对其进行任何更改?

更新: -

这是我尝试过的,我能够得到回复和状态代码.但是,我是否总是需要设置HttpHeadersEntity对象,如下所示我在做什么?

    RestTemplate restTemplate = new RestTemplate();     

    //and do I need this JSON media type for my use case?
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);

    //set my entity
    HttpEntity<Object> entity = new HttpEntity<Object>(headers);

    ResponseEntity<String> out = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);

    System.out.println(out.getBody());
    System.out.println(out.getStatusCode());
Run Code Online (Sandbox Code Playgroud)

几个问题 - 我需要有,MediaType.APPLICATION_JSON因为我只是调用url返回响应,它可以返回JSON或XML或简单的字符串.

java url http-status-codes resttemplate

39
推荐指数
4
解决办法
6万
查看次数

如何使用jsoup解析HTML表?

我试图使用jsoup解析HTML.这是我第一次使用jsoup,我也阅读了一些教程.下面是我试图解析的HTML表格 -

如果你看到我的下表,它tr现在有三个(为了理解目的,我将它缩短为有三个表行,但一般情况下会更多).现在我想Cluster Name从我的下表中提取并且它是相应的host name,例如 - 我将提取Titan为集群名称及其状态为down的所有主机名.

正如你可以看到下面的Titan群集名称,我有两个主机名machineA.abc.commachineB.abc.commachineA地位up,但machineB地位down.

因此,我将打印Titan为群集名称,并打印出machineB.abc.com主机名,因为它已关闭.这可以用jsoup吗?

<table border=1>
   <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Alert</td>
      <td>Cluster Name</td>
      <td>IP addr</td>
      <td>Host Name</td>
      <td>Type</td>
      <td>Status</td>
      <td>Free</td>
      <td>Version</td>
      <td>Restart Time</td>
      <td>UpTime(Days)</td>
      <td>Last probed</td>
      <td>Last up</td>
   </tr>
   <tr bgcolor="ffffff">
      <td><a href=showlog?ip_addr=127.0.0.1>Hist</a></td>
      <td><a href=http://127.0.0.1:8080/test?full=y>VI</a></td>
      <td bgcolor="ffffff">&nbsp</td>
      <td>Titan</td>
      <td>10.100.111.77</td>
      <td>machineA.abc.com</td>
      <td></td>
      <td bgcolor="ffffff">up</td>
      <td bgcolor="ffffff" align=right>88%</td>
      <td bgcolor="ffffff">2.0.5-SNAPSHOT</td>
      <td bgcolor="ffffff">2014-07-04 …
Run Code Online (Sandbox Code Playgroud)

html java parsing jsoup

27
推荐指数
2
解决办法
6万
查看次数

找不到默认构造函数; 嵌套异常是使用Spring MVC的java.lang.NoSuchMethodException?

我正在使用Spring MVC控制器项目.下面是我的控制器,我有一个声明的构造函数,我专门用于测试目的.

@Controller
public class TestController {

    private static KeeperClient testClient = null;

    static {

    // some code here

    }

    /**
     * Added specifically for unit testing purpose.
     * 
     * @param testClient
     */
    public TestController(KeeperClient testClient) {
        TestController.testClient = testClient;
    }

    // some method here

}
Run Code Online (Sandbox Code Playgroud)

每当我启动服务器时,我都会遇到异常 -

No default constructor found; nested exception is java.lang.NoSuchMethodException:
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除TestController构造函数,那么它没有任何问题.我在这做什么错?

但是,如果我添加这个默认构造函数,那么它开始工作正常 -

    public TestController() {

    }
Run Code Online (Sandbox Code Playgroud)

java model-view-controller spring spring-mvc

22
推荐指数
4
解决办法
8万
查看次数

如何尽快复制文件?

我运行我的shell脚本上machineA创建一个副本文件从machineBmachineCmachineA.

如果文件不在machineB,那么它应该在那里machineC肯定.所以我会先尝试复制machineB,如果不存在,machineB那么我会去machineC复制相同的文件.

machineBmachineC会有这样的文件夹,YYYYMMDD这个文件夹里面-

/data/pe_t1_snapshot
Run Code Online (Sandbox Code Playgroud)

因此,无论日期是YYYYMMDD上述文件夹中此格式的最新日期- 我将选择该文件夹作为我需要开始复制文件的完整路径 -

所以如果这是最新的日期文件夹20140317,/data/pe_t1_snapshot那么这将是我的完整路径 -

/data/pe_t1_snapshot/20140317
Run Code Online (Sandbox Code Playgroud)

从我需要开始复制文件machineBmachineC.我需要复制周围400文件machineAmachineBmachineC每个文件大小1.5 GB.

目前我有我的下面的shell脚本工作正常,因为我正在使用scp但不知何故它需要〜2 hours复制400machineA中的文件,这对我来说太长了我想.:(

下面是我的shell脚本 -

#!/bin/bash

readonly PRIMARY=/export/home/david/dist/primary
readonly SECONDARY=/export/home/david/dist/secondary
readonly FILERS_LOCATION=(machineB machineC)
readonly MEMORY_MAPPED_LOCATION=/data/pe_t1_snapshot
PRIMARY_PARTITION=(0 3 5 7 …
Run Code Online (Sandbox Code Playgroud)

unix linux bash ubuntu scp

16
推荐指数
4
解决办法
2万
查看次数

从调用方法并行执行方法

我有一个正在使用的客户库和传入DataRequest对象拥有userid,timeout并且在它的一些其他领域.现在我使用这个DataRequest对象创建一个URL,然后我使用了一个HTTP调用RestTemplate,我的服务返回一个JSON响应,我用它来创建一个DataResponse对象并将这个DataResponse对象返回给它们.

以下是DataClient客户通过将DataRequest对象传递给我的类.DataRequest如果在getSyncData方法中花费太多时间,我正在使用客户传递的超时值来超时请求.

public class DataClient implements Client {

    private RestTemplate restTemplate = new RestTemplate();
    // first executor
    private ExecutorService service = Executors.newFixedThreadPool(15);

    @Override
    public DataResponse getSyncData(DataRequest key) {
        DataResponse response = null;
        Future<DataResponse> responseFuture = null;

        try {
            responseFuture = getAsyncData(key);
            response = responseFuture.get(key.getTimeout(), key.getTimeoutUnit());
        } catch (TimeoutException ex) {
            response = new DataResponse(DataErrorEnum.CLIENT_TIMEOUT, DataStatusEnum.ERROR);
            responseFuture.cancel(true);
            // logging …
Run Code Online (Sandbox Code Playgroud)

java multithreading callable thread-safety executorservice

16
推荐指数
1
解决办法
1923
查看次数

/ bin/sh:1:apk:创建docker镜像时找不到

我有以下用于zookeeper的Dockerfile,我正在尝试为它创建一个图像,但它给了我一个错误.我最近开始使用Docker,并开始使用Zookeeper设置,所以我无法理解.这个错误是什么意思?

FROM ubuntu:trusty
MAINTAINER David

RUN apt-get update && apt-get install -y openjdk-7-jre-headless wget
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64

# Install required packages
RUN apk add --no-cache \
    bash \
    su-exec

ENV ZOO_USER=zookeeper \
    ZOO_CONF_DIR=/conf \
    ZOO_DATA_DIR=/data \
    ZOO_DATA_LOG_DIR=/datalog \
    ZOO_PORT=2181 \
    ZOO_TICK_TIME=2000 \
    ZOO_INIT_LIMIT=5 \
    ZOO_SYNC_LIMIT=2

# Add a user and make dirs
RUN set -x \
    && adduser -D "$ZOO_USER" \
    && mkdir -p "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR" \
    && chown "$ZOO_USER:$ZOO_USER" "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR"

ARG GPG_KEY=C823E3E5B12AF29C67F81976F5CECB3CB5E9BD2D
ARG DISTRO_NAME=zookeeper-3.4.9

# Download …
Run Code Online (Sandbox Code Playgroud)

ubuntu apt docker dockerfile

16
推荐指数
2
解决办法
3万
查看次数

根据它们在自己的池中是活还是死而释放一个套接字?

我使用下面的类通过同步或异步使用套接字将数据发送到我们的消息队列,如下所示.这取决于我是否要调用同步或异步方法在套接字上发送数据的要求.大多数情况下,我们将异步发送数据,但有时我可能需要同步发送数据.

  • sendAsync - 它以异步方式发送数据,我们不会阻塞正在发送数据的线程.如果未收到确认,则它将再次从SendToQueue仅在构造函数中启动的后台线程重试.
  • send - 它在套接字上同步发送数据.它在内部调用doSendAsync方法,然后在特定的超时时间内休眠,如果没有收到确认,则从cache桶中删除,这样我们就不会再次重试.

因此,上述两种方法之间的唯一区别是 - 对于异步情况,如果没有收到确认,我需要不惜一切代价重试但是对于同步我根本不需要重试,这就是为什么我在PendingMessage类中存储更多状态的原因.

ResponsePoller是一个类,它接收发送到特定套接字上的消息队列的数据的确认,然后调用handleAckReceived下面的方法删除地址,以便我们在收到确认后不重试.如果收到确认,那么套接字是活的,否则它已经死了.

public class SendToQueue {
  private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
  private final Cache<Long, PendingMessage> cache = CacheBuilder.newBuilder()
          .maximumSize(1000000)
          .concurrencyLevel(100)
          .build();

  private static class PendingMessage {
    private final long _address;
    private final byte[] _encodedRecords;
    private final boolean _retryEnabled;
    private final Object _monitor = new Object();
    private long _sendTimeMillis;
    private volatile boolean _acknowledged;

    public PendingMessage(long address, byte[] encodedRecords, boolean retryEnabled) …
Run Code Online (Sandbox Code Playgroud)

java multithreading design-patterns thread-safety atomicity

16
推荐指数
1
解决办法
398
查看次数

如何在我的HttpClient执行器中遵循单一责任原则?

我用RestTemplateHttpClient作为执行URL,服务器将返回一个json字符串作为响应.客户将通过传递DataKey其中的对象来调用此库userId.

  • 使用给定的userId,我将找出我可以获取数据然后将这些机器存储在a中的机器是什么LinkedList,以便我可以按顺序执行它们.
  • 之后,我将检查第一个主机名是否在阻止列表中.如果它不在阻止列表中,那么我将在列表中创建一个带有第一个主机名的URL并执行它,如果响应成功,则返回响应.但是,假设第一个主机名在阻止列表中,那么我将尝试在列表中获取第二个主机名并生成url并执行它,所以基本上,在创建URL之前首先找到不在阻止列表中的主机名.
  • 现在,让我们说如果我们选择第一个不在阻止列表中的主机名并执行URL,不知何故服务器已关闭或没有响应,那么我将在列表中执行第二个主机名并继续执行此操作,直到您获得成功的响应.但请确保它们不在阻止列表中,因此我们需要遵循以上观点.
  • 如果所有服务器都关闭或在阻止列表中,那么我只需记录并返回服务不可用的错误.

下面是我的DataClient类,它将由客户调用,他们将DataKey对象传递给getData方法.

public class DataClient implements Client {

    private RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    private ExecutorService service = Executors.newFixedThreadPool(15);

    public Future<DataResponse> getData(DataKey key) {
        DataExecutorTask task = new DataExecutorTask(key, restTemplate);
        Future<DataResponse> future = service.submit(task);

        return future;
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是我的DataExecutorTask类:

public class DataExecutorTask implements Callable<DataResponse> {

    private DataKey key;
    private RestTemplate restTemplate;

    public DataExecutorTask(DataKey key, RestTemplate restTemplate) …
Run Code Online (Sandbox Code Playgroud)

java oop spring resttemplate

14
推荐指数
1
解决办法
285
查看次数

在使用"executeAsync"时如何限制写入请求到cassandra?

我使用datastax java驱动程序3.1.0连接到cassandra集群,我的cassandra集群版本是2.0.10.我与QUORUM一致性异步编写.

  private final ExecutorService executorService = Executors.newFixedThreadPool(10);

  public void save(String process, int clientid, long deviceid) {
    String sql = "insert into storage (process, clientid, deviceid) values (?, ?, ?)";
    try {
      BoundStatement bs = CacheStatement.getInstance().getStatement(sql);
      bs.setConsistencyLevel(ConsistencyLevel.QUORUM);
      bs.setString(0, process);
      bs.setInt(1, clientid);
      bs.setLong(2, deviceid);

      ResultSetFuture future = session.executeAsync(bs);
      Futures.addCallback(future, new FutureCallback<ResultSet>() {
        @Override
        public void onSuccess(ResultSet result) {
          logger.logInfo("successfully written");
        }

        @Override
        public void onFailure(Throwable t) {
          logger.logError("error= ", t);
        }
      }, executorService);
    } catch (Exception ex) {
      logger.logError("error= ", ex); …
Run Code Online (Sandbox Code Playgroud)

java multithreading rate-limiting backpressure datastax-java-driver

14
推荐指数
1
解决办法
1850
查看次数