jsp的组成
JSP页面主要是由HTML语言,注释,Java代码块,指令标记,JSP动作标记,等五个元素组成
html标记语言
如果学过web前端的话,就很能理解了,就是关于关于我们网页呈现的一种语言。
就如下面代码,一个简单的网站结构,也就是我们的html部分
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>初始网站 title here</title>
</head>
<body>
<br>
<div>网站首页面</div>
</body>
</html>
jsp注释
在jsp中文件中,我们会使用到两种注释,一种注释是针对于我们的html网页,另一种是针对于我们的java内嵌代码上的注释
**HTML 注释:**HTML 注释在生成的 HTML 页面中可见,但不会被浏览器解析和显示。
<!-- 这是一个 HTML 注释 -->
JSP 注释在 JSP 页面中可见,但不会被发送到客户端浏览器。
<%-- 这是一个 JSP 注释 --%>
//由于是Java代码块,我们直接使用//也是能行的
JSP定义Java代码的方式
<% %>
标签中直接编写代码块:
<%
int n = 0;
n++;
out.print("n = " + n);
%>
<%! %>
标签定义成员变量和方法:
//定义声明我们的变量
<%!
private int n;
public void increment() {
n++;
}
%>
//具体运行部分
<%
increment();
out.print("n = " + n);
%>
<%= %>
标签输出表达式的结果:
<%
int n = 0;
n++;
%>
n = <%= n %>
jsp指令标记
这里主要结束两个常用的两个jsp指令标记,一个是page指令标记,另一个是index标记
page指令
page指令标记用来标记 定义整个jsp页面的属性,和属性的值,主要用于文件的配置
**page
指令标记的一般语法:**
<%@ page 属性名="属性值" %>
一些常用的属性:
import
:用于导入 Java 类或包。可以使用逗号分隔多个导入项。
<%@ page import="java.util.List, java.util.ArrayList" %>
contentType
:用于设置响应的内容类型和字符编码。
<%@ page contentType="text/html; charset=UTF-8" %>
language
:用于指定在 JSP 页面中使用的脚本语言,默认为 Java。
<%@ page language="java" %>
session
:用于启用或禁用会话(session)支持,默认为启用。
<%@ page session="false" %>
errorPage
:用于指定在出现错误时跳转到的错误处理页面。
<%@ page errorPage="error.jsp" %>
isErrorPage
:用于标识当前页面是否为错误处理页面。
<%@ page isErrorPage="true" %>
buffer
:用于设置响应缓冲区的大小。
<%@ page buffer="8kb" %>
实例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@include file="head.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<br>
<div>网站首页面</div>
</body>
</html>
language="java"
:指定在 JSP 页面中使用的脚本语言为 Java
contentType="text/html; charset=UTF-8"
:设置响应的内容类型为 “text/html”,并指定字符编码为 UTF-8。这确保了生成的 HTML 页面使用 UTF-8 编码进行显示。其中。"text/html"
表示响应的内容类型为 HTML。这告诉浏览器接收到的内容是 HTML 格式的,以便正确地解析和显示页面。
pageEncoding="UTF-8"
:指定 JSP 页面的编码为 UTF-8。这确保了 JSP 文件本身的编码为 UTF-8。
include指令
include
指令用于在当前 JSP 页面中包含其他的 JSP 页面、HTML 文件或文本文件的内容。通过使用 include
指令,可以将其他文件的内容嵌入到当前页面中,实现代码的重用和模块化
例如,我们实现一个导航栏,可能有好几个页面都需要这个导航栏,如果我们每个文件一个一个的去添加这个代码,一方面麻烦,另一方面会使得代码臃肿,我们使用include命令,在一个jsp文件中,专门写一个导航栏,这样如果一个页面需要导航栏,直接进行引用就行了。
例子:
index.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@include file="head.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<br>
<div>网站首页面</div>
</body>
</html>
head.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<ul>
<li style="float: left;width: 50px"><a>首页</a></li>
<li style="float: left;width: 50px"><a>体育</a></li>
<li style="float: left;width: 50px"><a>热点</a></li>
<li style="float: left;width: 50px"><a>股市</a></li>
<li style="float: left;width: 50px"><a>经济</a></li>
</ul>
</div>
</body>
</html>
这样就能实现下面这样的一个效果实际运用中还是非常不错的,如果先前写过一般的html界面,就能深有体会
jsp动作标记
在 JSP 中,动作标记(Action Tags)是一种特殊的标记,用于执行特定的操作或功能。这些标记由 JSP 容器(如 Tomcat)在运行时进行解析和处理。以下是几个常用的 JSP 动作标记:
<jsp:include>
:
用于在当前页面中包含其他页面或文件的内容。与 include
指令类似,但是 <jsp:include>
是在运行时动态地包含内容。
使用方式:
<%@include file="文件路径" %>
例子:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>22mued</title>
</head>
<body>
静态嵌入1.jsp之前
<br>
<%@include file="example3_5_1.jsp" %>
<br>
静态嵌入1.jsp之后
</body>
</html>
1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>22mued</title>
</head>
<body>
<font color="red" size=4>1.jsp文件的内容</font>
</body>
</html>
这样在访问我们的index.jsp文件时,就会动态的将我们的1.jsp的内容加载在index.jsp页面中。这个功能还是很有用的,能够使得我们能更好的使得代码解耦。
<jsp:forward>
:
用于将请求转发到其他页面或资源。允许在一个 JSP 页面中处理请求,并将其传递给另一个 JSP 页面或 Servlet 进行进一步处理。
使用方式:
<jsp:forward page="文件路径"/>
例子:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>22mued</title>
</head>
<body>
<h1>Forward Example</h1>
<%-- 使用 <jsp:forward> 标签将请求转发到另一个页面 --%>
<jsp:forward page="1.jsp" />
<%-- 这行代码不会被执行,因为请求已经被转发到了另一个页面 --%>
<p>This line will not be displayed.</p>
</body>
</html>
当执行到 <jsp:forward page=“1.jsp” />,这个一段时,这个时候页面将会直接跳转到我们的1.jsp页面。
<jsp:param>
:
用于在动作标记中传递参数。它通常与 <jsp:include>
或 <jsp:forward>
,内置对象request
,结合使用,允许将参数传递给被包含或转发的页面。
使用方式
<jsp:param name="paramName1" value="paramValue1" />
//这里有两个值,一个是param的名称,一个是该名称下绑定的值
例子:
<jsp:forward page="123.jsp">
<jsp:param name="name" value="TOM" />
<jsp:param name="age" value="25" />
</jsp:forward>
123.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Target Page</title>
</head>
<body>
<h1>Target Page</h1>
<%-- 获取传递的参数值 --%>
<% String name = request.getParameter("name"); %>
<% String age = request.getParameter("age"); %>
<%-- 显示参数值 --%>
<p>name : <%= name %></p>
<p>age: <%= age %></p>
</body>
</html>
<jsp:useBean>
:
用于在 JSP 页面中创建和操作 JavaBean 对象。它允许您在 JSP 页面中直接使用 JavaBean 的属性和方法。
用法:
<jsp:useBean id="beanId" class="fullyQualifiedClassName" scope="scope" />
id
:指定用于引用 JavaBean 对象的唯一标识符。class
:指定要实例化的 JavaBean 类的完全限定类名。scope
:指定 JavaBean 对象的作用域,可以是page
、request
、session
或application
。默认为page
。
<jsp:setProperty>
和 <jsp:getProperty>
:
用于设置和获取 JavaBean 对象的属性值。它们通常与 <jsp:useBean>
结合使用,用于操作 JavaBean 对象的属性。
<jsp:setProperty>
一般调用setter函数,<jsp:getProperty>
调用的是getter函数
所谓setter方法,就是以set
开头,后面跟着属性名,用于设置对应属性的值。例如,如果有一个属性名为name
,那么对应的setter方法就是setName()
。这个方法接受一个参数,即要设置的属性值的类型,然后将其赋给类的属性。
同理getter就是以get开头,一个属性名为name
,那么对应的gettter方法就是setName(),
具体的调用需要看property是什么
<jsp:setProperty>
语法
<jsp:setProperty name="beanName" property="propertyName" />
name
:指定要操作的 JavaBean 对象的名称或ID。property
:指定要设置的 JavaBean 对象的属性名称。可以使用通配符 `` 来表示所有属性。
<jsp:getProperty>
语法:
<jsp:getProperty name="beanName" property="propertyName" />
name
:指定要操作的 JavaBean 对象的名称或ID。property
:指定要获取的 JavaBean 对象的属性名称。可以使用通配符 `` 来表示所有属性
关于<jsp:useBean>
,<jsp:setProperty>
,<jsp:getProperty>
的具体使用
首先,需要准备我们的JavaBean类:该类包含私有属性和对应的setter和getter方法。
public class Triangle {
private int sideA;
private int sideB;
private int sideC;
public void setSideA(int sideA) {
this.sideA = sideA;
}
public int getSideA() {
return sideA;
}
// 同样定义 sideB 和 sideC 的 setter 和 getter 方法
}
其次,在JSP页面中使用JavaBean:导入JavaBean类,实例化一个JavaBean对象。这样就创建了一个名为triangle1的对象
<jsp:useBean id="triangle1" class="com.example.Triangle" scope="page" />
再使用 <jsp:setProperty>
设置属性值:使用 <jsp:setProperty>
标签将请求参数的值设置到JavaBean对象的属性中。例如,使用*的方式设置所有属性:
<jsp:setProperty name="triangle" property="*" />
或者单独设置某一个属性的值:
<jsp:setProperty name="triangle" property="sideA" value="10" />
最后,使用 <jsp:getProperty>
获取属性值:获取JavaBean对象的属性值并在页面上展示。
Side A: <jsp:getProperty name="triangle" property="sideA" />
这就是使用javabean的完成流程,我们的jsp页面就能成功使用javabean对我们数据进行操作。
jsp内置对象
在Jsp中,它在内部书写九个内置的对象,关于内置对象,就是我们不用直接去new一个对象。而是可以直接调用这个对象,然后使用其实现的函数
request | HttpServletRequest 接口的实例 |
---|---|
response | HttpServletResponse 接口的实例 |
out | JspWriter类的实例,用于把结果输出至网页上 |
session | HttpSession类的实例 |
application | ServletContext类的实例,与应用上下文有关 |
config | ServletConfig类的实例 |
pageContext | PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问 |
page | 类似于Java类中的this关键字 |
Exception | Exception类的对象,代表发生错误的JSP页面中对应的异常对象 |
下面就归纳一下一些常用对象的函数,方便以后直接来查询对应的作用。
request对象
request
对象是 Java Servlet API 中的一个内置对象,它代表了客户端发出的 HTTP 请求。通过该对象,可以获取有关请求的各种信息,例如请求的参数、请求的头部信息、请求的方法等。
getParameter(String name)
: 通过参数名获取请求中的参数值。
getParameterValues(String name)
:通过参数名获取请求中的参数值数组。
getMethod()
:获取请求的方法,例如 GET、POST、PUT 等。
getRequestURL()
: 获取请求的 URL。
getRequestURI()
: 获取请求的 URI。
getHeader(String name)
: 通过头部名称获取请求的头部信息。
getHeaders(String name)
: 通过头部名称获取请求的头部信息列表。
getSession(boolean create)
: 获取与请求关联的会话对象。
getCookies()
: 获取请求中的 Cookie 数组。
getLocale()
: 获取请求的语言环境
out对象
out
对象用于将文本或其他数据输出到响应的输出流中,以便将其发送给客户端。
void print(String str)
: 将指定的字符串输出到响应流中。
void println(String str)
:将指定的字符串输出到响应流中,并在末尾添加一个换行符。
response对象
response
对象是 Java Servlet API 中的一个内置对象,它代表了服务器对客户端发出的 HTTP 请求的响应。通过 response
对象,我们可以设置响应的状态码、响应的内容类型、响应的头部信息等。
void setStatus(int sc)
: 设置响应的状态码。
void sendRedirect(String location)
: 重定向到指定的 URL。
void setContentType(String type)
: 设置响应的内容类型。
void addHeader(String name, String value)
: 添加响应的头部信息。
void setHeader(String name, String value)
: 设置响应的头部信息。
void setContentLength(int len)
: 设置响应内容的长度。
PrintWriter getWriter()
: 获取用于写入响应的 PrintWriter 对象。
ServletOutputStream getOutputStream()
: 获取用于写入二进制响应的 ServletOutputStream 对象。
void setCharacterEncoding(String charset)
: 设置响应的字符编码