JSP初学一(学习尚硅谷视频教程笔记)

之前雀巢水是JSP开发的,直接在项目中就开始写业务,没有好好从基础去学,最近有时间好好打基础。

JSP是简化 Servlet 编写的一种技术,它将 Java 代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用 Java 代码来编写,而对固定不变的静态内容采用普通静态 HTML 页面的方式编写。
Java Server Page 服务器端网页:在HTML页面中编写Java代码的页面。扩展名必须是.jsp

例:打印时间(需要在顶部引入java时间类的包)

1
2
3
4
5
6
<body>
<%
Date date = new Date();
System.out.println(date);
%>
</body>

JSP 可以放在 WEB 应用程序中的除了 WEB-INF 及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。

JSP生成的java文件也间接继承了HttpServlet(去看源码可以发现)

JSP本质上是一个Servlet。
每个JSP页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件。然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。

JSP页面的隐含变量(没有声明就可以使用的)

1
2
3
4
5
6
7
8
9
10
11
12
13
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
// ...
// 使用 <% %> 编写的代码在此设置。可以用到
// request,response,pageContext,session,application,config,out,page
// 这8个隐含对象。(实际上还可以使用一个叫 exception 的隐含对象)
}
  • request:HttpServletRequest的一个对象
  • response:HttpServletResponse的一个对象
  • pageContext:PageContext的一个对象。页面的上下文,可以从该对象中获取到其他8个隐含对象,也可以从中获取到当前页面的其他信息。

  • session:HttpSession的一个对象。代表浏览器和服务器的一次会话。

  • application:ServletContext的对象。代表当前 WEB 应用。
  • config:ServletConfig对象(几乎不使用)。若需要访问当前JSP配置的初始化参数,需要通过映射的地址才可以。

  • out:Jspwriter的对象。调用out.println()可以直接把字符串打印到浏览器上。

  • page:指向当前JSP对应的Servlet对象的引用,只能调用Object方法,开发时不用。
  • exception:在声明了page指令的isErrorPage="true"时才可以使用。

基本语法

例(基本结构):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Date date = new Date();
System.out.println(date);
%>
<%
String str = date.toString();
// 沒有聲明就可以使用的對象(隱含對象)
String name = request.getParameter("name");
System.out.println(name);
System.out.println(session.getId());
System.out.println(application.getInitParameter("password"));
%>
</body>
</html>

脚本片段的一种写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
<%
String ageStr = request.getParameter("age");
Integer age = Integer.parseInt(ageStr);
if(age >= 18) {
%>
成人...
<%
} else {
%>
未成人...
<%
}
%>

JSP声明

JSP声明将Java代码封装在<%!%>之中,它里面的代码将被插入进Servlet的_jspService方法的外面,所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。
在JSP页面中几乎从不这样使用

JSP注释

<!-- 被注释的内容 -->可以阻止java代码执行。

和属性相关的方法

  • Object getAttribute(String name): 获取指定的属性
  • Enumeration getAttributeNames(): 获取所有的属性的名字组成的Enumeration对象
  • removeAttribute(String name): 移除指定的属性
  • void setAttribute(String name, Object o): 设置属性

pageContext, request, session, application对象都有这些方法。它们也称为域对象

  • pageContext: 属性的作用范围仅限于当前的JSP页面
  • request: 属性的作用范围仅限于同一个请求(在有转发的情况下可以跨页面获取属性值)
  • session: 属性的作用范围限于一次会话:浏览器打开直到关闭称之为一次会话(在此期间会话不失效)
  • application: 属性作用范围限于当前 WEB 应用,是范围最大的属性作用范围,只要一处设置属性,在其他各处的JSP或Servlet中都可以取到。

例:
attr1.jsp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%
pageContext.setAttribute("pageContextAttr", "pageContextValue");
request.setAttribute("requestAttr", "requestValue");
session.setAttribute("sessionAttr", "sessionValue");
application.setAttribute("applicationAttr", "applicationValue");
%>
<h2>Attr 1 Page</h2>
<br><br>
pageContextAttr: <%= pageContext.getAttribute("pageContextAttr") %>
<br><br>
requestAttr: <%= request.getAttribute("requestAttr") %>
<br><br>
sessionAttr: <%= session.getAttribute("sessionAttr") %>
<br><br>
applicationAttr: <%= application.getAttribute("applicationAttr") %>
<br><br>
<a href="attr2.jsp">To Attr2 Page</a>

attr2.jsp

1
2
3
4
5
6
7
8
9
<h2>Attr 2 Page</h2>
<br><br>
pageContextAttr: <%= pageContext.getAttribute("pageContextAttr") %>
<br><br>
requestAttr: <%= request.getAttribute("requestAttr") %>
<br><br>
sessionAttr: <%= session.getAttribute("sessionAttr") %>
<br><br>
applicationAttr: <%= application.getAttribute("applicationAttr") %>


Newer Post

JSP初学2

请求重定向与请求转发本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。 具体区别:① 请求的转发:地址栏是初次发出请求的地址。 请求的重定向:地址栏不再是初次发出的请求地址。地址栏为最后响应的那个地址。 ② 请求转发:在最终的Servlet中,request对象和中转的那个req …

继续阅读
Older Post

java HttpServlet

是一个 Servlet,继承自 GenericServlet。针对 HTTP 协议所定制。 在 service() 方法中直接把 ServletRequest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse 并调用了重载的 …

继续阅读