仅供自己复习使用
(1) Jsp页面翻译成的servlet类的源文件在哪里可以找到?servlet实例是每次请求页面都会创建一个,还是始终只有一个(单例)?
以我自己的工程为例
路径:E:\eclipseworkplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\WebTest\org\apache\jsp\6_005jsp.java
单例,在第一次请求的时候创建
(2)页面中定义变量加和不加叹号有什么区别,结合页面翻译的源文件说清楚。
-带叹号的
*类的成员变量
*可以不用初始化
-不带叹号
*局部变量
*声明的时候必须初始化
--两者都可以被访问到,因为所有的方法都会合并到一个类方法中
图例:带叹号
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzAzNzIjNykTMzADNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
不带叹号
(3)在不同<% %>里定义的变量能否互相访问?教材55页“(3)JSP代码块”中的实例第四行右边的解释“错误,因a被定义在单独的jsp。。。”是否正确?
不正确两种定义的变量都可以被访问到,因为所有的代码块都会被合并带一个类方法中
(4)在页面中输出java变量a的值有哪两种方法,怎样写?
<%=a %>
<%out.print(a); %>
(5)Jsp指令有几种,分别是什么?
三种:page指令、include指令、taglib指令
<%@page 属性=" " %> //page的属性一般不要改,是用默认的就行,属性和属性之间要加空格,不然会有语法错误
插入:
<%@include file="filename"%> //静态的插入其他文件的内容,不可传参,且两个文件中不可定义相同的变量,因为会合并到一个源文件中,
与之对应的就是<jsp:include page="filename"/> // 动态的插入,就是执行到这才会编译,静态的就是提前编译好的,会生成两个源文件,可以传参数利用他的子标签<jsp:param name="变量的名字" value=''变量的值"/>
<%@taglib %>
(6)<%@include>指令和<jsp:include>动作元素都是包含,有什么区别?
第一个:属性是file、静态不可传参,生成一个源文件,而且两个界面中不可重复定义相同变量
第二个:属性是page、动态合并可以传递参数,对应两个类生成两个源文件。
(7)获取表单文本框输入的值用哪个内置对象的什么方法,输入是汉字的话会出现乱码,怎样解决?对于相同name的多个表单元素的值(如复选框)如何获取,用什么方法?
<% request.setCharacterEncoding("UTF-8");
String s=request.getParameter("tx");
%>
<%=s %>
5_1.jsp
<form action="5_2.jsp" method="post">
1<input type="checkbox" name="aaa">
2<input type="checkbox" name="aaa">
3<input type="checkbox" name="aaa">
<input type="submit" value="submit">
</form>
5_2.jsp
<% request.setCharacterEncoding("UTF-8");
String[] s = new String[3];
s=request.getParameterValues("aaa");
%>
<%for(int i=0;i<3;i++){out.print(s[i]);} %>
(8)页面间传递参数有几种方法?
1.使用jsp的forward或include动作
2.在jsp页面或HTML页面中利用表单传递参数
3.追加在网址后的参数传递或追加在超链接后面的参数
(9)理解request,session,application对象的生命周期,利用这几个对象进行数据共享的一对方法是什么?传参和共享都可以用来在页面间传递数据,有什么区别?(jsp的内置对象)
void request.setAttribute("key",Object);
Object request.getAttribute(String name);//与key保持一致
相当于封装了数据
传参制度能传字符串,共享可以传类对象,不能接收非空值会报500空指针错误,在之前要加个判断进行处理
request < session < application
request当请求改变的时候,本次周期结束,但是利用<jsp:forward page=""%> <jsp:param name=" " value=" "/>可以传递参数,同时延长了 request 的生命周期
sesson 会话,每一个用户都有一个会话,当用户改变的时候sessoin改变(换用另一个浏览器打开界面),在一个session下默认时长半个小时,在半个小时内没有用户的操作则session 会自动销毁。当然用户可以看到自己的信息,但是看不到其他人的。
在开始访问时候会分配一个id存到浏览器的cookie里面,也可以手动消亡invatidate()
application 生命周期最长,所有人都看得到(例如聊天框),当重新启动服务器的时候,创建新的application
****post and get 方法
默认的method 是get得到的参数会显示在地址栏上,而且数量有限制
post则相反,参数隐藏,上传无节制
(10)页面间跳转可以通过链接、重定向、转发,重定向用什么语句?转发用什么标签或语句?重定向和转发有什么区别?
链接:<a href="5_2.jsp? " target="_blank" rel="external nofollow" >跳转</a> //手动点击跳转
重定向:response.sendRedirect("5_2.jsp");//自动跳转,但是不能携带request的参数,但是可以跳转到任何一个界面,比如跳转到百度
转发:<jsp:forward page="文件的名字"/> //自动跳转,可以携带request的变量,但是只能在本网站中跳转,不能调到别的网站上去。
区别:1)只能使用<jsp:forward>在本网站内跳转,而使用response.sendRedirect跳转到任何一个地址的页面
(2)<jsp:forward>带着request中的信息跳转;sendRedirect不带request信息跳转。
(11)
1. 链接、重定向
null
null
sessionstr
applicationstr
2.转发
null
requeststr
sessionstr
applicationstr
3.换一个浏览器
null
null
null
applicationstr
4.重启服务器
null
null
null
null
页面的定时跳转或定时刷新
<%!int a=0 ;%>
<%out.print(a++); %>
<%response.setHeader("refresh", "2"); %>
5秒后跳转到其他界面
<%!int a=0 ;%>
<%out.print(a++);
%>
<%response.setHeader("refresh", "5;url=https://www.baidu.com/"); %>
--其他容易混淆的地方--
客户端和服务端,服务端会先处理,一般服务器的时间比客户端的时间要早
jsp和JS的区别:jsp是用来进行数据交互的,JS不行