Web阶段--JSP基础知识点

Web阶段–JSP基础知识点

一、引言

1.作用
用来生成动态网页的技术,与servlet类似
2.特点
1.所有的jsp文件都必须以".jsp"为结尾,同时可以放在web应用的任意目录下(除了WEB-INF)
2.访问时,与html类似,通过文件名访问
3.jsp文件开发成功后不需要定义配置文件,修改后也不需要重启服务器
3. servlet和jsp的取舍问题
1.servlet:在大量的java代码中嵌入少量的html标签,java代码的比重比较大 --- 文件名+Action
2.jsp:在大量的html标签中嵌入少量的java代码,html标签比重大 --- 文件名+View

二. jsp的原生标签

1.分类
1.脚本元素:用来向jsp页面中嵌入纯java代码
2.指令元素:用来定义描述当前jsp页面的特征信息
3.动作元素:用来完成网页中的动作(包含,跳转forward , 对象创建 )
2.脚本元素(脚本标签)
1.表达式脚本 <%=  java代码 %>
          作用:用来计算表达式的结果,并且默认输出到浏览器 (唯一一个有输出功能的标签)
          注意:里面的java代码不能以;结尾
2.声明脚本 <%! java代码  %>
          作用: 用来定义 函数 和 变量 
3.普通脚本  <% java代码  %>
          作用: 用来定义一般的java代码 (尤其流程控制代码),除了不能定义函数
3.指令元素(页面指令 包含指令 标签库指令)
1.页面指令:通过属性来描述定义当前页面的信息
		语法: <%@page   属性=值   属性=值%>
	I.重要的页面指令属性
		a.contentType:用来定义响应内容的类型以及编码------给浏览器看
		 	<%@page contentType="text/html;charset=字节编码(GBK)" %>
		b.pageEncoding:用来定义当前jsp页面的编码方式------tomcat服务器看的
		c.import:等价于java代码里的import
			 <%@page import="包名" %>
		d.isELIgnored:boolean类型属性,默认值为通常设置为false,表示当前页面支持EL技术
		e.session:boolean类型属性,默认值为true,控制了jsp页面中session的创建时机
				注意:true表示"饿汉式"创建session对象,false表示"懒汉式"
	II.了解属性
		a.errorPage:值为地址,表示如果当前页面出现异常,则跳转到属性指定的资源程序,底层采用forward方式跳转到下一个资源,所以路径使用的是"网名"
		b.isErrorPage:boolean类型属性,表示当前页面是否为处理错误的页面,默认值false。isErrorPafe=true的页面里有一个可以直接使用的java对象exception
		c.isThreadSafe = true  线程是否安全
		d.language = "语言名称"  所使用的编程语言
2.标签库指令
	     <%@taglib  uri=" 标签库的全球唯一标识"   prefix=”简称,前缀“ %>
3.包含指令【了解】
		语法: <%@include  file="被包含的jsp文件的名称" %>
		功能:将其他jsp页面的源代码直接包含(融入)到当前jsp页面里---jsp特有,也称为"静态包含",或者 “编译前包含” , 合并的是源代码
		作用: 在jsp领域做代码复用
		缺陷:只能在jsp领域代码复用,局限性比较大; 可以将需要复用的代码定义成普通的java程序,复用性更高

4.动作元素(包含,转发)
1. 包含动作 【重点】
	a.语法: <jsp:include  page="被包含网页资源的网名" />
	b.功能: 将其他网页资源的“输出结果”包含到当前jsp页面里 --- 合并输出结果 , 也称为“动态包含”或者“编译后包含”
	c.作用:做复杂网页的显示 ( 可能是由多个jsp包含完成)
2.  转发动作 【了解】
	a.语法:<jsp:forward page="下一个资源的网名"/>
	b.功能:与servlet里的forward完全一致( forward动作一般发生在servlet Action程序中 )

三、 Jsp的运行原理

1.html技术: 当client发出html请求后,tomcat根据请求里的文件名找到相应的html文件,将其直接发送给client浏览器,浏览器对html文件逐行解释执行,最终展示网页
	注意:“html技术是一种运行在client端的技术”
2.servlet技术:当client发出servlet请求后,tomcat会根据请求里的网名找到对应程序的对象,调用service方法运行,将程序的执行结果发还给client浏览器显示(client收到的执行结果)
	注意:”Servlet技术是运行在server端的技术“
