首页 > 其他分享 >jsp语法与jsp基本知识点

jsp语法与jsp基本知识点

时间:2022-10-19 12:04:16浏览次数:81  
标签:知识点 String 标签 request 语法 JSP jsp 页面


【jsp基本知识点】
JSP全称是Java Server Pages,它和servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP/Servlet规范。 JSP实际上就是Servlet
JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

[JSP模板元素]
JSP页面中的HTML内容称之为JSP模板元素

JSP模板元素定义了网页的基本骨架,即定义了页面的结构和外观。

jsp的几大对象
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;

      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

[JSP的脚本,如下]

<body>
<%
request.setAttribute("name", "张三");
request.getRequestDispatcher("/one02.jsp").forward(request, response);
%>
</body>

 在【<%  ****** %>】之前的java代码称作为jsp脚本



 [JSP表达式,如下]

<body>
脚本表达式(输出一个变量):<%=request.getAttribute("name") %>
</body>

在【<%=这里写表达式  %>】这样的表示jsp表达式,注意:表达式不是语句,所有最后不能有“;”号


例如:如下代码

<table border=1 width="200">
<%
for(int i=0;i<4;i++){
%>
<tr>
<td><%=i %></td>
<td>112</td>
</tr>
<%
}
%>
</table>

显示结果为:

jsp语法与jsp基本知识点_jsp基本原理


在jsp页面中,可以用上述方法巧妙的运用HTML页面标签和jsp的java脚本和表达式组成循环,输出table


[jsp声明]

<%!
int a=0;
public void add(){
System.out.println("大家好");
}

public class A{
public void add1(){
System.out.println("大家好,我是内部类");
}
}
%>
<%
this.add();
A a=new A();
a.add1();
%>


后台自动编译后会变成:

jsp语法与jsp基本知识点_jsp_02

可以发现jsp声明中的变量,会变成类的属性,而类会变成内部类。

在【<%! ****** %>】里面的java代码里面可以定义方法和属性


[jsp注释]

<body>
<%-- 我是jsp注释 --%>
</body>

JSP引擎在将jsp页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。



[JSP指令]
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP2.0规范中共定义了三个指令:


静态指令
page指令
lnclude指令
taglib指令

例如: 
<%@ page import="java.awt.*" %>
可以使用page指令引用java包到页面上。
在【<%@ *** %>】中的属性又如下:
【pageEncoding="UTF-8"】设置jsp页面的默认编码和客户端页面的默认编码为UTF-8
【contentType="text/html;charset=ISO-8859-1"】设置客户端编码,默认是ISO-8859-1和pageEncoding在页面的显示上没有任何区别
【import=""】用来在当前jsp页面中引入jar包
【language="java"】 指定当前页面支持的脚本语言为java(目前jsp只支持java脚本语言)
【autoFlush="true"】是否自动刷新,由服务端向客户端自动发送数据(一般不要修改)
【buffer="8kb"】指定缓冲区大小默认是8kb
【extends】继承,可以修改继承的类,可以自己写类继承。默认继承了一个类。
【info】键值对,可以在服务端拿到。一般很少用
【isELIgnored="false"】是否支持EL表达式,如果是true,表示不支持EL表达式。
【isThreadSafe="true"】是否是线程安全,默认是true,表示是线程安全
【session="true"】是否可以在页面中使用session。默认是true,表示在jsp页面上可以直接使用。

【isErrorPage】定义当前页面是否是错误处理页面。默认是false 不是错误处理页面
【errorPage】指定当前页面jsp脚本发送错误时,错误处理页面时那个。一般和isErrorPage一起使用。相当于错误处理机制


page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好放在整个JSP页面的起始位置。
errorPage属性的设置值为一路径(相对或者绝对),如果以“/"开头,表示相对于当前WEB应用程序的根目录(注意站点根目录,否则,表示新队路径)
可以在web.xml文件中使用<exception-type>子元素指定异常类的完全限定名,<loaction>元素指定以"/"开头的错误处理页面路径。

在web.xml配置全局的应该如下:

<error-page>
<error-code>404</error-code>
<location>/one04.jsp</location>
</error-page>



如下是演示一种error错误处理

触发错误页面代码为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"  errorPage="one05.jsp" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>演示error异常处理</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>

<body>
<%
out.write("aaa你好");
out.write(10/0);//保证一定会出现异常
%>
</body>
</html>


定义错误处理页面代码为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>本页面为异常处理页面</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>

<body>
服务器正忙,请一会访问!
<%
String str=exception.getMessage();
out.write(str);
%>
</body>
</html>


显示结果为:

jsp语法与jsp基本知识点_jsp语法_03


include包含
1.静态包含:指代码级别的包含,指将目标页面的源码拷贝一份包含进来
2.动态包含:指是执行目标页面,将结果包含进来
例如:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"  %>
<%@ page import="java.awt.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>jsp指令标签3个</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<%-- 我是jsp注释 --%>
<!-- 静态包含 -->
<%@ include file="one06.jsp" %>
<!-- 动态包含 -->
<jsp:include page="one07.jsp"></jsp:include>
</body>
</html>


