6、动态⻚⾯技术(JSP/EL/JSTL)、MVC

1 JSP技术

1.1 概念

Java Server Pages: java 服务器端⻚⾯
 原理: demo6.jsp 翻译成 demo6_jsp.java(间接继承HttpServlet),
       再编译成 demo6_jsp.class, 最后由响应写出到客户端作为html显示
       翻译后的java文件在work文件夹中, 修改jsp需要刷新页面才能重新翻译
         jsp              java
       html元素          out.write("html元素")
       <%%>             service方法中的java代码
       <%=表达式%>       out.print(表达式);
       <%!类的成员 %>     类的成员
	
原理:JSP本质上就是⼀个Servlet
JSP在第⼀次被访问时会被Web容器翻译成servlet,再执⾏,过程:
第⼀次访问 → helloServlet.jsp → helloServlet_jsp.java → 编译运⾏
PS:被翻译后的servlet在 Tomcat 的 work ⽬录中可以找到。

1.2 JSP脚本和注释

脚本: <%java代码%>
       <%=表达式%>
       <%!类的成员 %>
  注释: //java注释(java脚本中)      jsp中可见, java中可见
        <!--html注释-->           jsp中可见, java中可见, html可见
        <%-- jsp注释 --%>         jsp中可见

1.3 JSP指令

 指令: <%@指令 %>
        page: language - 只支持java
              extends
              isELIgnored - 是否忽略EL表达式,false-不忽略
              errorPage - 相当于出现异常后转发
              
        include: 静态页面包含  file="服务器端path"
           特点: 被包含的页面[demo7]不会翻译成java文件, 直接将内容嵌
           入包含页面[demo6]中
           
        taglib: 引入标签库[类库] url="类库地址"  prefix="前缀"

1.4 JSP的内置对象

在jsp⻚⾯中不需要获取和创建,可以直接使⽤的对象。
JSP⼀共有9个内置对象:
在这里插入图片描述
内置对象:
参数: request, response, config
域对象: application, session(session=true), pageContext
输出: out - JspWriter(自带8kb缓冲区,关闭缓冲区 buffer=none)
异常: exception(isErrorPage=true)
自己: page

        pageContext:
         作用1: 作为域对象使用, 可以操作其他三个域对象
         作用2: 可以获得其他8个内置对象  getXXX()
         作用3: findAttribute(name)

1. out对象
out的类型:JspWriter
out作⽤就是向客户端输出内容,⽅法:out.write()
out缓冲区默认8kb【buffer="8kb"】,可以设置成0,代表关闭out缓冲区,内容将直接写到respons缓冲区
2. pageContext对象
JSP⻚⾯的上下⽂对象,作⽤如下:
1. pageContext是⼀个域对象,范围:当前⻚⾯
2. pageContext可以向指定的其他域中存取数据
setAttribute(String name, Object obj, int scope)
getAttribute(String name, int scope)
removeAttrbute(String name, int scope)
findAttribute(String name)
依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找。
四⼤作⽤域的总结:
	page域:当前JSP⻚⾯范围
	request域:⼀次请求
	session域:⼀次会话
	application域:整个web应⽤
3. 可以获得其他8⼤隐式对象
例如:pageContext.getRequest(),pageContext.getSession()等。

1.5 JSP标签(动作)

  1. ⻚⾯包含(动态包含):<jsp:include page=“被包含的⻚⾯”/>
  2. 请求转发:<jsp:forward page=“要转发的资源” />
    思考:静态包含与动态包含的区别?

2 EL 技术

2.1 EL 表达式概述

概念:Expression Language 表达式语⾔,表达式可以嵌⼊在JSP⻚⾯内部。
作⽤:要替代和简化JSP⻚⾯中脚本的编写。
语法:${表达式}
注意:jsp默认⽀持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp⻚⾯中所有的el表达式
2. \${表达式} :忽略当前这个el表达式

2.2 使⽤

2.2.1 运算

运算符
	1. 算数运算符: + 、- 、* 、/(div) 、%(mod)
	2. ⽐较运算符: > 、<、>、=、<=、==、!=
	3. 逻辑运算符: &&(and)、||(or) 、!(not)
	4. 空运算符: empty
		功能:⽤于判断字符串、集合、数组对象是否为null或者⻓度是否为0
		${empty list}:判断字符串、集合、数组对象是否为null或者⻓度为0
		${not empty str}:表示判断字符串、集合、数组对象是否不为null 
		并且 ⻓度>0

2.2.2 获取值

el表达式只能从域对象中获取值
语法:
1. ${域名称.键名}:从指定域中获取指定键的值
域名称:
	pageScope → pageContext
	requestScope → request
	sessionScope → session
	applicationScope → application(ServletContext)
	举例:在request域中存储了name=张三
	获取:${requestScope.name}
	
2. ${键名}:表示依次从最⼩的域中查找是否有该键对应的值,直到找到为⽌。
等同于findAttribute(String name)

3. 获取对象、List集合、Map集合的值
	1. 对象:${域名称.键名.属性名}
	本质上会去调⽤对象的getter⽅法
	
	2. List集合:${域名称.键名[索引]}
	3. Map集合:
	${域名称.键名.key名称}
	${域名称.键名["key名称"]}
	
		举例:
		EL获得普通字符串
		EL获得User对象的值
		EL获得List<String>的值
		EL获得List<User>的值
		EL获得Map<String, String>的值
		EL获得Map<String, User>的值
		EL获得Map<String, List<User>>的值

