小编san*_*oid的帖子

302重定向是否会维护引用字符串?

我需要将用户从一个页面重定向到另一个页面,但我需要维护原始的referer字符串.因此,举例来说,如果他们开始了对http://www.othersite.com/pageA.jsp,点击一个链接,将他们带到http://www.mysite.com/pageB.jsp,然后执行302重定向到http://www.mysite.com/pageC.jsp,我需要referer字符串包含" http://www.othersite.com/pageA.jsp "

这是302重定向的正常行为吗?或者我的原始引用会被删除,支持" http://www.mysite.com/pageB.jsp "?那是不可取的.

我不知道它是否有任何区别,但我在JSP中工作,我正在使用response.sendRedirect()来执行302重定向.

我应该提一下,我做了一个实验,它似乎保留了原始的referer字符串(" http://www.othersite.com/pageA.jsp "),但我只是想确保这是正常的默认值行为,而不是我的怪异.

谢谢您的帮助.

编辑添加:

虽然我目前正在使用302重定向,但我可能会使用301重定向.你知道301重定向的行为是否更可靠?

http-referer redirect jsp referrer http-status-code-302

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

CLASSPATH,Java Buld Path(eclipse)和WEB-INF\LIB:使用什么,何时以及为什么?

我最近从.NET切换到J2EE,并且对于放置JAR文件的位置感到困惑.我知道CLASSPATH,WEB-INF和Eclipse的Java Web Path都是可以存储JAR的地方,但我对使用哪个文件夹,何时以及为什么感到困惑.

首先,我们有CLASSPATH.我通常通过进入"我的电脑"中的"环境变量"来设置它.我知道这是Java编译器查找JAR文件的默认位置.当我将文件夹或JAR添加到我的CLASSPATH环境变量时,为什么Eclipse,Java编译器和Web服务器会忽略它?

此外,我知道WEB-INF\LIB是一个可以放置Web应用程序将要使用的JAR文件的地方.但是,我将JAR放在WEB-INF\LIB中只是为了让它们被忽略.在什么情况下我应该将JAR放入WEB-INF\LIB文件夹?如何让Eclipse或Web服务器注意到它们?

到目前为止,唯一对我有用的是实际更改Eclipse项目的Java Build Path.我将选择我需要的JAR并点击"Add External JARs".大部分时间,当我这样做时,Eclipse将识别我的JAR并阅读其中的类.但是,我这样做时遇到了一堆奇怪的随机错误(我认为这主要与依赖关系有关).出于某种原因,我只是觉得这不是正确的做事方式,而是我错过了一些重要的信息.我什么时候应该在Eclipse中手动添加外部JAR,何时应该以不同的方式做事?为什么Eclipse的Java Build Path似乎不知道我的CLASSPATH环境变量中的文件夹?

真的,我想更好地理解CLASSPATH,Eclipse的Java构建路径和WEB-INF/LIB文件夹 - 它们服务的目的,它们之间的关系,以及我应该将JAR放在各种各样的地方的情况.我很感激你能给我的任何建议,或者你可以推荐的任何文章.

谢谢.

java eclipse jar classpath java-ee

36
推荐指数
2
解决办法
8万
查看次数

Java:初始化静态最终字段的顺序是什么?

好吧,所以说我有一个看起来像这样的课程:

public class SignupServlet extends HttpServlet {
    private static final Logger SERVLET_LOGGER=COMPANYLog.open(SignupServlet.class);
    private static final ExceptionMessageHandler handler = new ExceptionMessageHandler();   
    private static final SignupServletObservableAgent signupObservableAgent = 
        new SignupServletObservableAgent(null, SERVLET_LOGGER);
}
Run Code Online (Sandbox Code Playgroud)

我可以指望类加载器按顺序初始化这些字段,这样我可以依赖SERVLET_LOGGER在signupObservableAgent之前实例化吗?

java static final initialization classloader

33
推荐指数
1
解决办法
1万
查看次数

有没有办法从Java中的响应对象中读取cookie?