3.jsp技术: 当client发出jsp请求后,tomcat会找到指定的jsp文件,将其翻译成java程序(servlet),然后按照servlet运行方式执行(client收到的执行结果)

在这里插入图片描述

四、JSP、Servlet里HttpSession的区别

jsp:采用"饿汉式"创建session对象,只要访问jsp页面的client,tomcat都会为其创建session
Servlet:采用"懒汉式"创建,需要client访问的程序显示调用request.getSession(true)创建

五、隐含对象(内置对象)

1. 概念
jsp页面里创建好,一直存在的,定义好名字的,可以直接使用的对象
2. 九大隐含对象
request  ----   HttpServletRequest  ( servlet程序中使用过的request对象)
response ---- HttpServletResponse
session  ---- HttpSession ( tomcat采用饿汉式为jsp创建session对象)
application  ----  ServletContext
config   ----   ServletConfig (关于一个servlet的描述信息,是application的一部分)
out  ---- JspWriter(等价于servlet里使用过的PrintWriter)
page  ---- this
exception  ---- Exception (只有isErrorPage=true的jsp页面里有 )
pageContext  ---- PageContext (jsp特有的,功能最强大的隐含对象)
     注意: 这些隐含对象只能在 表达式脚本 里 和 普通脚本里使用,不能在声明脚本里使用
3. 隐含对象的本质
隐含对象本质就是servlet程序service方法的局部变量,在当前页面代码翻译前,tomcat为service方法创建和初始化了这些局部变量。(声明脚本代码不属于service方法,不能使用service方法的局部变量)
4. PageContext对象
1.是一个作用域,可以存放命名属性
          存数据: pageContext.setAttribute("name",value);    
          取数据:Object value = pageContext.getAttribute("name");
          生命周期短,只在当前jsp页面中生效
         作用: 用来在jsp页面 与 嵌入的其他技术(EL  JSTL) 之间做数据传递
2)管理其他三个作用域里的数据

在这里插入图片描述

3.可以获取其他八个隐含对象
       getRequest()  getSession() getApplication()  getResponse()  getOut() ......
4.可以 include  和 forward

六、EL技术

1.使用EL技术的原因-----> 干净的jsp页面(无脚本标签 — 尽量减少)
1.声明脚本  ---  函数定义成普通java类  , 里面的变量线程不安全(不建议定义)
2.表达式脚本  ----  输出java中的数据  (使用EL技术替换)
3.普通脚本  ----  用来定义一般的java代码(使用JSTL替换 )
2. EL技术使用前的准备
1.使用页面指令声明当前页面支持EL技术  <%@page isELIgnored="false" %>
2.语法:${EL代码}
3.功能:计算表达式的值,并且默认输出浏览器
	a.做运算
       ${ 1+1 } ${ 3>4 } <==> ${ 3 gt 4 }  ${ empty 属性名 } ${ !empty 属性名}
	  注意:empty等价于null
	b.可以访问请求参数并打印
		语法:使用关键字param访问
		${ param.请求参数名 } <---> <%= request.getParameter("name") %>
	c.可以访问作用域里的命名属性
		i:基础语法:使用关键字pageScope、requestScope、sessionScope、applicationScope 访问
				${  xxxScope.命名属性名 }
		ii:特殊的写法:${ 变量名 }---EL认为变量是一个命名属性,EL会去所有作用域里查找这个变量的value,按照生命周期由短到长的顺序查找,找到第一个返回。等价于 pageContext.findAttribute("..")
	d.可以访问对象的属性

		i:前提: 如果获取的 ”命名属性“ 值是一个对象,可以使用el进一步访问对象的属性
		ii:语法:  ${ 对象 . 属性名 }
		iii:建议: 在将对象存入作用域时,命名属性的名最好与 变量(对象名)保持一致
		iv:原理: el在执行时,会将给定的属性名首字母变大写,前面加get,去类里访问getXxx()
		v:扩展: el访问的是类里的getXxx() , 根本不在乎是否有这个实例变量。反之如果类里的功能函数不是以get开头,则el无法访问调用
		vi:特例: 在el技术里,只承认jsp页面中的pageContext隐含对象(其他八个不认识)
                   --- 请使用el技术调用request对象中的getContextPath()  
                            ${ pageContext.request.contextPath }
                   --- 请使用el技术访问并打印当前client对应的session的id值
                            ${  pageContext.session.id }

