天天看点

javaweb学习记录--jsp

仅供自己复习使用

(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)页面中定义变量加和不加叹号有什么区别,结合页面翻译的源文件说清楚。

-带叹号的

*类的成员变量

*可以不用初始化

-不带叹号

*局部变量

*声明的时候必须初始化

--两者都可以被访问到,因为所有的方法都会合并到一个类方法中

图例:带叹号

javaweb学习记录--jsp

不带叹号

javaweb学习记录--jsp

(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不行

继续阅读