似乎HttpServletResponse没有公开任何方法来执行此操作.

现在,我正在向一个狡猾且不易理解的servlet添加一堆日志代码,试图找出它究竟是做什么的.我知道它设置了一堆cookie,但我不知道何时,为什么或什么.在servlet执行结束时只记录HttpServletResponse对象中的所有cookie会很好.

我知道cookie通常是浏览器的责任,我记得在.NET中没有办法做到这一点.只是希望Java可能会有所不同......

但如果这是不可能的 - 关于如何完成我想要做的事情的任何其他想法?

谢谢,一如既往.

java cookies servlets response

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

当EntityUtils.toString()返回异常时,有没有办法获取HttpEntity的String值?

我一直遇到这种情况,我收回了一个错误的HTTP响应(比如400),但是无法查看HttpResponse对象中的HttpEntity.当我逐步使用调试器时,我可以看到实体有内容(长度> 0),我甚至可以查看内容,但我看到的只是一个数字数组(我想是ASCII码?)很有帮助.我将在实体上调用EntityUtils.toString(),但是我得到了一个异常 - IOException或某种"对象处于无效状态"异常.这真是令人沮丧!有没有办法以人类可读的形式获取这些内容?

这是我的代码:

    protected JSONObject makeRequest(HttpRequestBase request) throws ClientProtocolException, IOException, JSONException, WebRequestBadStatusException {

    HttpClient httpclient = new DefaultHttpClient();

    try {
        request.addHeader("Content-Type", "application/json");
        request.addHeader("Authorization", "OAuth " + accessToken);
        request.addHeader("X-PrettyPrint", "1");

        HttpResponse response = httpclient.execute(request);
        int statusCode = response.getStatusLine().getStatusCode();

        if (statusCode < 200 || statusCode >= 300) {
            throw new WebRequestBadStatusException(statusCode);
        }

        HttpEntity entity = response.getEntity();

        if (entity != null) {
            return new JSONObject(EntityUtils.toString(entity));
        } else {
            return null;
        }

    } finally {
        httpclient.getConnectionManager().shutdown();
    }
}
Run Code Online (Sandbox Code Playgroud)

看看我抛出异常的位置?我想做的是吮吸HttpEntity的内容并将其置于异常中.

java apache-httpcomponents apache-httpclient-4.x

17
推荐指数
3
解决办法
4万
查看次数

如何从eclipse调试hadoop mapreduce作业?

我在单机,仅限本地的设置中运行hadoop,我正在寻找一种在eclipse中调试映射器和减速器的一种不错的,无痛的方法. Eclipse运行mapreduce任务没有问题.但是,当我去调试时,它给了我这个错误:

12/03/28 14:03:23 WARN mapred.JobClient:没有工作jar文件集.可能找不到用户类.请参阅JobConf(Class)或JobConf#setJar(String).

好的,我做了一些研究.显然,我应该使用eclipse的远程调试工具,并将其添加到我的hadoop-env.sh:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000
Run Code Online (Sandbox Code Playgroud)

我这样做,我可以在eclipse中逐步完成我的代码.唯一的问题是,由于"suspend = y",我无法使用命令行中的"hadoop"命令来执行查看作业队列等操作; 它挂起,我想象,因为它正在等待调试器附加.此外,当我处于这种模式时,我无法运行"hbase shell",可能是出于同样的原因.

所以基本上,如果我想在"调试模式"和"正常模式"之间来回切换,我需要更新hadoop-env.sh并重新启动我的机器.主要的痛苦.所以我有几个问题:

  1. 有没有更简单的方法在eclipse中调试mapreduce作业?

  2. 为什么eclipse可以很好地运行我的mapreduce作业,但是对于调试我需要使用远程调试?

  3. 有没有办法告诉hadoop使用远程调试mapreduce作业,但是在正常模式下操作所有其他任务?(例如"hadoop queue""hbase shell").

  4. 是否有更简单的方法来切换hadoop-env.sh配置而无需重新启动我的机器?hadoop-env.sh默认情况下不可执行.

  5. 这是一个更普遍的问题:当我在仅本地模式下运行hadoop时究竟发生了什么?我的机器上是否有任何"始终打开"并执行hadoop作业的进程?或者,当我从命令行运行"hadoop"命令时,hadoop只执行操作吗?当我从eclipse运行mapreduce工作时,eclipse正在做什么?我必须hadoop-core在我的引用pom.xml中使我的项目工作.eclipse是否将作业提交到我已安装的hadoop实例,还是以某种方式从hadoop-core-1.0.0.jar我的maven缓存中运行它?

