欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

第十天3月3日之JSP

程序员文章站 2022-05-18 23:16:59
 1.不管有没有禁用cookie,第一次访问时服务器都会就进行url重写。 但是,第二次以后访问时,如果用户没有禁用cookie,服务器不会进行url 重写。如果禁用...


1.不管有没有禁用cookie,第一次访问时服务器都会就进行url重写。
但是,第二次以后访问时,如果用户没有禁用cookie,服务器不会进行url
重写。如果禁用了才进行url重写。这就是response.encodeurl(url);方法
的原理。它内部也就是做了这样的事。

2.如果使用的是response.setheader("refresh","2,url=.....");
则会对重写后的url的地址的jsessionid参数去掉。所以不要使用这个。
使用response.sendrridirect();方式


3.session会超时,银行是5分钟。5分钟后会是失效。再次访问时,会重新建立一个session

4.session内部是一个大map,存放的数据
(类,属性)
要存在硬盘上,必须实现序列化,否则回报异常。
接口。可以实验查看。钝化、活化;搁置、激活

5.cookie是不能存中文的,要进行base64编码。记住用户名案例,记住用户名

6.base64原理和编码和解码。有api在jdk中,包为sun.....
不能导入包,就网上查资料。案例:防止表单提交

base64 可以把任何东西变成字符。

base64编码就是把3个字节变成4个字节,3个字节是24位,24除以4等于6,不足的前面补0,就变成了4个字节。
最小0000 0000
最大0011 1111
区间是64个数。


7.md5算法(jdk的api中有)不能逆回去(在数学思想上,网上有一个字典可以查,表面上可以,其实不可以),
md5会编码成字节,就要用base64编码变回字符即逆回去

struts2中防止表单提交,也是生成一个令牌。


8.jsp九大内置对象是规范定义的。不管
jsp就是servlet。
jsp基本语法开发实际工作中不用,会面试。但是要学。

tomcat翻译jsp。

jsp中的java代码直接拿到servlet中,jsp中的body内容就是service方法
输出的内容在servlet中的out对象输出的。


jsp声明不用(在service方法外部定义
,是全局的,不能使用request和response等对象),
有线程安全问题。看servlet代码即可

演讲:servlet是运行在服务器端 的小程序。他的生命周期?

dom解析:node、element、attribute


9.jsp被翻译后的java文件,可以再tomcat的服务器中的work目录中
找到,一层一层找就是。


10.开发中首选静态包含

11.jsp常用动作标签:内部不能写注释。

12.iserroepage=false,默认是false,是否产生exception对象。
打印错误信息,我们还是要解决。

13.autoflush自动刷新,默认大小事8kb,我们不管。

14.所有的东西都要先保存到response缓存,再由response响应给浏览器。

jsp的out对象也有缓存,jspwriter。

15.关闭浏览器,默认一次回话结束。
再开一个浏览器,是重新开启一个新的回话。

但是,现在的浏览器再打开,也是同一次回话。以上面为准。


16.jsp中的page对象和pagecontext所表示的page范围
(一般不用,所表示范围太小)区分开来,
不是一个概念。

17.jsp中的request对象和response,只有结合转发才有用。

18、jsp中的session对象,只要是同一次回话,就可以在不同页面使用。
像查询结果这样的功能就不能存放在session。如果我们第一次看到了,
4条记录。如果服务器更新了数据,添加了数据,我们再次看到的还是
4条记录。用request就不会有这样的问题,请求完了,request就没了,
会重新发送请求。





老师笔记:

一、httpsession
1、客户端禁用了cookie,如何保持会话数据
https://localhost:8080/day10_00_session/servlet/showcartservlet

https://localhost:8080/day10_00_session/servlet/showcartservlet;jsessionid=111111 url重写。需要对本应用中的所有url地址都得重写。


string newurl = esponse.encodeurl(string url);
偷懒的:主页---为了更好浏览我们的网站,请不要禁用您的cookie
2、httpsession对象的状态转换
2.1配置session对象的超时时间。
修改web.xml

1


getmaxinactiveinterval
public int getmaxinactiveinterval()
returns the maximum time interval, in seconds, that the servlet container will keep this session open between client accesses. after this interval, the servlet container will invalidate the session. the maximum time interval can be set with the setmaxinactiveinterval method. a negative time indicates the session should never timeout.
returns:
an integer specifying the number of seconds this session remains open between client requests
see also:
setmaxinactiveinterval(int)