2.2.3 隐式对象

el表达式中有11个隐式对象
pageScope、requestScope、sessionScope、applicationScope
	获取JSP中域中的数据
	
param、paramValues
	接收参数
	等同于:request.getParameter()、request.getParameterValues()

header、headerValues
	获取请求头信息
	等同于:request.getHeader(name)

initParam
	获取全局初始化参数
	等同于:this.getServletContext().getInitParameter(name)
	
cookie
	WEB开发中cookie
	等同于:request.getCookies()、cookie.getName()、cookie.getValue()
	
**pageContext
	可以获得其他⼋⼤对象
	重点:${pageContext.request.contextPath}:动态获取虚拟⽬录**

3 JSTL 技术

3.1 JSTL 概述

JavaServer Pages Tag Library ,JSP 标准标签库,可以嵌⼊在JSP⻚⾯中使⽤标签的形式完成业务逻辑等功能。是由Apache组织提供的开源的免费的jsp标签。JSTL标准标准标签库有5个⼦库,但随着发展,⽬前常使⽤的他的核⼼库。
JSTL出现的⽬的同EL⼀样也是要替换和简化JSP⻚⾯中的脚本代码。

在这里插入图片描述

3.2 使⽤步骤

3.2.1 JSTL下载

从Apache的⽹站下载JSTL的JAR包。
进⼊jstl安装包 ⽹址下载JSTL的安装包。 jakarta-taglibs-standard-1.1.2.zip ,然后将下载好的JSTL安装包进⾏解压,此时,在lib⽬录下可以看到两个JAR⽂件,分别为 jstl.jar 和 standard.jar 。其中, jstl.jar ⽂件包含JSTL 规范中定义的接⼝和相关类, standard.jar ⽂件包含⽤于实现 JSTL 的 .class ⽂件以及JSTL 中5个标签库描述符⽂件(TLD)。
在这里插入图片描述

3.2.2 使⽤步骤

在这里插入图片描述

3.3 常⽤的JSTL标签

3.3.1 <c:if test=" ">

if:相当于java代码的if语句

在这里插入图片描述

3.3.2 <c:forEach>

foreach:相当于java代码的for语句
使⽤⽅式有两种组合形式:

<%-- 1. 模拟:for (int i = 0; i <= 5; i++) { sout(i) } --%>
<%-- begin: 从⼏开始
 end: 到⼏结束(包含)
 var: 临时变量, 将现在循环的值 i 存⼊到了page域中
--%>
<c:forEach begin="0" end="5" var="i">
 ${i} <br>
</c:forEach>
<%-- 2. 模拟:String[] strList = {"lucy", "tom", "jack"};
 for(String str : strList) { sout(str) }
--%>
<%-- items: 要遍历的集合或者数组
 var: 遍历出来的每⼀个元素, 将这个元素存⼊到了page域中 起名为xx
 varStatus: 记录当前遍历状态的对象, index-下标 count-序号
--%>
<c:forEach items="${strList}" var="str" varStatus="s">
 ${s.count} -- ${str} <br>
</c:forEach>

举例:
遍历List的值
遍历List的值
遍历Map<String, String>的值
遍历Map<String, User>的值
遍历Map<User, Map<String, User>>的值

4 JavaEE开发模式

4.1 MVC

在这里插入图片描述

4.2 JavaEE 三层架构

1. 界⾯层(表示层):也称web层,⽤户看的界⾯。⽤户可以通过界⾯上的组件和服务器进⾏交互。
2. 业务逻辑层:也称service层,处理业务逻辑的。
3. 数据访问层:也称dao层,操作数据存储⽂件,与数据库进⾏交互。

开发实践时,三层架构通过包结构体现。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSPJava Server Pages)是一种用于创建动态网页的技术,而MVC(Model-View-Controller)模式是一种用于组织代码的设计模式。要构建一个基于JSPMVC模式的个人博客源码,可以按照以下步骤进行。 首先,创建一个Model类,用于处理与数据相关的操作,例如读取用户信息、发布博文、管理评论等。接着,创建一个View类,用于处理与界面相关的操作,例如展示博客列表、文章详情、用户评论等。最后,创建一个Controller类,用于处理与用户交互相关的操作,例如接受用户请求、调用Model和View类进行处理,并返回结果给用户。 在MVC模式下,可以将Model、View和Controller分别作为不同的模块进行开发,从而实现代码的高内聚低耦合。在JSP中,可以使用JSTLJSP Standard Tag Library)和EL(Expression Language)来简化代码编写,同时使用Servlet作为Controller来接受用户请求并调用相应的Model和View进行处理。 例如,在Model类中可以使用JavaBean来封装用户信息和文章内容,在View类中可以使用JSP来展示博客列表和文章详情,在Controller类中可以使用Servlet来处理用户请求并调用相应的Model和View进行处理,并最终将结果返回给用户。 通过以上步骤,就可以构建一个基于JSPMVC模式的个人博客源码,实现代码的灵活组织和功能的清晰分离,提高代码的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值