JSP 作业6

(1)       Jsp页面翻译成的servlet类的源文件在哪里可以找到?servlet实例是每次请求页面都会创建一个,还是始终只有一个(单例)?
(2)页面中定义变量加和不加叹号有什么区别,结合页面翻译的源文件说清楚。
(3)在不同<% %>里定义的变量能否互相访问?教材55页“(3)JSP代码块”中的实例第四行右边的解释“错误,因a被定义在单独的jsp。。。”是否正确?
(4)在页面中输出java变量a的值有哪两种方法,怎样写?
(5)Jsp指令有几种,分别是什么?
(6)<%@include>指令和<jsp:include>动作元素都是包含,有什么区别?
(7)获取表单文本框输入的值用哪个内置对象的什么方法,输入是汉字的话会出现乱码,怎样解决?对于相同name的多个表单元素的值(如复选框)如何获取,用什么方法?
(8)页面间传递参数有几种方法?
(9)理解request,session,appliaction对象的生命周期,利用这几个对象进行数据共享的一对方法是什么?传参和共享都可以用来在页面间传递数据,有什么区别?
(10)页面间跳转可以通过链接、重定向、转发,重定向用什么语句?转发用什么标签或语句?重定向和转发有什么区别?
(11)做课后题p80页第6题,体会不同对象声明周期带来的共享范围的不同:
在6_1页面中存入后,分别通过下面方式访问6_2页面,写出输出的四个结果
I:链接(或重定向)
II:转发
III:换一个浏览器窗口访问页面6_2页面
IIII:重启服务器,访问6_2页面。


1.Jsp页面翻译成的servlet类的源文件在哪里可以找到?servlet实例是每次请求页面都会创建一个,还是始终只有一个(单例)?
答:①在tomcat工作目录下的work目录下可以找到 ②只有一个单例,常驻内存。


2.页面中定义变量加和不加叹号有什么区别,结合页面翻译的源文件说清楚。
答:<%! int d=0; %> //定义的是成员变量d
<% int a=30; %> // 定义的是局部变量a(方法内创建的 变量)

①<%! %>定义的变量编译成servlet后成为servlet的成员变量,在servlet环境中,一个servlet的实例只有一个该变量。所有人访问的都是同一个该变量
②而在<% %>中定义的变量编译成servlet后成为service()方法的一个本地变量,每响应客户端一次就创建一次,所有人的该变量互相独立,可以用于猜数程序。


3.在不同<% %>里定义的变量能否互相访问?教材55页“(3)JSP代码块”中的实例第四行右边的解释“错误,因a被定义在单独的jsp。。。”是否正确?

<% int a=30; %>
<%int c=a;
out.print(c);
%>
运行以上代码后,可以正确输出b的值,所以不同的代码块之间的变量可以互相访问。

②不正确 因为a的值也被使用了
<%! int d=0; %>
<% int a=30; %>
<%int c=a;
out.print(c);%>
<%
int b=30;
d=d+a+b;
out.println(d);
d=d+b;
out.println(d);
%>


4.在页面中输出java变量a的值有哪两种方法,怎样写?
① <%=a %>

<%
int a=100;
out.print(a);
%>


5.Jsp指令有几种,分别是什么?
Jsp包含三个编译指令和七个动作指令。
三个编译指令为:page、include、taglib。
七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty。


6、<%@include>指令和<jsp:include>动作元素都是包含,有什么区别?
①:<%@include>
在编译阶段(将JSP页面转换成servlet的阶段),include会读入指定的页面中的内容,并将这些内容和原来的页面融合在一起
<%@ include file=”header.html”%>
引入的页面可以只包含静态内容(例如HTML),也可以是一个普通的JSP页面。主页面和引入的页面融和在一起(引入的页面只是最为普通的文本进行融合,并不对动态内容求值),融合后的完整页面再被整体的转换为一个servlet。
这意味着主页和被引入的页面共享所有的页面作用域数据。因此,如果主页面中声明了一个变量,而在某个被引入的页面中也声明了一个同名的变量,那么在翻译阶段将会造成一个错误,因为组合后的页面无法进行编译。

