JSP 基础

介绍

JSP ,全程 JavaServer Pages。使用 JSP 标签在 HTML 网页中插入 Java 代码。

JSP 是一种 Java Servlet,因为 Servlet 包中包含了 JSP 规范,它是基于 Java Servlet API 的。主义用于实现 Java Web 应用程序的用户界面部分。JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

为什么不用 JavaScript

虽然 JavaScript 可以在客户端动态生成 HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。

为什么不用纯 Servlet

JSP可以很方便的编写或者修改HTML网页而不用去面对大量的 out.println() 语句。实现界面和业务逻辑处理的分离。

原理

网络服务器是需要一个 JSP 引擎,也就是一个容器来处理 JSP 页面的。容器用来截获对 JSP 页面请求。平时我们所用 Tomcat 就内嵌了 JSP 引擎。

具体 JSP 如何创建网页步骤如下:

  • 本地浏览器请求一个网页,发送 HTTP 请求给服务器
  • Web 服务器识别是对 JSP 网页的请求。将请求递交给 JSP 引擎。通过使用 URL或者 .jsp 文件来完成。
  • JSP 引擎从硬盘中载入 JSP 文件,将它们转化为 Servlet。这种转化只是简单地将所有模板文本改用 println() 语句,并且将所有的 JSP 元素转化成 Java 代码。
  • Web 服务器的某组件将会调用 Servlet 引擎,然后载入并执行 Servlet 类。
  • 执行过程,Servlet 产生 HTML 格式输出并将其内嵌到 HTTP response 中,上交给 Web 服务器
  • Web 服务器已静态 HTML 网页的形式将 HTTP response 返回到您的浏览器中。
  • 浏览器处理 HTTP response 中动态产生的HTML网页,就好像在处理静态网页一样

画一张图好理解一些:

第一次访问 jsp 页面的时候,web 容器会自动的拼凑成 Java 代码,并且编译运行,第二次访问的时候并没有重新的拼凑编译运行,除非第二次运行之前有去更改 jsp 的内容,则 tomcat 的 web 容器会在第二次访问的时候再次的拼凑编译和运行。

JSP 语法

JSP 的注释

jsp 时间是对 java 的扩充,在 jsp 中可以编写 java 代码,在 jsp 中 java 的语法都可以使用。

注释的分类

  • 显示注释
    • html 风格: <!---->
    • 在查看网页源文件的时候,可以看到该注释的内容。
  • 隐式注释
    • 在查看网页源文件的时候,可以看不到该注释的内容。
    • java 注释:\\,\**\
    • jsp 注释:
      • <%-- 隐式注释 --%> 注释内容不会被发送至浏览器并且不会被编译。

Scriptlet

如果在 jsp 中编写 java 代码,必须以 scriptlet 形式编写。有三种语法:

声明

  • <%! java 代码 %>

    可以定义全局变量,定义类、方法、常量

<%!
    public static final String PASSWORD = "wanczy";
	
	public int add(int x,int y){
		return x + y;
	}
	class Person{
		private int age;
		private String name;
		public Person(String name,int age){
			this.name = name;
			this.age = age ;
		}
		public String toString(){
			return "姓名:" + this.name + "\t年龄:" + this.age;
		}
	}

%>

脚本程序

  • <% java 代码 %>``

    可以定义变量,编写语句

<%
	//只能够定义变量,编写语句
	int x = 100;
	String s = "Wanczy";
	System.out.println("HelloWorld");
	for(int i = 100;i <= 110;i++){
		System.out.println(s + (x*i));
	}
%>

表达式

  • <%= java代码%>

    表达式输出,可以输出一个变量、常量或者一个具体的值,它先被转化成String,然后插入到表达式出现的地方。输出目标是页面。

<%
    String age = "1";
%>
<h1><%=age %></h1>

注意:这里不能用分号结束表达式。

扩展

