JSP 学习笔记bruce.docx
- 文档编号:30299081
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:40
- 大小:115.61KB
JSP 学习笔记bruce.docx
《JSP 学习笔记bruce.docx》由会员分享,可在线阅读,更多相关《JSP 学习笔记bruce.docx(40页珍藏版)》请在冰豆网上搜索。
JSP学习笔记bruce
1WhatisJSP.
2Why,WhereandHowJSP.
3JSPPrinciple.
4BaseJSP(Statement,Script,Expression,Direction,Action).
5JSP,Lifecycle.
*******************************************
1WhatisJSP.
1)什么是JSP
JSP:
JavaServerPage,JavaEE组件,本质上是Servlet。
运行在WebContainer.接收HttpRequest,生成HttpResponse
JSP使得我们能够分离页面的静态HTML和动态部分。
2Why,WhereandHowJSP.
1)为什么需要JSP
Servlet:
javaclass--->out.println("");
Jsp:
scriptlanguage--->
2)Jsp用在哪里
UI,表现层
Servlet----->Controll
图解JSP与Servlet的分工合作(比较没有JSP之前Servlet是如何唱独角戏)
a)单独使用Servlet。
b)单独使用JSP(Model1)。
c)结合JSP和Servlet(Model2)。
3)如何开发Jsp
Jsp文件后缀名--->.jsp
Jsp文件的组成--->html+jsp脚本元素(Java语言编写)
不用在web.xml中配置
http:
//localhost:
8080/baseJSP/welcome.jsp
<%!
Stringwords="Welcometoourhomepage,welcometoSD0702...";%>
<%=words%>
3JSPPrinciple.
图解运行原理
4BaseJSP(Statement,Script,Expression,Direction,Action).
1)Jsp声明<%!
%>
声明类成员
<%!
inti=100;%>
<%!
Stringword="春田花花大学";%>
<%!
privateintcounter=0;
publicintcount(){
return++counter;
}
%>
<%=count()%>
2)Jsp脚本<%%>
_jspService()中的局部代码
<%System.out.println("Hi,IlikeJSP.");%>
<%Connectionconn=DriverManager.getConnection();
Statementst=con.createStatement();
Stringsql="select...";
ResultSetrs=st.executeQuery(sql);
%>
比较
<%!
inti=100;%>//成员变量
<%inti=100;%>//_jspService()方法中的局部变量
<%!
publicvoidhello(){}%>
<%publicvoidhello(){}%>//error
3)表达式<%=%>
输出数据至页面的当前位置
<%="Hello,JSPworld!
"%>
<%=name%>//<%!
Stringname="GiGi";%>
<%=newjava.util.Date()%>
4)指令<%@%>
page
include
taglib
page指令---->import,session,isThreadSafe,errorPage,etc
import--->导入其它的包或类
<%@pageimport="java.util.Date"%>
<%@pageimport="java.sql.*"%>
<%@pageimport="java.util.*,java.io.*,.*"%>
session--->当前Jsp是否参与会话default--->true
<%@pagesession="true"%>request.getSession();
<%@pagesession="false"%>
session="true"时,可用内建对象session直接访问会话
<%=session.getAttribute("name")%>
-----------以下属性不再使用---------------------------
isThreadSafe--->当前Jsp页面是否线程安全default--->true
<%@pageisThreadSafe="true"%>普通的Servlet,可以并发处理用户请求
<%@pageisThreadSafe="false"%>相当于Servlet实现了SingleThreadModel
接口,不能并发处理请求(强烈要求禁止使用该属性)
-----------以上属性不再使用---------------------------
errorPage
isErrorPage--->Jsp页面中出现异常的处理方式
对于有可能出现异常的页面
<%@pageerrorPage="error.jsp"%>
对于处理异常的页面
<%@pageisErrorPage="true"%><%=exception%>内建对象
contentType--->设置Jsp内容的MIME类型
<%@pagecontentType="text/html;charset=gbk"%>
等价于Servlet:
response.setContentType("text/html;charset=gbk");
include指令--->file
把目标页面的内容包含到当前页面,产生页面叠加以后的输出效果
<%@includefile="title.html"%>
<%@includefile="booter.jsp"%>
在Jsp编译的时候被处理
taglib指令(放在JSTL处详细讲)
<%@tagliburi="prefix="tree"%>
gen/>//产生一个默认的树 自定义标签(可选) 5)动作 actionNameattributeName=attributeValue/> jsp: forward jsp: include jsp: useBean jsp: setProperty jsp: getProperty forwardpage=""/> forwardpage="b.jsp"/>相当于Servlet中通过RequestDispatcher.forward() 还可以传参数 forwardpage="b.jsp"> paramname="name"value="narci"/> forward> includepage=""/> includepage="b.jsp"/>相当于Servlet中通过RequestDispatcher.include() 与<%includefile=""/>比较: 动作在运行期处理 可以传参数 includepage="b.jsp"flush="true"> paramname="name"value="narci"/> include> flush属性 flush指示在读入包含内容之前是否清空任何现有的缓冲区。 JSP1.1中需要flush属性,因此,如果代码中不用它,会得到一个错误。 但是,在JSP1.2中,flush属性缺省为false。 由于清空大多数时候不是一个重要的问题,因此, 我的建议是: 对于JSP1.1,将flush设置为true; 而对于JSP1.2及更高版本,将其设置为关闭。 Jsp中的注释: a、java方格注释编译器会忽略掉此类注释中的内容 <%--urcomments--%> <%//urcomments%> <%/*urcomments*/%> <%//newjava.util.Date()%> b、html风格注释编译器会执行此类注释中的代码 --urcomments--> out.println(" --urcomments-->") --newjava.util.Date()--> 例子: 1)关于外星人的问卷调查 我欢迎外星人进入我们的世界,帮助我们发展。 我害怕外星人,无法接受他们进入我们的世界。 外星人很神秘,我不知道存不存在外星人。 我喜欢听UFO的故事,但也许那只是一些很好玩的故事而已。 不要和我谈论外星人,地球人已经很复杂了。 如果有外星人,我想和他们说: 嘿嘿,我们可以做朋友么? 2)NumberGuess.jsp 猜一个数字,如果猜对显示恭喜信息,猜错则提示客户猜的数字太小还是太大了。 5JSP,Lifecycle(与Servlet的生命周期比较). //JSP容器第一次装载jsp文件时调用一次 publicvoid_jspInit(){ System.out.println(this.getClass()+": entering_jspInit()..."); } //每个请求都要调用一次 publicvoid_jspService(HttpServletRequestrequest,HttpServletResponseresponse) throwsjava.io.IOException,ServletException{ } //jsp文件被修改时,JSP容器会销毁旧的jsp文件对应的对象, //重新装载一次更新后的jsp文件的内容(只调用一次) publicvoid_jspDestroy(){ System.out.println(this.getClass()+": entering_jspDestroy()..."); } 6.homework 1)好又多优惠政策 购买金额超过500RMB有90%折扣 购买金额超过1000RMB有85%折扣 购买金额超过1500RMB有80%折扣 购买金额超过2000RMB有75%折扣 购买金额超过10000RMB有70%折扣,赠送会员卡一张 2)九九乘法表 day2 1Jsp调用JavaBean 2异常处理 3JAAS实现安全(可选) ************************************************************** 1Jsp调用JavaBean 分离页面的显示代码和业务逻辑代码,将业务代码放到后台的JavaBean中。 减少了JSP中的脚本代码,便于维护和复用。 JavaBean: 1)无参数的构造方法(默认构造方法) 2)标准getter、setter方法 3)如果要支持RMI的,要实现Serializable jsp: useBean--->在Jsp页面中使用一个JavaBean useBeanid=""class=""scope=""/> id: javaBean对象名 class: beanclass的位置 scope: javaBean对象的共享范围(page,request,session,application) page: 当前页面范围 request: 同一个请求范围forward,include session: 同一个会话 application: 同一个应用ServletContext JSP内建对象(直接可是使用,无需我们重新定义) 例子: Student useBeanid="stu"class="vo.Student"scope="session"/> 等价于 <% Studentstu=(Student)session.getAttribute("stu"); if(stu==null){ stu=newStudent(); session.setAttribute("stu",stu); } %> 可以用表达式获得bean的值 <%=stu.getName();%> 对JavaBean的属性赋值 1) setPropertyname=""property=""value=""/> name: JavaBean对象名 property: JavaBean属性名 value: 属性值 setPropertyname="stu"property="name"value="Bobo"/> 等价于 <% stu.setName("Bobo"); %> 可以嵌套JSP表达式 setPropertyname="stu"proprty="name" value='<%=request.getParameter("name")%>'/> 2)设置JavaBean的属性值 setPropertyname=""property=""param=""/> param: 对应着request中输入域的名 age: ... packagevo; publicclassStudentimplementsjava.io.Serializable{ privateStringname; publicvoidsetName(Stringname){this.name=name} publicvoidgetName(){returnname;} ... } setPropertyname="stu"property="age"param="age"/> 3)JavaBean中的属性名与form中输入域的名字保持一致的话,可以使用通配符* 一次设置所有字段的值。 setPropertyname=""property="*"/> name: sex: age: packagecom; publicclassStudentimplementsjava.io.Serializable{ privateStringname; privateStringsex; privateintage; publicvoidsetName(Stringname){this.name=name} publicvoidgetName(){returnname;} ... } setPropertyname="stu"property="*"/> 获得JavaBean的值 getPropertyname=""property=""/> getPropertyname="abc"property="name"/>等价于<%=abc.getName()%> 2JSP中的异常处理 1)try/catch/finally/throws/throw 2)errorPage,isErrorPage <%@pageerrorPage="error.jsp"%>需要错误处理的页面 <%@pageisErrorPage="true"%>错误页面,有一个隐式对象exception可用 <%=exception%> 产生内建对象exception,可通过它获得异常信息 3)声明的方式处理异常 web.xml RuntimeException: java.lang.ArithmeticException java.lang.NullPointerException java.lang.ArrayIndexOutOfBoundsException Java中的RuntimeException及其子类是不需要处理的(try/catch),因为所有的 RuntimeException总是可以通过优化代码来避免, 这种异常被称为“UncheckedException”。 思考: 三种异常处理方式同时启动用,那个优先级高? 作用域越小,起作用的优先级越高。 CheckedException 注意: 要使得页面自动跳转到错误页面,必须关闭浏览器的“显示友好HTTP错误信息”选项 publicvoid_jspService(HttpServletRequestrequest,HttpServletResponseresponse) throwsjava.io.IOException,ServletException{ //只处理这两种兼容的异常 } 3JAAS实现安全JavaEE规范之一,实现JavaEE应用程序安全性的一个重要途径 JavaAuthenticationandAuthorizationService Java认证(Authentication)与授权(Authorization)服务 (要求: 会用! 不要求深入理解) Web端的认证方法有: BASIC、FORM、DIGEST、CERTIFACATE 1)在TomcatServer中配置新用户与角色 %TOMCAT_HOME%/conf/tomcat-user.xml xmlversion='1.0'encoding='utf-8'? > -------------------------------------------------------------------- 为什么tomcat可以使用tomcat-user.xml作为它保存用户和角色信息的文件? 因为在server.xml中,有以下配置: type="org.apache.catalina.UserDatabase" description="Userdatabasethatcanbeupdatedandsaved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml"/> --------------------------------------------------------------------- 2)声明安全性约束(指明受限资源) web.xml 3)选择认证方式(使用标准的FORM方式) web.xml 如果是BASIC认证: 5)步可以不用。 如果是FORM认证: 4)声明安全性角色及与用户的映射关系 web.xml 5)标准的表单(FORM认证才需要) action的值 用户名、密码字段的名称都是固定的(规范)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 学习笔记bruce 学习 笔记 bruce