本篇博客知识点
- page指令细节,Page指令的几个常用的属性
- include指令细节:静态导入和动态导入
- 页面实现安全登录
page指令细节
在JSP页面中可以设置page指令的属性,用快捷键AIT+/可以得到提示
其中下面几个是有些细节要注意的,其他的默认就好了
page指令细节—session属性:默认为true ,可以正常当servlet里的HttpservletSession使用
<body>
<h2>Page指令细节</h2>
<!-- Page中的session指令为:true时;设置name属性、并且用EL表达式输出来 -->
<%
session.setAttribute("name", "Jack");
%>
${name}
</body>
页面显示结果:正常!
当session属性:设置为false时,就不能使用了
page指令细节—errorPage属性和isErrorPage属性:
isErrorPage属性:是用来将这个JSP页面设置为错误页面的
errorPage属性:是当页面发生错误时,可以直接跳到我们写好的错误页面的
页面有如下代码 0为除数。
<body>
<h2>Page指令细节</h2>
<!-- Page中的session指令为:true时;设置name属性、并且用EL表达式输出来 -->
<%
session.setAttribute("name", "Jack");
%>
${name}
<%
int i = 10%0;
%>
</body>
同时设置好我们的跳转页面,以及isErrorPage属性errorPage属性设置好
访问页面的时候就,直接回跳转过去,同时还可以拿到异常原因
include指令细节:静态导入和动态导入
静态导入
两个页面PageJsp.jsp页面,导入IncludeOne.JSP代码。
JSP页面生成时候会自动帮我们写好一段代码
静态导入好竟然出错了
我把错误信息翻译出来
原因很简单就是重复命名了变量。
当我把重复命名的代码去掉就没问题了(自动生成的那段代码)
这边错误也没了
静态页面导入之后的结果~
动态导入
而动态导入则不会出现前面的错误(重复命名变量)
结果很友好啊! 哈哈哈
充满好奇心的我要去,看看Tomcat底层代码。为什么静态导入会出错,而动态导入不会~
一打开服务器底层文件,我发现没有我要静态导入的includeOne生成的java文件
打开PageJsp生成的java文件,我发现原来静态导入,直接是把需要导入的JSP代码贴进来,而动态导入是调用一个方法。这也是造成静态导入会重复命名变量名的原因了
所以总结了一下
<%@include file="include.jsp" %>
<!--
静态导入:用@include指令,Tomcat把导入及被导入页面的代码都翻译到
_jspService()方法中,生成一个servlet类。
该方式下是共享局部变量(开发时注意不要变量重复声明),reqeust,response。
开发时"被导入页面"一般不写html和body等"导入页面"已经有的部分,否则重复了
-->
<br/>
<jsp:include page="include2.jsp"></jsp:include>
<!--
动态导入:用jsp:include标记,Tomcat把导入及被导入页面的代码分别翻译成独立的servlet类。
每个页面有自己的_jspService()方法和对应的servlet类----两个独立的servlet类,但前一个通过 请求包含 调用另一个。
该方式下是不共享局部变量(开发时变量相同没关系,是相互独立的)。但reqeust和response是共享的。
开发时"被导入页面"要自己写html和body等标记,以形成自己独立的页面。
-->
页面实现安全登录
当我们与服务器建立联系后,想要访问主页(这里是PageJsp.jsp),要登录才能让他访问。但是他们往往可以通过地址栏输入直接访问,要怎么防止呢?
两边
1.在登录这儿,登录成功后在session中设置一个 login属性。
2.在主页那儿判断,拿不到这个属性一律拒绝访问
这个时候怎么从地址栏输入都无法范文主页就可以达到安全访问的目的~