学习学习JSP,EL,JSTL

什么是JSP

概念

简化的servlet代码,在HTML标签中嵌套java代码,用以高效开发Web应用的动态页面

作用

替换显示页面部分的Servlet(*.jsp替换XxxJSP.java)

JSP开发

创建JSP

在web目录下新建*.jsp文件

访问JSP

Htto://localhost:8080/项目名称/资源名称

Servlet与JSP

  • 关系
    - JSP文件在容器中会转换成servlet来执行
    -JSP是对servlet的高级封装。本质上还是servlet
  • 区别
    -与servlet相比,JSP可以很方便的编写或修改html页面,不需要大量的println语句

在这里插入图片描述
JSP实现原理

Tomcat会把jsp文件转换成java代码,进而转换成class文件运行,结果通过response返回给客户端

JSP与HTML集成开发

脚本

脚本可以编写Java语句,变量,方法或表达式

普通脚本

语法:<% Java代码 %>
注意:
1.普通脚本可以使用所有java语法,除了定义函数
2.脚本与脚本之间不可嵌套,脚本与html标签也不可以嵌套
3.普通脚本声明的变量是局部变量

<%
    int a=20;
    out.print(a);//打印内容在客户端页面
    System.out.println(a);//打印内容在控制台
%>

声明脚本

语法:<%! 定义变量,函数 %>
注意:
1.声明脚本声明的变量是全局变量
2.声明脚本的内容必须在普通脚本<% %>调用
3.如果声明脚本的函数具有返回值,使用<%= %>调用

<%!
    int a=10;
    public int  play()
    {
        System.out.println("--good--");
        return 10;
    }
%>

输出脚本

语法:<%=java表达式 %>
输出脚本是把代码内容打印在客户端上,可以是数字,字符串,函数…

<%=play()%>
<%="不错不错"%>
<%=12345%>

JSP注释

<%--注释--%>JSP注释,注释内容不会发送至浏览器
<!--注释-->HTML注释,注释内容可以在网页源代码看到
JSP指令

JSP指令是用来设置和整个页面相关的属性

指令描述
<%@ page…%>定义页面的依赖属性,比如脚本语言,error页面
<%@ include…%>包含其他文件
<%@ taglib…%>引入标签库的定义,可以是自定义标签

Page指令

语法:<%@ page arrtibute1="value1"  arrtibute2="value2"%>
Page指令为容器提供当前页面的使用说明,一个JSP页面可以包含多个Page指令
属性描述
contentType指定当前JSP页面的字符编码格式
errorPage指定当前页面错误时需要转向的错误处理页面
isErrorPage指定当前是否可以作为一个错误处理页面
import导入需要使用的java类
language定义JSP页面所用的语言,默认是Java
session指定JSP页面是否使用session,true是立即创建,false是使用时创建(一般不需要管,默认为true)
pageEncoding指定JSP页面的解码格式
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>
<%@ page import="java.util.Date"%>

include指令

  • 语法:<%@ include file=“被包含的JSP路径”>
  • 通过include的指令来包含其他文件
  • 被包含的可以是jsp文件,html文件,文本文件。包含的文件就好像是当前文件的一部分会被同时编译
<%@include file="Header.jsp"%>
...
<%@include file="Foot.jsp"%>

但是这个不建议使用,后面会介绍更好用的方法

taglib指令

后面学习的EL会使用到

语法:<%@ taglib uri=“外部标签库路径” prefix=“前缀”%>
引入jsp的标准库

动作标签

  • 语法:<jsp:action_name arrtibute=“value”/>
  • 动作标签指的是jsp页面在运行期间的指令

include

  • 语法:<jsp:incluude page=“相对地址”/>
  • jsp:include动作元素会将外部文件包含在jsp文件中
    page:包含在页面的相对位置
    注意:前面的include的指令是将外部文件的代码复制到jsp文件中,可能会造成重名的错误,而这里的jsp指令的include是将外部文件的输出结果输入jsp文件,所以推荐使用这种方法。

useBean

  • 语法:<jsp:useBean id=“name” class=“packge.className”/>
    jsp:useBean用来加载一个将在jsp页面使用的javaBean
    在类载入后,我们可以通过jsp:setProperty和jsp:getProperty动作来修改和获取Bean属性
    在这里的class是实体类的路径,id是对象名
<jsp:useBean id="user" class="com.feng.entity.User"/>
<jsp:setProperty name="user" property="password" value="123"/>
<jsp:getProperty name="user" property="name"/>

setProperty

可以在jsp:useBean元素后使用jsp:setProperty进行属性赋值
属性描述
namename属性是必需的。它用来表示哪个useBean
valuevalue属性是可以选的。它用来指定Bean的值
propertyproperty属性是必需的。它用来设置哪个属性

getProperty

jsp:getProperty动作提取属性的值,然后转换为字符串,然后输出,(通过这个
可以直接打印在页面上)
属性描述
name要检索的Bean属性名称。Bean必须已定义
property表示要提取的属性的值

forward

  • 语法:<jsp: forward page=“相对URL地址”/>
    把请求转发到别的页面

param

语法:<jsp: param name="" value=""/>
在转发动作内部使用,做参数传递

转发前A页面:

<jsp:forward page="B.jsp">
    <jsp:param name="name" value="feng"/>//这个数据不是存储在作用域里,而是在请求上所以不是arrtibute,而是parameter
</jsp:forward>

转发后B页面:
<%
    String name=request.getParameter("name");//需要用到getParame接收数据
%>
<%=name%>

内置对象

由jsp自动创建的的对象,可以直接使用

在这里插入图片描述
四大域对象

jsp有四大作用域对象,存储数据和获取数据方式一样,不同的是取值范围的差别
*  pageContext(java.servlet.jsp.PageContext)当前jsp范围
* request(java.servlet.http.HttpServletRequest)一次请求有效
* session(java.servlet.http.HttpSession)一次会话有效(浏览器关闭)
* application(java.servlet.ServletContext)整个Web应用有效(服务器重启或关闭)
   <%
        pageContext.setAttribute("pageContext","haha");
        String s=(String) pageContext.getAttribute("pageContext");
        String m=(String) request.getAttribute("requestScope");
        String n=(String) session.getAttribute("sessionScope");
        String k=(String) application.getAttribute("applicationScope");
    %>

pageContext对象

	* pagecontext对象是java.servlet.jsp.PageContex类的实例,拥有
	 作用域,用来代表整个jsp页面
	 * 当前页面的作用域对象,一旦跳转则失效
	 * 通过setArrtibute存值(name="",value="")
	 * 通过getArrtibute取值(name="")
	 * 用于获取其他8个内置对象或者操作其他对象作用域
<%
    //<!--获取其他8个内置对象-->
    pageContext.getRequest();
    pageContext.getResponse();
    pageContext.getException();
    pageContext.getSession();
    pageContext.getOut();
    pageContext.getPage();
    pageContext.getServletConfig();
    pageContext.getServletContext();
%>


<%
    //pageContext操作其他作用域
    pageContext.setAttribute("page","123");//当前jsp有效
    pageContext.setAttribute("req","aaa",pageContext.REQUEST_SCOPE);
    pageContext.setAttribute("sess","bbb",pageContext.SESSION_SCOPE);
    pageContext.setAttribute("app","ccc",pageContext.APPLICATION_SCOPE);
   String s1=(String)pageContext.getAttribute("req");
   String s2=(String) pageContext.getAttribute("sess");
   String s3=(String) pageContext.getAttribute("app");
   //这个查找是遵循:pageContext,request,session,application顺序
   String s4=(String)pageContext.findArrtibute("req");
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值