out.println 与书写标签的区别

  • out.println() 是用来早期 Servlet 向页面输出内容的方式。而表达式的输出是 jsp 内容。
  • out.println() 输出的内容,不容易 被前端设计工具识别,而 jsp 可以被识别。

JSP 指令

用来设置与整个 JSP 页面相关的属性。注意有三种

指令描述
<%@ page … %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等
<%@ include … %>将其他文件包含尽量
<%@ taglib … %>引入标签库的定义,可以是自定义标签

Page 指令

注意用于提供当前页面说明。主要有下面几种。

设置 MIME 类型

什么是 MIME 类型?多功能网络邮件扩充协议,简单理解,就是以何种形式来展示 jsp。形式包含页面的打开格式和页面默认打开的编码。如下实例代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  • contentType
    • 页面的打开格式,和页面默认打开的编码
  • pageEncoding
    • 是 jsp 本身的编码格式,因为 jsp 编译成.java,它会根据 pageEncoding 的设定读取jsp,结果是由指定的编码方案翻译成统一的 UTF-8 JAVA源码(即.java)

示例:以 word 文档形式打开 jsp 页面

<%@ page language="java" contentType="application/msword; charset=utf-8" pageEncoding="ISO-8859-1"%>

错误页面设置

当页面出现错误会显示 404(路径错误)和 500(程序本身保存),有些则是跳转的其他页面。比如有时会跳到公益的寻找丢失儿童的页面,可以通过 errorPage=""设置。

示例:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" errorPage="../../error.html"%>

还可以表示一个页面为错误页面,通过 isErrorPage="true"

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" isErrorPage="true"%>

导包功能

在 java 中,使用import就可以进行导包了,在 jsp 中,也可以通过 import 指令进行导包,比如导入 java.util.*,还可以导入我们自己写的包,而且导包指令是 page 指令中唯一可以设置多次的指令。

示例:

<%@ page import="java.sql.*,java.util.*" %>
<%@ page import="com.waczy.entrity.Person" %>

包含指令

就是一个页面能包含其他页面。这种包含属于 jsp 的指令标签格式。并且分为两种。

  • 静态包含

    • <@include file="被包含的页面 url">

      <jsp:include file="文件相对 url 地址" />
      
  • 动态包含

    • <jsp:include page="被包含的页面"></jsp:include>

    • 获取参数的使用方法:在被包含页面使用 request.getParameter("name") 获取传递参数

      <jsp:include page="被包含的页面">
      	<jsp:param value="参数值" name="参数名称">
      </jsp:include>
      
  • 区别

    • 静态包含可以包含任意格式,包含的是文件的内容
    • 动态包含只能包含 .jsp 文件
    • 静态包含不能传递参数,动态包含可以传递参数。
    • 静态包含是先包含内容,在处理程序,而动态包含是先处理结果,在将结果包含过来。
      • 这就导致静态包含和被包含页面不能有相同的 java 变量等造成冲突的东西。

跳转指令

也就是网页中的跳转。比如 a 标签,表单提交。jsp 指令是通过 <jsp:forward page=""> 来办到。

示例:

<jsp:forward page=”跳转后的页面”>
    <jsp:param value=”参数值” name=”参数名称”/>
    <jsp:param value=”参数值” name=”参数名称”/>
</jsp:forward>

参数加不加都行。

注意

  • jsp 指令跳转地址栏是不会发生变化,而 a 标签可以,这是因为 jsp 指令跳转是转发,a 标签是重定向。
  • 转发:服务端的跳转,跳转后地址栏不会发生变化。
  • 重定向:客户端的跳转,跳转后地址栏发生变化。

其他

如何添加网页显示列表功能

如果要访问的 jsp 路径比较深,那么如果通过地址栏输入这么深的路径的话,比较费时费力,而且容易出现错误,这个时候我们可以开启 tomcat 的列表功能,这个时候我们需要配置 tomcat 的web.xml文件。

示例

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值