栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java web后端5 JSP技术

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java web后端5 JSP技术

JSP概述

HTML代码与Java代码共同存在

浏览器中显示


启动Tomcat
浏览器访问:http://localhost:8083/JSPWeb_war_exploded/hello.jsp

<%--
  Created by IntelliJ IDEA.
  User: DQ
  Date: 2021/10/20
  Time: 9:30
  To change this template use File | Settings | File Templates.
--%>
<%--JSP的指令--%>
<%--浏览器访问:http://localhost:8083/JSPWeb_war_exploded/hello.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


Hello World!

JSP工作原理

jsp工作原理:web服务器(tomcatjboss等)先把jsp文件翻译成servlet的java文件,然后编译成字节码文件,就是.class文件,当客户端访问的时候,服务器直接装载jsp对应的servlet的字节码文件。



Tomcat中存放jsp文件的位置

把jsp文件编译为class文件和java文件

JSP脚本元素

JSP脚本元素:JSP scriptlets


JSP脚本元素:JSP声明语句

JSP脚本元素:JSP表达式

JSP注释

后端注释,前端和浏览器看不到
java,JSP,H5的注释都可以在JSP中写


        
<%----%>
        
<%--
//

       

--%>

案例:使用JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


<%--JSP scriptlets--%>
<%
    int[]a=new int[10];
    for(int i=0;i<10;i++) {
        a[i] = i;
    }
%>

<%--JSP声明语句--%>
<%! int x=9,y=10;%>

<%--JSP表达式--%>
x=<%=x%>
y=<%=y%>
案例:使用html的表格和JSP输出九九乘法表

代码1

<%--
  Created by IntelliJ IDEA.
  User: DQ
  Date: 2021/10/20
  Time: 16:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


九九乘法表

<%--border:表格边框;cellspacing属性:设置单元格间距--%> <% for (int i = 1; i <= 9; i++) { %> <% for (int j = 1; j <= i; j++) { %> <%--h5:table: tr行,td列--%> <% } %> <% } %>
<%=i%>*<%=j%>=<%=i * j%><%="t"%>

代码2

<%--
  Created by IntelliJ IDEA.
  User: DQ
  Date: 2021/10/20
  Time: 16:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


九九乘法表

<%--border:表格边框;cellspacing属性:设置单元格间距--%> <% for (int i = 1; i <= 9; i++) { %> <% for (int j = i; j <= 9; j++) { %> <%--h5:table: tr行,td列--%> <% } %> <% } %>
<%=i%>*<%=j%>=<%=i * j%><%="t"%>

Html5的设置表格形式:

 <%=i%>*<%=j%>=<%=i * j%>
        

JSP指令:page指令


需要注意的是,page指令对整个页面都有效,而与其书写的位置无关(先编译指令再解析内容),但是习惯上把page指令写在JSP页面的最前面。

JSP常见page指令

其中,除了import属性外,其他的属性都只能出现一次,否则会编译失败。需要注意的是,page指令的属性名称都是区分大小写的。
language取值只有java

案例:jsp错误页面跳转

源页面

错误页面:

浏览器:

JSP指令:include指令

静态包含
静态包含:在include位置上源码直接替换,然后一起编译为.class,.java【一个class,java文件】

动态包含:先编译源码,再把页面结果返回当前页面【两个class,java文件】
–效果更快

注意事项:
包含站内资源(相对路径)
页面请求地址不会发生变化

案例:

JSP隐式对象

JSP容器自动创建的:
在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在JSP页面中使用。

JSP隐式对象:out对象

在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。

在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据
才能真正写入到Servlet引擎所提供的缓冲区中。

案例:爆红不影响

<%@ page contentType="text/html;charset=UTF-8" language="java"  buffer="8kb" %>


    out对象:JSPWriter,PrintWriter


<%
//内置对象JSPWriter

    out.print("JSPWriter Instance");
%>
<% //PrintWriter对象 PrintWriter printWriter = response.getWriter(); printWriter.print("PrintWriter Instance"); %>

JSP隐式对象:pageContext对象

1.一般不使用这个功能
使用pageContext对象可以获取JSP的其他8个隐式对象。pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法。

2.存储数据的功能
划分了四个不同的存储区域,scope默认为1【ageContext.PAGE_SCOPE:表示页面范围】
findAttribute:从小到大进行查找,找到就返回结果;找不到就扩大范围继续找到,最大范围找不到就返回NULL


详情:

案例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    pageContext


<%
    //1 2 3
    pageContext.setAttribute("str1", "page1", pageContext.PAGE_SCOPE);
    pageContext.setAttribute("str1", "page2");//同一范围内同名的会覆盖

    pageContext.setAttribute("str1", "request1", pageContext.REQUEST_SCOPE);
    pageContext.setAttribute("str2", "request2", pageContext.REQUEST_SCOPE);
    request.setAttribute("str2", "request3");

    pageContext.setAttribute("session", "session1", pageContext.SESSION_SCOPE);
    session.setAttribute("session", "session2");

%>
page=
<%=pageContext.getAttribute("str1")%>
<%=pageContext.getAttribute("str1", 1)%>
<%-- page2 page2 --%> request=
<%=request.getAttribute("str2")%>
<%=pageContext.getAttribute("str1")%>
<%=pageContext.getAttribute("str1", 2)%>
<%--在page内没有找到str2--%> <%=pageContext.getAttribute("str2")%>
<%=pageContext.getAttribute("str2", 2)%>
<%-- request3 page2 request1 null request3 --%> session=
<%=pageContext.getAttribute("session", pageContext.SESSION_SCOPE)%>
<%=session.getAttribute("session")%>
<%-- session2 session2 --%>
JSP动作元素

JSP的七个动作元素
:请求的转发。相当于request.getRequestDispatcher(“”).foward(request,response);

:动态包含。相当于request.getRequestDispatcher(“”).include(request,response);

:参数传递。和jsp:forward或jsp:include配合使用用来传递参数。

:在页面上使用JavaBean类的对象。

JavaBean的特点:
是一个public类。
所有属性都是private的,并提供共有的get、set方法。
只能有默认的无参构造。
必须定义包名。

:获取JavaBean中的属性值,相当于调用get方法

:向JavaBean的制定属性设置值,相当于调用set方法

:在页面上引入java applet组件或javabean组件

动作元素【动态包含】

动态包含:把其他的页面内容,合并到当前要包含的页面,最后一块输出。

基本语法格式:

动态包含的特点:多个页面的内容合并输出,多个jsp页面生成多个java文件,编译成多个class文件。

静态包含的特点:多个页面的内容合并输出,多个jsp页面生成一个java文件,编译成一个class文件。

包含的原理是将被包含的页面编译处理后将结果包含在页面中。当浏览器第一次请求一个使用包含其他页面的页面时,Web容器首先会编译被包含的页面,然后将编译处理后的返回结果包含在页面中,之后编译包含页面,最后将两个页面组合的结果回应给浏览器。

案例:
浏览器:
5秒之后,输出了Welcome here!!!

JspInclude1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    JspInclude1


欢迎页面:

JspInclude2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    JspInclude2



<%
    Thread.sleep(5000);
%>
welcome here!!!



动作元素

请求转发:是同一个请求
只能请求站内资源,不能请求百度等资源

请求转发地址栏不会发生改变,因为只是一次请求;而重定向地址栏会发生改变

案例:
浏览器
转到了jspForward2.jsp

jspForward1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    jsp Forword:请求转发1


欢迎来到!!!

jspForward2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    jsp Forword:请求转发2



你当前的时间:
<% out.write(new Date().toString()); %>
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号