初识JSP

什么是Java Server Pages?

JSP 简介 | 菜鸟教程 (runoob.com)

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

本质

其本质还是servlet

image-20210502001932990

image-20210502002152260

  • java代码会被原封不动地输出,HTML代码会被转化:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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表达式

  • 作用:将程序的输出,输出到客户端
  • 语法: <%= 表达式%>
1
<%= new java.util.Date()%>

image-20210502004116581

  • ```jsp
    <%
    int sum = 0;
    for (int i = 0; i < 100; i++) {
        sum += i;
    }
    out.println("<h1>"+sum+"</h1>");
    
    %>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    ![image-20210502004240605](../img/image-20210502004240605.png)

    -

    ```jsp
    <%
    for (int i = 0; i < 100; i++) {
    %>
    <h1>Hello World <%=i%></h1>
    <%
    }
    %>

image-20210502004044714

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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方法中

1
2
3
4
5
6
7
8
9
<%!
static {
System.out.println("Loading Servlet");
}
private int globalVar = 0;
public void kkk(){
System.out.println("进入了kkk方法");
}
%>

EL表达式

EL表达式详解_浅然的专栏-CSDN博客_el表达式


- 如果EL表达式无效,需要在头部配置

  
1
<%@page isELIgnored="false" %>
### 注释
1
<%--注释--%>
### 指令
1
<%@page 指令 %>
#### 错误页面配置 - 直接在页面内配置
1
<%@page errorPage="error/errorPage.jsp" %>
- web.xml配置
1
2
3
4
5
6
7
8
9
10
<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>
#### 包含页面 - 会将页面合二为一
1
<%@include file="index.jsp" %>
- 拼接页面,本质还是几个(一般用这个,灵活性更高)
1
<jsp:include page="index.jsp"/>
## 九大内置对象 - pageContext 存东西 - Request 存东西 - Response - Session 存东西 - Application[ServletContext] 存东西 - config[ServletConfig] - out 输出内容 - page 几乎不用 - exception
1
2
3
4
5
6
<%
pageContext.setAttribute("name1", "HUII"); // 保存的数据只在一个页面中有效
request.setAttribute("name2", "HUII"); // 只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3", "HUII"); // 只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4", "HUII"); // 只在服务器中有效,从打开服务器到关闭服务器
%>
脚本片段中的代码会被原封不动地生成到JSP.java中 **要求:Java语法正确**
1
2
3
4
5
6
7
8
9
10
11
12
13
<%
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>
![image-20210502105430443](../img/image-20210502105430443.png) - 如果不使用EL表达式,而是使用```<h3><%=name5%></h3>```,则会出现: ![image-20210502105618774](../img/image-20210502105618774.png) - 页面转发
1
2
3
<%
pageContext.forward("/success.jsp");
%>
## JSP标签、JSTL标签、EL表达式 ### EL表达式 - 获取数据 - 执行运算 - 获取web开发的常用对象 ### JSP标签【几乎不用】 - include
1
<%@include file="index.jsp" %>
- 转发、传值
1
2
3
<jsp:forward page="index.jsp">
<jsp:param name="value" value="valvalue"/>
</jsp:forward>
对应页面取值
1
<%=request.getParameter("value")%>
### JSTL表达式 - [JSP 标准标签库(JSTL) | 菜鸟教程 (runoob.com)](https://www.runoob.com/jsp/jsp-jstl.html) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。 JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。 - **核心标签** - **格式化标签** - **SQL 标签** - **XML 标签** - **JSTL 函数** 弥补了html的不足 - 引入jstl核心标签库
1
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
![image-20210502111754085](../img/image-20210502111754085.png) 常用:```c:forEach

JavaBean

实体类

JavaBean有特定的写法

  • 必须有一个无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法

一般用来和数据库的字段做映射 ORM

ORM:对象关系映射

  • 表—->类
  • 字段—->属性
  • 行记录—-对象、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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 + '\'' +
'}';
}
}