3、ie浏览器何时会开启一次新的会话
ie不同的版本:开启一个新的浏览器进程,是不是属于同一次会话,不定的。
4、base64编码:(很重要)
把3字节变为4字节:
10011100 01010011 10101111
00100111 00000101 00001110 00101111
每个字节做小数00000000 ~ 00111111 64个整数,每一个整数对应着一个可见字符。
base64可以把任何的字节变为可见的字符
二、jsp概述:
jsp=html+java
servlet:控制业务逻辑
jsp:显示
动态资源生成静态资源的,用户看到的永远都是静态资源,即看到的都是动态资源生成的结果。
学好jsp的关键:在写jsp的某部分内容时,一定要知道他在servlet中的位置。
三、jsp的基本语法
1、jsp模版元素:就是jsp中的html的内容。界面展示。(美工)建议先把模板弄好。
2、jsp脚本表达式 :
作用:把某个变量的值输出到页面上。(等同于out.write())
语法:
3、jsp的脚本片段:
作用:书写java逻辑
语法: 语句1;
语句2;
%>
4、jsp声明
作用:定义jsp对应的servlet的成员变量或方法
语法:
private int age = 100;
public void m(){
}
static{}
%>
5、 jsp注释
语法:
结果:被注释的代码,服务器根本不翻译。
实际开发中:除了下面要讲的指令。jsp中不能出现一行
四、jsp的指令:
作用:给服务器用的。
语法:
1、page:
language:指定jsp中使用的脚本的语言。默认值java,目前只支持java。
*import:导入中使用的类或包。作用和java中的import完全一样。
import="java.io.inputstream,java.util.date"
*session:指示是否创建httpsession对象。默认是true,创建。
buffer:指示输出字符流的缓存大小。默认是8kb。
*errorpage:指定出错时,转发到哪里去。取值就是一个uri地址。如果以"/"开头,它就代表当前应用。
配置全局错误提示页面:(不是转发)
web.xml

java.lang.exception
/error.jsp



404
/404.jsp

*iserrorpage:指示是否产生exception对象。true是产生。默认值是false
*contenttype:通知httpservletresponse输出时响应正文的mime类型和编码。
作用和response.setcontexttype="text/html;charset=utf-8"一样
*pageencoding:指示从磁盘上读取jsp文件时查的码表。
1、指示服务器读磁盘上的文件用的编码
2、同时制定contenttype使用的编码
*iselignored:默认是false。指示是否忽略el表达式。
2、taglib:引入外部定义的标签(重点)

3、include:实现包含(静态包含)
静态包含:2个页面对应一个servlet
动态包含:2个页面分别对应一个servlet。
五、jsp常用动作元素(jsp内置的标签)
jsp:include:动态包含
jsp:forward
jsp:param
六、jsp中的9个隐式对象(jsp对应的service中生成的那些局部变量)
jsp隐式对象名称 类型
request javax.servlet.http.httpservletrequest(域对象)
response javax.servlet.http.httpservletresponse
session javax.servlet.httpsession(域对象)
application javax.servlet.servletcontext(域对象)
config javax.servlet.servletconfig
page 当前jsp对应的servlet的实例
exception java.lang.throwable

out javax.servlet.jsp.jspwriter(和response.getwriter()作用完全一样)
pagecontext javax.servlet.jsp.pagecontext(用jsp时很重要)

三大作用:
1、本身是一个域对象,还能操作其他三个域对象中的数据
本身是一个域对象:范围是当前页面。
void setattribute(string key,object value)
void removeattribute(string key)
object getattribute(string key)
操作其他三个域对象中的数据:scope是一个常量:page_scope(页面范围pagecontext)|request_scope(请求范围servletrequest)|session_scope(会话范围httpsession)|application_scope(应用范围servletcontext)
void setattribute(string key,object value,int scope)
void removeattribute(string key,int scope)
object getattribute(string key,int scope)

查找方法:
object findattribute(string key):依次从pagecontext\servletrequest\httpsession\servletcontext中查找,找到为止。
2、获取其他八个隐式对象:用在普通类中。

3、提供了转发和包含的简易方法
pagecontext.forward("/scope/2.jsp");
pagecontext.include("");

七、四大域对象总结
表示的范围 map在哪个类中 pagecontext中的常量 备注
page pagecontext:map page_scope 开发几乎不用:练习时用一下
request servletrequest:map request_scope 开发中常用:仅限转发(a处理数据----转发b显示数据)。向该范围中放的数据,显示完毕后就没有用了,比如查询结果数据。
session httpsession:map session_scope 开发中常用:向该范围中存放的数据,仅供自己多次使用。比如购物车,登陆信息等。
application servletcontext:map application_scope 开发中用得少:要做好同步处理