②<jsp:include>
指令用于在运行时临时加载引入另外的资源。
这个指令是在请求处理阶段而不是在翻译阶段执行的。该行为并不是要引入指定页面的实际内容,它将引入执行该引入页面后所产生的应答,这意味着你可以指定任何能够产生文本应答的web资源。JSP容器将通过一个内部的函数调用来调用指定的资源。因此,这些被引入的资源可以帮助处理原来的请求,所以这些资源可以访问请求作用域内的所有对象,以及所有的请求参数。但是要注意,它不能访问任何页面作用域属性,或是在主页面中声明的脚本变量。

————————————————————————–
7.
获取表单文本框输入的值用哪个内置对象的什么方法,输入是汉字的话会出现乱码,怎样解决?对于相同name的多个表单元素的值(如复选框)如何获取,用什么方法?
①获取表单文本框输入的值用对象request中的getParameter()方法
②输入的汉字乱码,则将字符编码改为”UTF-8″格式
———————————————————
8.
页面间传递参数有几种方法?
1、form表单

2、request.setAttribute();和request.getAttribute();

3、超链接:<a herf=”index.jsp”?a=a&b=b&c=c>name</a>

4、<jsp:param>


9.理解request,session,appliaction对象的生命周期,利用这几个对象进行数据共享的一对方法是什么?传参和共享都可以用来在页面间传递数据,有什么区别?

appliaction:
全局作用范围,整个应用程序共享,部署文件中的同一个webApp共享,生命周期最长,为javaweb程序启动到停止。

session:
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

request:
请求作用域,就是客户端的一次请求。最短

可以用setAttribute(“”,””); getAttribute(“”,””);
传参和共享的区别:
传参和共享的区别
传参是从一个页面向另一个页面传递数据
共享是共用一个对象


10、页面间跳转可以通过链接、重定向、转发,重定向用什么语句?转发用什么标签或语句?重定向和转发有什么区别?

链接:
<a href=”new.jsp”>跳转</a>
点击到另一个页面
重定向:<jsp:forward page=” test.jsp” />
转发:request.getRequestDispatcher(“/test.jsp”).forward(request, response);

重定向和转发:
1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();
2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
3、转发是服务器行为,重定向是客户端行为;
4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。


11)做课后题p80页第6题,体会不同对象声明周期带来的共享范围的不同:
在6_1页面中存入后,分别通过下面方式访问6_2页面,写出输出的四个结果:
一:跳转

【6_1.jsp】
<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>6_1</title>
</head>
<body>
<%pageContext.setAttribute(“p”,”pagestr”);%>
<%request.setAttribute(“r”,”requeststr”);%>
<%session.setAttribute(“s”,”sessionstr”);%>
<%application.setAttribute(“a”,”applicationstr”);%>
跳转
<%response.sendRedirect(“6_2.jsp”); %>
</body>
</html>
【6_2.jsp】

<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>Jsp</title>
</head>
<body>
<%
out.print(pageContext.getAttribute(“p”)+”<br/>”);
out.print(request.getAttribute(“r”)+”<br/>”);
out.print(session.getAttribute(“s”)+”<br/>”);
out.print(application.getAttribute(“a”));
%>
</body>
</html>
【运行结果:】
null
null
sessionstr
applicationstr


二:转发:
【6_1.jsp】
<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>Jsp</title>
</head>
<body>
<%pageContext.setAttribute(“p”,”pagestr”);%>
<%request.setAttribute(“r”,”requeststr”);%>
<%session.setAttribute(“s”,”sessionstr”);%>
<%application.setAttribute(“a”,”applicationstr”);%>
转发
<%
RequestDispatcher rd = request.getRequestDispatcher(“6_2.jsp”);
rd.forward(request, response);
%>
</body>
</html>
【6_2.jsp】
<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>Jsp</title>
</head>
<body>
<%
out.print(pageContext.getAttribute(“p”)+”<br/>”);
out.print(request.getAttribute(“r”)+”<br/>”);
out.print(session.getAttribute(“s”)+”<br/>”);
out.print(application.getAttribute(“a”));
%>
</body>
</html>

【运行结果:】
null
requeststr
sessionstr
applicationstr

三:换一个浏览器窗口访问页面6_2页面
【源代码:】
【6_1.jsp】
<a href=”6_2.jsp” target=”_blank”>点击跳转到另一个页面</a>
【6_2.jsp】同上
【运行结果:】
null
null
null
applicationstr
———————–
四:重启服务器
运行结果:
null
null
sessionstr
applicationstr

发表评论

电子邮件地址不会被公开。 必填项已用*标注

14 − 12 =