JSP原理及运用+EL表达式+jstl

2023年 9月 7日 90.9k 0

JSP(java Server Page)

简介

因为Servlet中用来做页面需要疯狂的拼接字符,为了解决在service中响应页面的问题,使用JSP技术来实现更为合适

  • Servlet中的写法:
resp.setCharacterEncoding("UTF-8");
PrintWriter printWriter = resp.getWriter();
printWriter.println("n" +
        "n" +
        "n" +
        "    n" +
        "    登录n" +
        "n" +
        "n" +
        "欢迎使用n" +
        "n" +
        "");

JSP和Servlet区别

  • JSP底层就是一个Servlet,在执行的时候先转成Servlet然后同样要经历Servlet的生命周期;
  • 如果想把页面做好看一些,怎么做?很明显Servlet是不行的,所以需要用到JSP(看上去就跟HTML页面差不多),Servlet主要是处理业务为主(Java后台代码),JSP主要以表现为主(HTML,CSS,JS等前端代码);
  • Servlet更擅长逻辑的编写,Jsp更擅长于数据的显示,以后我们开发会慢慢达到一个目标,servlet里面不要写HTML代码,jsp里面不要写java代码;

入门

  • 创建一个javaWeb项目
  • 创建JSP文件

image.png

  • 启动tomacat测试

JSP原理

图片.png

语法

语法用于在JSP页面使用java代码
语法分类:


``



``





注意

  • 如果没有导入jsp的jar包,页面会报错,但是不影响运行(tomcat -- lib -- jsp.ar);
  • 不能直接拖到浏览器上面运行,它只能在服务器上面(JSP是服务器端页面)使用,服务器对它作了编译的。如下图直接运行时显示的是源码,并不是页面效果:

图片.png

JSP三大指令

  • page

当前页指令,只对当前页作
eg:如果当前head.jsp页面报错,需要给客户转到hello.jsp页面,只需要在Page指令后面加errorPage属性,然后在hello.jsp页面的Page指令里面加属性isErrorPage并设值为true

head.jsp页面:

hello.jsp页面:

  • include静态引入

不同的页面包含相同的内容,可以把相同的页面提取出来进行引用,比如导航栏head.jsp是a.jsp页面和b.jsp页面共有的,就可以对head.jsp页面进行引用

image.png

页面a和页面b都使用这句代码引用head.jsp:

先引入head代码,然后同意转换成一个.java文件
>
  • taglib:标签指令(JSTL);

内置对象

JSP转换成java代码的时候自动生成的对象代码

内置对象
application ServletContext 全局对象
session HttpSession 会话对象
request HttpServletRequest 请求对象
pageContext PageContext 当前页对象
response HttpServletResponse 响应对象
out JspWriter 输出对象
page this 当前对象
config ServletConfig 配置对象
exception 异常对象

四大作用域对象 存取数据

对象(叫法) 范围
PageContext pageContext 当前页面(作用不大) 当前页,直接使用就是,根本不需要在放到对象里面
HttpServletRequest request 一次请求(必需请求转发)
HttpSession session 一次会话
ServletContext application 整个应用(有且只有一个对象)

在Servlet中的操作

  • 一次session包含多次Request,session就像打电话,而Request只是其中一个话题
    注意:
    不能跨域取值
//获取数据

//打印数据



图片.png

如上,只能读取Request域的值,其他域因为没有赋值就不能读取,显示``NULL`

  • 在自己写的类中使用内置对象
    先使用Request.get作用域的类,拿到对象再使用
HttpSession session = request.getSession();
ServletContext application = request.getServletContext();
  • 获取Servletcontext的方式
//兼容性差
ServletContext application1 = request.getServletContext();
//麻烦,但兼容性好
HttpSession session = request.getSession();
ServletContext application2 = session.getServletContext();
//从父类中继承,兼容性好
ServletContext application3 = super.getServletContext();
ServletContext application4 = super.getServletConfig().getServletContext();

JSP动作元素

在body里面写,语法


静态引入和动态引入的区别

  • 动态引入指的是标签jsp:include,静态引入指的是指令include
  • 静态引入是先把页面包含进来再翻译成一个java代码,动态引入是先大欧编译成java代码,再将内容进行包含
  • 如果是静态页面(HTML),就适合用静态引入include;如果是动态引入(jsp),就用jsp:include;

EL表达式

EL可以获取四大作用域中的共享数据,获取到值就直接打印输出,没有获取不会输出NULL值,而是直接跳过



${name}
${age}

image.png

具体使用

之前我们用jsp的表达式从作用域里面拿到值,并且判断为空,为了防止出现显示为NULL的写法


EL可以替代之前的部分写法,如:




${msg}

    账号:
    密码:
    

不同域中取值

不同域中有相同的名字,取值过程是作用域从小到大,为了让他们显示全,需要在值前面加上指定作用域,最小的作用域不用添加指定作用域(不然会页面错误)






${age}
${requestScope.age}
${sessionScope.age}
${applicationScope.age}

EL的其他作用

  • EL算术运算符

    (1) 1+2{1+2} 1+2{2-1} 2∗3{2*3} 2∗3{16/5}

  • EL关系运算符

    (1) 16>5或{16>5} 或 16>5或{16 gt 5}

    (2) 16=5或{16 ge 5}

    (4) 16

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论