1. 下列代码的执行结果是什么:
public classTest {public static voidmain(String[] args) {
(newThreadTest()).start();
}
}class ThreadTest extendsThread{
@Overridepublic voidrun() {
System.out.println("In run");
yield();
System.out.println("leaving run.");
}
}
答案:In run 在leaving run之前被打印出来。
分析:Thread类的yield()方法的作用为线程让步,尝试释放当前线程对CPU资源的占用,并重新进入就绪状态。当其再次获取到CPU资源后会继续执行。
2. 和HttpServletResponse的sendredirect()方法的主要区别描述正确的是:
答案为:forward执行在服务器端,而sendredirect在客户端
分析: 的原理是HttpServletRequest的getRequestDispatcher的forward方法,为请求的转发,而sendredirect为页面的重定向。二者的完整区别为:
a.重定向
response.sendRedirect(你要跳转的路径)
服务器告知给客户端,让客户端去请求你要跳转的路径。
1、 跳转前和跳转后的request对象不是同一个对象了;意味着跳转后不能从request中获取到跳转前的用户请求数据;
2、 在客户端的浏览器地址栏上看到的地址是跳转后的地址。
3、 可以跳转到项目外的地址;
4、 如果跳转的路径采用根路径的话,需要携带项目的上下文路径。
根路径: /应用上下文/资源目录/文件名
问题:如何动态的获取到应用上下文路径?
request.getContextPath()
5、 跳转后,如果客户端刷新页面,它只会刷新跳转后的页面
b.请求的转发
request.getRequestDispatcher(你要跳转的路径)
.forward(request,response);
服务器自己去请求跳转后的资源并执行,执行后将执行结果响应给客户端。
1、 跳转前和跳转后的request对象是同一个对象;意味着跳转后可以从request中获取到跳转前的用户请求数据;
2、 在客户端的浏览器地址栏上看到的地址是跳转前的地址。
3、 不可以跳转到项目外的地址;
4、 如果跳转的路径采用根路径的话,不需要携带项目的上下文路径。
根路径: /资源目录/文件名
5、跳转后,如果客户端刷新页面,它会将跳转前和跳转后的页面都再执行一次。
6、请求的转发,他可以跳转到WEB-INF下的页面。
3. 以下语句创建了几个对象
String a,b,c;
a= "a";
b= "b";
a&