这是我的主要课程:

public class Main {
      public static void main(String[] args) throws Exception {     
        Job job = new Job();
        job.setJarByClass(Main.class);
        job.setJobName("FirstStage");

        FileInputFormat.addInputPath(job, new Path("/home/sangfroid/project/in"));
        FileOutputFormat.setOutputPath(job, new Path("/home/sangfroid/project/out"));

        job.setMapperClass(FirstStageMapper.class);
        job.setReducerClass(FirstStageReducer.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

        System.exit(job.waitForCompletion(true) ? 0 : 1);
      }
}
Run Code Online (Sandbox Code Playgroud)

java eclipse debugging hadoop remote-debugging

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

Eclipse(Galileo):为什么"初始化Java工具:59%"需要FOREVER?

Java和Eclipse的新手.出于某种原因,我第一次在给定的一天加载Eclipse,它冻结在"初始化Java工具:59%".最终,它超越了这一点,我可以完成我的工作.但是,这个"初始化Java工具:59%"阶段真的很长一段时间.有人知道它为什么这样做或如何解决它?

java eclipse load delay eclipse-3.5

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

如何针对远程群集运行HBase shell

我正在我的工作站上以伪分布式模式运行HBase.我们还在群集上运行HBase.使用HBase shell,我想从我的工作站访问在集群上运行的HBase实例.我想在不登录其中一台集群机器的情况下这样做.

使用Hadoop,您可以通过指定-conf参数并提供hadoop-site.xml的备用版本来在远程集群上运行作业.是否有HBase shell的等价物?

我正在我的工作站和集群机器上运行cloudera cdh3u3.

configuration hadoop hbase cloudera apache-zookeeper

10
推荐指数
2
解决办法
1万
查看次数

当使用HBase作为MapReduce的源时,我可以扩展TableInputFormatBase来为每个区域创建多个拆分和多个映射器吗?

我正在考虑使用HBase作为我的一个MapReduce作业的来源.我知道TableInputFormat为每个Region指定一个输入拆分(因此也就是一个映射器).但是,这似乎效率低下.我真的希望让多个映射器同时在给定的Region上工作.我可以通过扩展TableInputFormatBase来实现这一点吗?你能指点我一个例子吗?此外,这是一个好主意吗?

谢谢您的帮助.

java performance hadoop hbase mapreduce

9
推荐指数
1
解决办法
3043
查看次数

当我调用connect()时,Java HttpURLConnection无法连接

我正在尝试编写一个程序来对我的webapp进行自动化测试.为此,我使用HttpURLConnection打开连接.

我正在尝试测试的其中一个页面执行302重定向.我的测试代码如下所示:

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
connection.connect();
system.out.println(connection.getURL().toString());
Run Code Online (Sandbox Code Playgroud)

所以,假设urlToSend是http://www.foo.com/bar.jsp,并且该页面将您重定向到http://www.foo.com/quux.jsp.我的println语句应打印出来http://www.foo.com/quux.jsp,对吧?

错误.

重定向永远不会发生,它会打印出原始URL.但是,如果我通过调用connection.getResponseCode()更改切换出connection.connect()行,它就会神奇地起作用.

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
//connection.connect();
connection.getResponseCode();
system.out.println(connection.getURL().toString());
Run Code Online (Sandbox Code Playgroud)

为什么我看到这种行为?我做错了吗?

谢谢您的帮助.

java connection url httpurlconnection http-status-code-302

7
推荐指数
1
解决办法
2万
查看次数