0
点赞
收藏
分享

微信扫一扫

JSP学习笔记一

本文目录

  • ​​一、Servlet响应页面的问题​​
  • ​​二、JSP(Java Server Pages)​​
  • ​​2.1 概念​​
  • ​​2.2 作用​​
  • ​​三、JSP开发(重要)​​
  • ​​3.1 创建JSP​​
  • ​​3.1.1 JSP编写Java代码​​
  • ​​3.1.2 访问JSP​​
  • ​​3.2 JSP与Servlet​​
  • ​​3.3 JSP实现原理​​
  • ​​3.3.1 JSP.java源文件存放目录​​
  • ​​四、JSP与HTML集成开发​​
  • ​​4.1 脚本​​
  • ​​4.1.1 普通脚本​​
  • ​​4.1.2 声明脚本​​
  • ​​4.1.3 输出脚本​​
  • ​​4.2 JSP注释​​
  • ​​4.2.1 语法规则​​
  • ​​4.2.2 注释示例​​
  • ​​4.3 JSP指令​​
  • ​​4.3.1 page指令​​
  • ​​4.3.2 include指定​​
  • ​​4.3.3 taglib指令​​
  • ​​4.4 动作标签​​
  • ​​4.4.1 include​​
  • ​​4.4.2 useBean​​
  • ​​4.4.3 setProperty​​
  • ​​4.4.4 getProperty​​
  • ​​4.4.5 forward​​
  • ​​4.4.6 param​​
  • ​​4.5 内置对象​​
  • ​​4.5.1 四大域对象​​
  • ​​4.5.2 pageContext对象​​
  • ​​4.5.3 pageContext获取其它内置对象​​
  • ​​4.5.4 pageContext操作其它内置对象的作用域​​
  • ​​4.6 整合​​

JSP学习笔记一_tomcat

一、Servlet响应页面的问题

在Servlet学习过程中,服务器端通过Servlet响应客户端页面,不足之处有很多:

  • 开发方式麻烦:继承父类、重写方法、配置Web.xml或注解
  • 代码修改麻烦:修改代码后需要重新编译、部署、重启服务等
  • 显示方式麻烦:通过response对象获取流、使用println(“”);逐行输出
  • 协同开发麻烦:前端负责开发、美化页面,程序员负责编写代码。前端不动Java,程序员不能将所有前端页面内容通过流输出

二、JSP(Java Server Pages)

2.1 概念

简化的Servlet设计,在HTML标签中嵌套Java代码,用以高校开发Web应用的动态网页

2.2 作用

替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)

三、JSP开发(重要)

3.1 创建JSP

在web目录下创建*.jsp文件(与WEB-INF平级)

JSP学习笔记一_tomcat_02

3.1.1 JSP编写Java代码

使用<%= %>标签编写Java代码在页面中打印当前系统时间

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个JSP页面</title>
</head>
<body>
<h2>现在时间是:</h2>
<%=new Date()%>
</body>
</html>

3.1.2 访问JSP

在浏览地址栏中输入“http://localhost:8080/项目名称/资源名称”访问指定JSP

3.2 JSP与Servlet

  1. 关系
  • JSP文件在容器中会转换成Servlet执行
  • JSP是对Servlet的一种高级封装。本质还是Servlet
  1. 区别
  • 与Servlet相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println()语句

3.3 JSP实现原理

Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端。

JSP学习笔记一_java_03

3.3.1 JSP.java源文件存放目录

使用IDEA开发工具,Tomcat编译后的JSP文件(Xxx_jsp_class和Xxx_jsp.java)的存放地点:

JSP学习笔记一_js_04

四、JSP与HTML集成开发

4.1 脚本

脚本可以编写Java语句、变量、方法或表达式

4.1.1 普通脚本

  • 语法:

    • <% Java代码 %>
  • 注意:

    • 普通脚本可以使用所有Java语法,除了定义函数
    • 脚本与脚本之间不可嵌套,脚本与HTML标签不可嵌套

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个JSP页面</title>
</head>
<body>
<%
//在jsp页面中编写输出语句

//带你内容在客户端页面
out.print("hello jsp");
//打印内容在控制台
System.out.println("hello java");
%>

</body>
</html>

4.1.2 声明脚本

  • 语法:

    • <%! 定义变量、函数 %>
  • 注意:

    • 声明脚本声明的变量是全局变量
    • 声明脚本的内容必须在普通脚本<% %>中调用
    • 如果声明脚本中的函数具有返回值,可以使用输出脚本调用<%= %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个JSP页面</title>
