今天开始学习JSP,在这里简单的记录一下:
1:使用JSTL的时候,将网页上的四个包都下载下来,然后直接复制到webContent目录下的WEB-INF文件夹下的lib包中,不用eclipse中导入。切记必须是四个包,否则就有可能会缺失你所需要的那个包中的类,很重要。
2:forward动作要求在使用forward动作前,不能向客户端输出任何内容,否则会报错,但是我还没有遇到,这里先记录下。(但是后来我发现好像可以有一些html代码输出到客户端,这和response的重定向一样,为什么呢?查了一下,可能是因为不能有html输出是指不能有html代码送到浏览器,但是现在的服务器都有缓存机制,即cache,这就意味着,除非关闭cache,或者使用flush强制输出,否则,在方法动作实施前,还是有一些代码可以被输出.这个一些取决于缓存的大小.
3:page指令中,contentType中的charset和pageEncoding的区别是:后者是服务器端的jsp文件,要告知jsp引擎以何种方式编译,这个时候jsp还没有被编译成servlet,然而前者是在编译后,服务器响应时,servlet告知客户端使用何种编码方式解码显示,所以,后者的优先级要高于前者。
4:request的作用范围:request的作用范围是一个页面向另一个页面提出请求到请求完成之间.如果我们使用页面一forward到页面二,页面二有设置了超链接页面,这样的话,request的作用范围就是页面一到页面二,如果在页面一中的变量,到了页面二中可以使用,但是在超链接页就无法使用了.
5:JSP中文乱码的问题,正好学到了,觉得以后一定用得上,在此记录:
a:将page指令的pageEncoding设置为"UTF-8",如果不行,在获得字符串值后,通过String类进行改变编码,例如new String(str.getBytes("ISO-8859-1"),"utf-8"),为什么是ISO-8859-1呢,那是因为这是jsp的默认编码.
b:将page的contentType的charset的值改为GB2312,然后也可以通过string类的方式转码.
6:sessio的销毁:session的销毁有三种:一种是使用invalidate()方法手动销毁,二是session超过了设定的时间后自动销毁,三是服务端停止时,自动销毁,注意的是客户端(浏览器)停止不会导致session销毁.
7:过滤器的执行顺序:今天看到过滤器的相关内容,想到如果有多个过滤器如何得知并控制它们的执行顺序,我用的这本书很烂,只是简单的介绍了一下过滤器,完全没有提交这个,我只好到网上查找相关知识,结果很快就找到了,只需要在web.xml文件中设置过滤器配置信息时,用<filter-mapping>标签内填写你的过滤器类名,然后在web.xml文件中控制不同<filter-mapping>的顺序就可以了控制了,至于<filter-mapping>的具体内容填写,请移步here.