2.EL其他标签【了解】
1. 可以访问浏览器上的cookie
	语法:通过关键在cookie访问  ${  cookie.cookie的名字 } --- cookie对象
                  ${  cookie.cookie的名字. value }
2. 可以访问配置文件中的初始化参数
	语法:通过关键字initParam访问  ${ initParam.初始化参数名 }
3. 可以访问集合里或者数组中的一个元素
       List<String> list   ---- 请用el打印list里的第二个元素      ${ list[1]  }
      List<Person>  list ---- 打印第二个元素的name属性值    ${  list[1]["age"]}
      Map<String,Student>  ----  访问第二个元素的name属性    ${ map.key  }
       map.put("one",stu)  ---  { map.one.name }  --- { map["one"]["name"]}

七、JSTL — jsp标准标签库

1. Jstl使用
1.apache组织定义的一组 ”用户自定义标签“
2.使用标签库需要引入相关当 jar包 和 配置文件
3.标签的构成:  core(平常使用)    fmt    sql  ....
4.准备: 在jsp页面中明确导入核心(core)标签库
         <%@taglib  uri=" http://java.sun.com/jsp/jstl/core"   prefix="c" %>
2 条件判断标签
<c:if  test="boolean值">  标签体  </c:if>
   如果test的值为true,则执行标签体;反之不执行。 这个标签没有对应的else
3. 循环标签----遍历集合(所有的集合 List Set Map )
1.遍历List或者Set集合
   <c:forEach  var="变量名"   items=“${ 集合对象 }”  varStatus=“循环状态变量”>
       如果需要打印得到的数据,可以通过 ${ 变量名.属性名 }
   </c:forEach>
   注意: 在标签属性赋值的过程中,只有String,数字和boolean类型值可以直接通过字面值来赋值,其他类型的数据必须先通过EL获取值,然后再赋值
   varStatus:循环状态变量,可以通过访问它的count属性,来做循环计数 
									${ varStatus的变量属性.count }
2.遍历Map集合
   <c:forEach  var="变量名"  items="${Map集合对象}"  varStatus="">--- 底层采用键值遍历
         如果需要打印获取到的数据,可以通过 ${ 变量名.key }   ${变量名.value }
   </c:forEach>
4.JSTL其他标签
1. 定义变量的标签 set 【记住】
	<c:set  var="变量名"  value=“值”  scope=“作用域 page(默认)|request|session|application”/>
  	<c:set var=""  scope="">  值 </c:set>
2. 生成地址的标签  url 【记住】
     <c:url  value="资源的网名"  var=“”>
          <c:param  name="" value=""></c:param>  --- 用来向地址上拼接请求参数的
     </c:url>
     a.自动将给定的网名变成uri,在网名前面补齐当前应用名
     b.自动检测浏览器是否支持cookie,如果发现不支持,则自动将当前网页所使用的session的id拼接到地址后面
     c.利用自标签将多个请求参数拼接到地址后面
3. 重定向标签
     <c:redirect  url="下一个资源的网名"></c:redirect>
4. 做网页导入的标签
     <c:import var="变量名"  url="被导入的网页的地址"/> 
     功能类似于动态包含<jsp:include> , 可以导入任意网页资源
5. 输出标签
     <c:out  value="输出的值" escapeXml=“true|false” /> 
6. 移除命名属性标签
     <c:remove var="命名属性名"  scope="page|request|session|application"/>
     注意:如果没有定义scope属性,则表示移除所有作用域里叫name的命名属性

八、MVC思想

1. 概念
在软件的设计过程中,人为的有意识的将软件的功能划分为3个层次,分别是 M(module 模型),V(view视图),C(controller 控制器)
2. MVC在现有web应用中的体现
1)V(view)---视图,显示逻辑,与用户交互的通道(表单页面--数据采集;表格页面--数据展示)
				现有应用中的View程序 -- jsp 和 html
2)C(controller---控制器,控制应用请求的流程走向,现有的应用中Action程序--servlet
3)M(module)---模型层,对显示世界功能的模拟,通过一个具体的业务函数完成业务需求
				现有应用中service和dao对应模型层 -- corejava  jdbc

在这里插入图片描述

3. 好处
1.各司其职, 程序功能单一,便于多个程序员协同开发,提高开发效率
2.弱耦合 : 分层    接口    反射   配置文件
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
weixin102旅游社交微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值