我需要将用户从一个页面重定向到另一个页面,但我需要维护原始的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重定向的行为是否更可靠?
我最近从.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放在各种各样的地方的情况.我很感激你能给我的任何建议,或者你可以推荐的任何文章.
谢谢.
好吧,所以说我有一个看起来像这样的课程:
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之前实例化吗?
似乎HttpServletResponse没有公开任何方法来执行此操作.
现在,我正在向一个狡猾且不易理解的servlet添加一堆日志代码,试图找出它究竟是做什么的.我知道它设置了一堆cookie,但我不知道何时,为什么或什么.在servlet执行结束时只记录HttpServletResponse对象中的所有cookie会很好.
我知道cookie通常是浏览器的责任,我记得在.NET中没有办法做到这一点.只是希望Java可能会有所不同......
但如果这是不可能的 - 关于如何完成我想要做的事情的任何其他想法?
谢谢,一如既往.
我一直遇到这种情况,我收回了一个错误的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的内容并将其置于异常中.
我在单机,仅限本地的设置中运行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并重新启动我的机器.主要的痛苦.所以我有几个问题:
有没有更简单的方法在eclipse中调试mapreduce作业?
为什么eclipse可以很好地运行我的mapreduce作业,但是对于调试我需要使用远程调试?
有没有办法告诉hadoop使用远程调试mapreduce作业,但是在正常模式下操作所有其他任务?(例如"hadoop queue"或"hbase shell").
是否有更简单的方法来切换hadoop-env.sh配置而无需重新启动我的机器?hadoop-env.sh默认情况下不可执行.
这是一个更普遍的问题:当我在仅本地模式下运行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的新手.出于某种原因,我第一次在给定的一天加载Eclipse,它冻结在"初始化Java工具:59%".最终,它超越了这一点,我可以完成我的工作.但是,这个"初始化Java工具:59%"阶段真的很长一段时间.有人知道它为什么这样做或如何解决它?
我正在我的工作站上以伪分布式模式运行HBase.我们还在群集上运行HBase.使用HBase shell,我想从我的工作站访问在集群上运行的HBase实例.我想在不登录其中一台集群机器的情况下这样做.
使用Hadoop,您可以通过指定-conf参数并提供hadoop-site.xml的备用版本来在远程集群上运行作业.是否有HBase shell的等价物?
我正在我的工作站和集群机器上运行cloudera cdh3u3.
我正在考虑使用HBase作为我的一个MapReduce作业的来源.我知道TableInputFormat为每个Region指定一个输入拆分(因此也就是一个映射器).但是,这似乎效率低下.我真的希望让多个映射器同时在给定的Region上工作.我可以通过扩展TableInputFormatBase来实现这一点吗?你能指点我一个例子吗?此外,这是一个好主意吗?
谢谢您的帮助.
我正在尝试编写一个程序来对我的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)
为什么我看到这种行为?我做错了吗?
谢谢您的帮助.