</head>
<body>
<%-- 声明脚本--%>
<%!
int i = 100;
int a,b,c;
Object obj = new Object();

//定义方法
public void method1() {
System.out.println("method1().....");
}

public int method2() {
return 200;
}

public void sum(int num1, int num2) {
System.out.println(num1 + num2);
}

public int sum(int num1, int num2, int num3) {
return num1 + num2 + num3;
}
%>
</body>
</html>

4.1.3 输出脚本

  • 语法:

    • <%= Java表达式 %>
  • 注意:

    • 输出脚本可以输出带有返回值的函数
    • 输出脚本中不能加分号;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个JSP页面</title>
</head>
<body>
<%-- 声明脚本--%>
<%!
int i = 100;
int a,b,c;
Object obj = new Object();

//定义方法
public void method1() {
System.out.println("method1().....");
}

public int method2() {
return 200;
}

public void sum(int num1, int num2) {
System.out.println(num1 + num2);
}

public int sum(int num1, int num2, int num3) {
return num1 + num2 + num3;
}
%>

<%
//调用声明脚本中的变量及方法
System.out.println("i=" + i);
System.out.println("a:" + a + ";b=" + b + ";c=" + c);
System.out.println("object:" + obj);

System.out.println("调用方法:");
method1();
System.out.println(method2());
sum(1000, 2000);
System.out.println(sum(100, 200, 300));
%>

<%--
<%=%>会将内容输出在客户端
输出脚本不能加分号
--%>
<%=method2()%>
<%=sum(1000, 2000, 3000)%>


</body>
</html>

4.2 JSP注释

JSP注释主要有2个作用:为脚本代码作注释、为HTML内容作注释

4.2.1 语法规则

语法

描述

<%-- 注释内容 --%>

JSP注释,注释内容不会被发送至浏览器甚至不会被编译

HTML注释,通过浏览器查看网页源代码时可以看见注释内容

4.2.2 注释示例

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个JSP页面</title>
</head>
<body>
<%-- 这是jsp注释,在网页中不会被显示,在Java文件中也不会显示--%>
<!-- 这是HTML注释,在网页源代码中会显示-->
<p>
今天日期是:<%=new Date()%>
</p>
</body>
</html>

4.3 JSP指令

JSP指令用来设置与整个JSP页面相关的属性

指令

描述

<%@ page…%>

定义页面的依赖属性,比如脚本语言、error页面、缓存需求等

<%@ include…%>

包含其他文件

<%@ taglib…%>

引入标签库的定义。可以是自定义标签

4.3.1 page指令

(1)page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

(2)语法:<%@ page attribute1=“value1” attribute2=“value2” … %>

属性

描述

contentType

指定当前JSP页面的MIME类型和字符编码格式

errorPage

指定当JSP页面发生异常时需要转向的错误处理页面

isErrorPage

指定当前页面是否可以作为另一个JSP页面的错误处理页面

impotr

导入要使用的Java类

language

定义JSP页面所用的脚本语言,默认是Java

session

指定JSP页面是否使用session、默认为true立即创建,false为使用时创建

pageEncoding

指定JSP页面的解码格式

4.3.2 include指定

(1)通过include指令来包含其他文件

(2)被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)

(3)语法:<%@ include file=“被包含的JSP路径” %>

(4)可能会有重名的冲突问题。不建议使用

<%@ include file="header.jsp"%>
......
......
<%@ include file="footer.jsp"%>

4.3.3 taglib指令

(1)引入JSP的标准签库

(2)语法:<%@taglib uri=“外部标签库路径” prefix=“前缀” %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

4.4 动作标签

(1)动作标签指的是JSP页面在运行期间的命令

(2)语法:<jsp:action_name attribute=“value” />

4.4.1 include

(1)<jsp:include>动作元素会将外部文件输出结果包含在JSP中(动态包含)

(2)语法:<jsp:include page=“相对URL地址” />

(3)前面介绍过的include指令,它是将外部文件的输出代码复制到当前JSP文件中。这里的jsp:include动作不同,是将外部文件的输出结果引入到当前的JSP文件中

属性

描述

page

包含在页面中的相对地址

<jsp:include page="index.jsp"/>

4.4.2 useBean

(1)jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean

(2)语法:<jsp:useBean id=“name” class=“package.className” />