one06.jsp页面为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>include指令《静态包含》</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
静态包含,我是页面one06 <br>
</body>
</html>


one07.jsp页面为:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>include动态包含</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
我也页面07 <br>
</body>
</html>


include指令用于引入其他JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令通常也称为静态引入。


语法:


<%@ include file="被包含组件的绝对URL" %>


其中file属性用于指定被引入文件的路径。路径以"/"开头,表示当前web应用。


细节:


被引入的文件必须遵循JSP语法


被引入的文件可以使用任意的扩展名,即使其扩展名为html,JSP引擎也会按照处理JSP页面的方式处理它里面的内容,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。


由于使用include指令将会涉及到2个jsp页面,并会把2个JSP翻译成一个servlet,所以2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。






Taglib指令用于在JSP页面中导入标签库



【JSP标签】
JSP标签也称之为JspAction(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难维护。
JSP常用的标签:
<jsp:include>标签
<jsp:forward>标签
<jsp:param>标签
  
 [<jsp:include>]标签
用于吧另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入
语法: <jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
page属性用于指定引入资源的相对路径,它也可以通过执行一个表达式来获得。
flush属性指定在次啊如其它资源的输出内容时,是否先将当前JSP页面的以输出的内容刷新到客户端。

<jsp:include>标签是动态引入,<jsp:include>标签涉及到的2个JSP页面会被翻译称2个servlet,这2个servlet的内容在执行时进行合并。
而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在原文件级别进行合并。


不管是<jsp:inclued>标签,还是include指令,它们都会把2个JSP页面内容合并输出,所以这两个页面不要出现城府的HTML全局架构标签,否则输出给客户端的内容将会是一个歌手换乱的HTML文档。




[<jsp:forward>]标签用于把请求转发给另外一个资源。
语法: <jsp:forward page="relativeURL |<%=expression%>" />
page属性用于指定引入资源的相对路径,它也可以通过执行一个表达式来获得。


当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给其他资源时,可以使用<jsp:param>标签向这个资源传递参数。
语法1:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterVAlue | <%=expression %>" />
</jsp:include>
语法2:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterVAlue | <%=expression%>" />
</jsp:forward>


<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。


例如如下示例:

JAction01.jsp代码为:

<body>
<pre>
JSP的动作标签
<%
request.setAttribute("name", "小龙女");
%>
<jsp:forward page="/jsp/JAction02.jsp?age=100">
<jsp:param value="70" name="weight"/>
</jsp:forward>
</pre>
</body>

JAction02.jsp代码为:

<body>
<%
out.write("name="+request.getAttribute("name"));
%>
<br>
age=<%=request.getParameter("age") %>
<br>
weight=<%=request.getParameter("weight") %>
</body>

页面显示结果为:

jsp语法与jsp基本知识点_page_04



上面示例,中使用了<jsp:forward>标签用作请求转发,将结果转发给JAction02.jsp处理,并显示传递过来的值。


【[jsp:userBean][jsp:setProperty][jsp:getProperty]标签】
语法:
<jsp:userBean id="变量名"  class="类名"></jsp:userBean>   该语句相当User us=new User();
<jsp:setProperty property="属性" name="对象名"  name="客户端传递过来的参数名称" />  类似于us.getName=request.getAttribute("name");
<jsp:getProperty property="属性" name="对象名" />相当于将对象的属性值显示在页面上。类似于<%=us.getName() %>


示例:

<body>
<form action=<%="'"+request.getContextPath()+"/jsp/JUserBing02.jsp'" %> method="post" >
<table border="1">
<tr>
<td>姓名:</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age" /></td>
</tr>
<tr>
<td>性别:</td>
<td><input type="radio" name="sex" value="男" />男<input type="radio" name="sex" value="女">女</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
</body>


JUserBing02.jsp关键代码为:

<body>
<h1>jsp手动封装参数</h1>
<%
request.setCharacterEncoding("UTF-8");
%>
<!-- 使用jsp代码声明一个类 相当于 Juser juser=new Juser(); 其中id是变量名 class指定的是要什么名的类 -->
<jsp:useBean id="juser" class="com.gdy.jjsp.Juser"></jsp:useBean>
<!-- 手动给声明的变量赋值 其中:name指定的是变量名,property指定的是变量的哪个属性,param指定的是客户端传递过来的哪个参数。-->
<jsp:setProperty property="name" name="juser" param="name"/>
<jsp:setProperty property="age" name="juser" param="age"/>
<jsp:setProperty property="sex" name="juser" param="sex" />

<pre>
<!-- 使用jsp代码取变量值, name指定变量名,property指定变量的那个属性 -->
姓名:<jsp:getProperty property="name" name="juser"/>
年龄:<jsp:getProperty property="age" name="juser"/>
性别:<%=juser.getSex() %>
地址:<%=juser.getAddress() %>
</pre>

</body>


java 自定义类Juser代码为:

package com.gdy.jjsp;

import java.io.Serializable;

/**
* 创建一个类,方便jsp封装参数
* @author Administrator
*
*/
public class Juser implements Serializable{
private String name;//姓名
private int age;//年龄
private String sex;//性别
private String address;//地址
@Override
public String toString() {
return "Juser [name=" + name + ", age=" + age + ", sex=" + sex
+ ", address=" + address + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}


页面显示结果为:

jsp语法与jsp基本知识点_jsp语法_05


jsp语法与jsp基本知识点_page_06



上述封装方式还可以如下封装

<h1>jsp自动封装</h1>
<pre>
<jsp:useBean id="zduser" class="com.gdy.jjsp.Juser"></jsp:useBean>
<!-- 注意 使用property="*"时,必须页面传递过来的参数在Juser里面都有,且参数名相同 -->
<jsp:setProperty property="*" name="zduser"/>
姓名:<%=zduser.getName() %>
年龄:<%=zduser.getAge() %>
性别:<%=zduser.getSex() %>
</pre>


这样就简单很多。

注意:<jsp:useBean id="user2" class="com.gdy.jjsp.Juser" scope="page">中 scope默认是存放在page对象中的。如果修改了scope存放对象,那么获取值会有相应的变化。
如下:

<h2>jsp存储,使用session存放</h2>
<jsp:useBean id="user2" class="com.gdy.jjsp.Juser" scope="session"></jsp:useBean>
<jsp:setProperty property="*" name="user2"/>
姓名:<jsp:getProperty property="name" name="user2"/>
年龄:<jsp:getProperty property="age" name="user2"/>
性别:<%=user2.getSex() %>
<a href=<%="'"+request.getContextPath()+"/jsp/JUserBing03.jsp'" %>>跳转JUserBing03</a>

将页面传递过来的值是有session接收的页面可以正常使用jsp:getProperty来获取。但入过再通过超链传递到达其他页面,那么获取值应该如下:

JuserBing03.jsp获取session传递过来的代码为:

<pre>
获取JuserBing02存储在session里面的数据
<%
Juser user=(Juser)session.getAttribute("user2");
%>
<%--
注意,这时不能使用<jsp:getProperty property="name" name="user"/> 再来获取user的值了。
只能使用<%=user.getAge() %>这种方式来获取值
--%>
姓名:<%=user.getName() %>
年龄:<%=user.getAge() %>
性别:<%=user.getSex() %>
</pre>









标签:知识点,String,标签,request,语法,JSP,jsp,页面
From: https://blog.51cto.com/u_8406447/5769528

相关文章

  • vue组件通信6种方式总结(常问知识点)
    前言在Vue组件库开发过程中,Vue组件之间的通信一直是一个重要的话题,虽然官方推出的Vuex状态管理方案可以很好的解决组件之间的通信问题,但是在组件库内部使用Vuex往往会......
  • 习惯用脚手架的你, 了解Webpack这些知识点吗?
    大概准备春招两个月了,也没找到坑位埋自己,来看看webpackwebpack官网:www.webpackjs.com对于前端的大兄弟来说,每天在前端摸爬滚打,各方征战,那对于webpack肯定再熟......
  • 云原生学习筑基 ~ 组网必备知识点 ~ DNS服务
    @目录​​一、为啥写这篇文章?​​​​二、DNS的作用​​​​三、域​​​​四、DNS工作原理​​​​五、搭建DNS服务器​​​​5.1、Bind​​​​5.2、系统环境准备​​​​......
  • 知识点
    GroupId(俗称:包结构)、ArtifactId(俗称:项目名)。GroupID是项目组织唯一的标识符,一般包含多段,第一段为域,第二段为公司名称,实际对应项目的包名称;而ArtifactID就是项目的唯一的......
  • JavaScript学习--基础语法03
    流程控制语句if,switch,for,while,dowhile。与之前学过的一样。 函数定义:通过function关键词定义语法:functionfunctionName(参数1,参数2) {  具体代码 }例子fu......
  • 记录一次JSP后门的分析
    0x01环境部署首先启动一个tomcat的环境先把这里的代码跑起来先把这里的代码跑起来,访问tomcat在docker中的​​tomcat/conf​​中可以看到账号密码将JSP打包为war包​​jar......
  • Markdown相关语法介绍
    Markdown相关语法介绍一、介绍Markdown是一种轻量级标记语言,后缀是.md或者.markdown。二、基础使用标题#h1##h2###h3####h4#####h5######h6h1h2h3......
  • 测试基础重点知识点总结
    项目的生命周期设计测试用例的好处(意义):一、梳理测试思路;二、作为质量评价依据;三、相似场景复用,可以提高工作效率;四、可以更好地规范管理(可以更好提高效率)......
  • JSP中文乱码问题
    中文乱码问题(1)中文无法显示没有把头文件上的字符集设置为中文字符集①<%@pagelanguage="java"pageEncoding="gb2312"%>②<%@pagelanguage="java"contentType="te......
  • MySQL数据库SQL语法常规操作
    必备sql和表关系及授权graphLR执行1[必备sql和授权]执行2[SQL强化和实践]执行3[索引和函数以及存储过程]执行4[Python操作mysql和应用]执行5[常见SQL语句......