本文发布于1423 天前,最后更新于748天前,其中的信息可能已经有所发展或是发生改变。
初识JSP
什么是Java Server Pages?
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
本质
其本质还是servlet
- java代码会被原封不动地输出,HTML代码会被转化:
out.write("\n");
out.write("\n");
out.write("<html>\n");
out.write(" <head>\n");
out.write(" <title>$Title$</title>\n");
out.write(" </head>\n");
out.write(" <body>\n");
out.write(" $END$\n");
out.write(" </body>\n");
out.write("</html>\n");
JSP的基础语法
- java语法都支持,还拥有一些扩充语法
JSP表达式
- 作用:将程序的输出,输出到客户端
- 语法:
<%= 表达式%>
<%= new java.util.Date()%>
<%
int sum = 0;
for (int i = 0; i < 100; i++) {
sum += i;
}
out.println("<h1>"+sum+"</h1>");
%>
<%
for (int i = 0; i < 100; i++) {
%>
<h1>Hello World <%=i%></h1>
<%
}
%>
out.write("\r\n");
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write(" <title>Title</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.print( new java.util.Date());
out.write('\r');
out.write('\n');
int sum = 0;
for (int i = 0; i < 100; i++) {
sum += i;
}
out.println("<h1>"+sum+"</h1>");
out.write('\r');
out.write('\n');
for (int i = 0; i < 100; i++) {
out.write("\r\n");
out.write("<h1>Hello World ");
out.print(i);
out.write("</h1>\r\n");
}
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
JSP声明
jsp声明会被编译到java类中,其他的会被生成到jspService方法中
<%!
static {
System.out.println("Loading Servlet");
}
private int globalVar = 0;
public void kkk(){
System.out.println("进入了kkk方法");
}
%>
EL表达式
${}等价于
<%=%>“`
- 如果EL表达式无效,需要在头部配置
<%@page isELIgnored="false" %>
注释
<%--注释--%>
指令
<%@page 指令 %>
错误页面配置
- 直接在页面内配置
<%@page errorPage="error/errorPage.jsp" %>
- web.xml配置
<web-app>
<error-page>
<error-code>404</error-code>
<location>/error/errorPage.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/errorPage.jsp</location>
</error-page>
</web-app>
包含页面
- 会将页面合二为一
<%@include file="index.jsp" %>
- 拼接页面,本质还是几个(一般用这个,灵活性更高)
<jsp:include page="index.jsp"/>
九大内置对象
- pageContext 存东西
- Request 存东西
- Response
- Session 存东西
- Application[ServletContext] 存东西
- config[ServletConfig]
- out 输出内容
- page 几乎不用
- exception
<%
pageContext.setAttribute("name1", "HUII"); // 保存的数据只在一个页面中有效
request.setAttribute("name2", "HUII"); // 只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3", "HUII"); // 只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4", "HUII"); // 只在服务器中有效,从打开服务器到关闭服务器
%>
脚本片段中的代码会被原封不动地生成到JSP.java中
要求:Java语法正确
<%
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5"); // 不存在
%>
<h1>取出的值</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3>
- 如果不使用EL表达式,而是使用
<h3><%=name5%></h3>
,则会出现:
- 页面转发
<%
pageContext.forward("/success.jsp");
%>
JSP标签、JSTL标签、EL表达式
EL表达式
- 获取数据
- 执行运算
- 获取web开发的常用对象
JSP标签【几乎不用】
- include
<%@include file="index.jsp" %>
- 转发、传值
<jsp:forward page="index.jsp">
<jsp:param name="value" value="valvalue"/>
</jsp:forward>
对应页面取值
<%=request.getParameter("value")%>
JSTL表达式
- JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。 JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- JSTL 函数 弥补了html的不足
- 引入jstl核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用:c:forEach
JavaBean
实体类
JavaBean有特定的写法
- 必须有一个无参构造
- 属性必须私有化
- 必须有对应的get/set方法
一般用来和数据库的字段做映射 ORM
ORM:对象关系映射
- 表—>类
- 字段—>属性
- 行记录—对象、
package top.huii.pojo;
public class People {
private int id;
private String name;
private int age;
private String address;
public People(int id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}