(3)在类载入后,可以通过jsp:setProperty和jsp:getProperty动作来修改和获取bean的属性

<jsp:useBean id="user" class="com.cxyzxc.www.entity.User" />

4.4.3 setProperty

可以在jsp:useBean元素之后使用jsp:setProperty进行属性的赋值

属性

描述

name

name属性是必需的。它表示要设置属性的是哪个Bean

property

property属性是必需的。它表示要设置哪个属性

value

value属性是可选的。该属性用来指定Bean属性的值

<jsp:useBean id="user" class="com.cxyzxc.www.entity.User" />
<jsp:setProperty name="user" property="name" value="zhangsan" />

4.4.4 getProperty

jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出

属性

描述

name

要检索的Bean属性名称、Bean必须已定义

property

表示要提取Bean属性的值

<jsp:useBean id="user" class="com.cxyzxc.www.entity.User" />
<jsp:setProperty name="user" property="name" value="zhangsan" />
<jsp:getProperty name="user" property="name" />

4.4.5 forward

(1)jsp:forward动作把请求转到另外页面

(2)语法:<jsp:forward page=“相对URL地址” />

属性

描述

page

page属性包含的是一个相对URL

<jsp:forward page="index.jsp" />

4.4.6 param

(1)在转发动作内部使用,做参数传递

(2)语法:<jsp:param name=“” value=“” />

<jsp:forward page="index.jsp">
<!-- http请求参数传递-->
<jsp:param name="sex" value="nan" />
</jsp:forward>

4.5 内置对象

由JSP自动创建的对象,可以直接使用

对象名

类型

说明

request

javax.servlet.http.HttpServletRequest

response

javax.servlet.http.HttpServletResponse

session

javax.servlet.http.HttpSession

由session="true"开关

application

javax.servlet.ServletContext

config

javax.servlet.ServletConfig

exception

java.lang.Throwable

由isErrorPage="false"开关

out

javax.servlet.jsp.JspWriter

javax.servlet.jsp.JspWriter

pageContext

javax.servlet.jsp.PageContext

page

java.lang.Object当前对象this

当前servlet实例

4.5.1 四大域对象

JSP有4大作用域对象,存储数据和获取数据的方式一样,不同的是取值的范围有差别。

  • pageContext(javax.servlet.jsp.PageContext)当前JSP页面范围
  • request(javax.servlet.http.HttpServletRequest)一次请求有效
  • session(javax.servlet.http.HttpSession)一次会话有效(关闭浏览器失效)
  • application(javax.servlet.ServletContext)整个Web应用有效(服务器重启或关闭失效)

4.5.2 pageContext对象

  • pageContext对象是javax.servlet.jsp.PageContext类的实例,拥有作用域,用来代表整个JSP页面。
  • 当前页面的作用于对象,一旦跳转则失效
  • 通过setAttribute(“name”,value);存储值
  • 通过getAttribute(“name”);获取值
  • 用于获取其它8个内置对象或者操作其它对象的作用域

<%
pageContext.setAttribute("name",value);//当前页面作用域有效
%>

4.5.3 pageContext获取其它内置对象

<%
pageContext.getRequest();//返回request内置对象
pageContext.getResponse();//返回response内置对象
pageContext.getServletConfig();//返回config内置对象
pageContext.getException();//返回exception内置对象
pageContext.getPage();//返回page内置对象
pageContext.getOut();//返回out内置对象
pageContext.getServletContext();//返回application内置对象
pageContext.getSession();//返回session内置对象
%>

4.5.4 pageContext操作其它内置对象的作用域

pageContext对象可以操作其它作用域存储和获取

<%
//操作其他作用域存储数据
pageContext.setAttribute("name",value);//当前页面有效
pageContext.setAttribute("name",value,PageContext.REQUEST_SCOPE);//request作用域
pageContext.setAttribute("name",value,PageContext.SESSION_SCOPE);//session作用域
pageContext.setAttribute("name",value,PageContext.APPLICATION_SCOPE);//application作用域
%>

<%
//操作其他作用域获取
pageContext.getAttribute("name");//当前页面作用域
pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//request作用域
pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//session作用域
pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);//application作用域
pageContext.findAttribute("name");//从pageContext、request、session、application依次查找
%>

4.6 整合

将EmpProject项目所有显示页面JSP的Servlet替换为JSP页面,使用脚本进行显示




举报

相关推荐

0 条评论