jsp 动态添加一行数据_052 JAVA-Servlet-jsp

JSP

出现背景(问题):

在学习了 Servlet 之后,使用 Servlet 进行页面的展现,代码书写过于麻烦。极大的影响了

开发的效率,那么有没有一种方式可以让我们像以前写网页一样来进行网页的编程工作呢?

解决方法:

使用JSP技术

JSP 全名为 Java Server Pages,中文名叫 java 服务器页面,其根 本是一个简化的

Servlet 设计,它是由 Sun Microsystems 公司 倡导、许多公司参与一起建立的一种动态网

页技术标准。

JSP是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据。

作用:

特点:

本质上还是 Servlet

跨平台,一次编写处处运行

组件跨平台

健壮性和安全性

Jsp 的访问原理:

浏览器发起请求,请求 JSP,请求被 Tomcat 服务器接收,执行JspServlet 将请求的 JSP

文件转义成为对应的 java 文件(也是Servlet),然后执行转义好的 java 文件。

2cdc907ceedc027679b057973e7110ac.png

步骤:

1.就像其他普通的网页一样,浏览器发送一个 HTTP 请求给服务器。

2.Web 服务器识别出这是一个对 JSP 网页的请求,并且将该请求传递给 JSP 引擎。通过使用 URL或者 .jsp 文件来完成。

3.JSP 引擎从磁盘中载入 JSP 文件,然后将它们转化为 Servlet。这种转化只是简单地将所有模板文本改用 println() 语句,并且将所有的 JSP 元素转化成 Java 代码。

4.JSP 引擎将 Servlet 编译成可执行类,并且将原始请求传递给 Servlet 引擎。

5.Web 服务器的某组件将会调用 Servlet 引擎,然后载入并执行 Servlet 类。在执行过程中,Servlet 产生 HTML 格式的输出并将其内嵌于 HTTP response 中上交给 Web 服务器。

6.Web 服务器以静态 HTML 网页的形式将 HTTP response 返回到您的浏览器中。

7.最终,Web 浏览器处理 HTTP response 中动态产生的HTML网页,就好像在处理静态网页一样

--------------------------------------------------------------------------------------------------------------------

jsp三大指令

page指令,include指令, taglib指令

f869f644bd3536cf297295f55bf76b40.png

--------------------------------------------------------------------------------------------------------------------

Jsp的page指令

<%@page language="java"%><%-- 声明转译的语言 --%>
<%@page import="java.util.*,java.lang.*"%><%-- 声明转译时导入的java包文件--%>
<%@page pageEncoding="utf-8"%><%-- 设置jsp的数据保存的编码格式--%>
<%@page contentType="text/html; charset=utf-8"%><%-- 设置数据的响应编码格式--%>
<%@page session="false"%><%-- 设置session的状态,默认为true,也就转译的servlet文件中默认session是开启的,使用false关闭--%>
<%--session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象--%>
<%@page isErrorPage="true"%><%-- 默认为false true表示开启exception异常对象的使用--%>
<%@page errorPage="error.jsp"%><%-- 设置当jsp运行出现异常错误时跳转指定的页面--%>

作用:设置jsp转译的时候的一些配置信息。

pageEncoding和contentType之间的区别:

pageEncoding:它指定当前jsp页面的编码在服务器要把jsp编译成.java时需要使用pageEncoding

contentType:它表示添加一个响应头:Content-Type等同与response.setContentType

(“text/html;charset=utf-8”);

如果两个属性只提供一个,那么另一个的默认值为设置那一个。

如果两个属性都没有设置,那么默认为ISO-8859-1

errorPage和isErrorPage 之间的区别:

errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定

isErrorPage:它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!

而且这个页面可以使用9大内置对象中的exception

--------------------------------------------------------------------------------------------------------------------

Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="文件相对 url 地址" %>

include 指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

等价的XML语法:

<jsp:directive.include file="文件相对 url 地址" />

--------------------------------------------------------------------------------------------------------------------

Jsp的局部代码块和全局代码块及java脚本段、表达式

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--
	局部代码块
	声明方式:<% java代码 %>	
	特点:
		使用局部代码块声明的java代码会被原样转译到_jspService方法中。也就是局部代码。
--%>
<%
	int a=123;
	System.out.println(a);
	test();
	System.out.println(b);
%>

<%--
	全局代码块
		声明方式:<%! 声明全局java代码%>
		特点:
			全局代码块中声明的java代码,在被转译时,会转译成jsp对应的java文件的全局的代码。
		作用:
			声明方法和全局量等
		注意:
			使用全局代码块声明方法,使用局部代码块调用方法。
 --%>
 <%!
 	int b=1234;
 	public void test(){
 		System.out.println("全局代码块");
 	}
 %>
 
 <%--
	java脚本段、表达式 
	声明方式:<%=变量名或者方法名()%>
	作用:将java代码的运算结果数据或者其他数据响应给浏览器
	注意:
		在该表达式中不能使用分号结尾	
--%>
<i><%=b%></i>

局部代码块:

声明方式:<% java代码 %>

特点:

使用局部代码块声明的java代码会被原样转译到_JspService方法中。也就是局部代码。

全局代码块:

声明方式:<%! 声明全局java代码%>

特点:

全局代码块中声明的java代码,在被转译时,会转译成jsp对应的java文件的全局的代码。 作用: 声明方法和全局量等

注意:可以使用全局代码块声明方法,使用局部代码块调用方法。

java脚本段、表达式:

声明方式:<%=变量名或者方法名()%>

作用:将java代码的运算结果数据或者其他数据响应给浏览器

注意:在该表达式中不能使用分号结尾

--------------------------------------------------------------------------------------------------------------------

Jsp声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,必须先声明这些变量和方法然后才能使用它们。

JSP声明的语法格式:

<%! declaration; [ declaration; ]+ ... %>

或者

<jsp:declaration>   
     代码片段
</jsp:declaration>

示例:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

--------------------------------------------------------------------------------------------------------------------

JSP表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式

JSP表达式的语法格式:

<%= 表达式 %>

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html> 

结果:

573d8535a4b645e6e9a6659f0824327e.png

--------------------------------------------------------------------------------------------------------------------

Jsp注释

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--
	jsp的注释:
		HTML注释:会被转译也会被响应给浏览器,但是浏览器不会执行。
		CSS注释:会被转译也会被响应给浏览器,但是浏览器不会执行。
		js注释:会被转译也会被响应给浏览器,但是浏览器不会执行。
		java注释:会被转译,但不会执行
		jsp注释:注释内容不会被转译,也不会被执行
			格式:%-- 注释内容 --%
 --%>
 <html>
 	<head>
 		<style type="text/css">
 			/* 我是css注释 */
 		</style>
 		<script type="text/javascript">
 			//我是js注释
 		
 		</script>
 	</head>
 	<%
 		//int a=3;
 		int b=456;
 	%>
 	<body>
 		<!--我是HTML注释  -->
 		<!-- <i>哈哈哈</i> -->
 		<b>HTML注释</b>
 	</body>
 </html>

HTML注释:会被转译也会被响应给浏览器,但是浏览器不会执行。

CSS注释:会被转译也会被响应给浏览器,但是浏览器不会执行。

js注释:会被转译也会被响应给浏览器,但是浏览器不会执行。

java注释:会被转译,但不会执行

jsp注释:注释内容不会被转译,也不会被执行

格式:<%-- 注释内容 --%>

--------------------------------------------------------------------------------------------------------------------

Jsp的静态引入和动态引入

出现背景(问题):

出现不同的jsp页面会使用相同的资源。如果将资源在每个jsp页面都单独声明

则会造成代码的冗余量过高,不易于代码的维护和升级。

解决方法:

使用静态引入和动态引入的方式

作用:

实现了不同jsp之间的资源共享。

----静态引入:

	<%@include file="要引入的资源的相对路径"%>

特点:

被引入的jsp文件和原有jsp文件被转译成一个java文件使用。

**注意:静态引入的相关jsp文件中不能声明同名变量。

----动态引入:

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

特点:

被引入的文件会被单独转译,原有jsp文件会调用被引入的jsp文件。

**注意:动态引入的相关jsp文件中可以声明同名变量。

被引入的jsp对象:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
	<h4>静态引入和动态引入</h4>
	<hr>
	<%-- 直接插入 --%>
	<i>&copy;网站声明,手机号:77889900,网站备案号等 </i>
	<hr>
	
	<%-- 静态引入 --%>
	<%@include file="publicStatic.jsp" %>
	<hr>
	
	<%-- 动态引入 --%>
	<jsp:include page="publicTrends.jsp"></jsp:include>
</html>

静态引入的jsp对象:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<i>&copy;静态引入   网站声明,手机号:77889900,网站备案号等 </i>

动态引入的jsp对象:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<i>&copy;动态引入    网站声明,手机号:77889900,网站备案号等 </i>

--------------------------------------------------------------------------------------------------------------------

Jsp中forward标签

用于jsp之间的资源转发:

出现背景(问题):

不同的jsp在处理请求时,有可能会将当前的请求转发给另外的jsp进行处理。

解决:

使用forward动作指令

使用:

<jsp:forward page="要转发的jsp的相对路径"></jsp:forward>

特点:

从当前jsp跳转另外一个jsp页面。

**注意:

forward标签中除了<jsp:param value="" name=""/>子标签以外不能出现其他内容,否则会报错。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
	<head>
	</head>
	<body>
		<!-- forward请求转发 -->
		<%
			int a=1;
			if(a>2){
		%>
				<p>源网页</p>
		<%
			}else{
		%>
				<jsp:forward page="common.jsp"><jsp:param value="zhangsan" name="uname"/></jsp:forward>
		<%
			}
		%>
	</body>
</html>

跳转的页面(common.jsp):

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
	<head>
	</head>
	<body>
		<h3>跳转的页面</h3>
		<hr>
		<%
			String str = request.getParameter("uname");
			System.out.println(str);
		%>
	</body>
</html>

Jsp的内置对象

在jsp中无需声明即可直接使用的9个对象:

request(HttpServletRequest):即HttpServletRequest类的对象,封存了请求相关数据,由服务器创建

response(HttpServletResponse):即HttpServletResponse类的对象,响应对象,设置编码格式

page(当前JSP对象):代表当前被执行的jsp转译的java文件的对象,这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

session(HttpSession):即HttpSession类的对象,解决了同一会话不同请求之间的数据共享问题。

但不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。

application(ServletContext):即ServletContext类的对象,解决了不同用户之间的数据共享问题

out(JspWriter):响应数据的对象,交于response对象,out对象底层使用了缓冲区,等同与response.getWriter(),用来向客户端发送文本数据。out对象的效率高于response

config(ServletConfig):ServletConfig对象,使用此对象完成资源的初始化

exception(Throwable):jsp页面的异常对象,封存了异常信息,只有在错误页面中可以使用这个对象

pageContext(PageContext):页面上下文对象,javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。此对象封存了另外8个对象。

注意:一个jsp页面一个pageContext对象。pageContext对象每次请求都会重新创建。

作用域:当前jsp页面

--------------------------------------------------------------------------------------------------------------------

Jsp与Servlet确定任务

JSP 负责页面展现,Servlet 负责业务逻辑处理

Servlet重定向jsp:

resp.sendRedirect("jsp的相对路径/servlet的别名");//重定向jsp页面

Servlet请求转发jsp:

req.getRequestDispatcher("jsp的相对路径/servlet的别名").forward(req, resp);//请求转发到jsp页面

注意:以上两种写法其实都是相对路径,相对路径指的是从当前请求路径查找jsp所经过的路径。

服务器根目录: 服务器的webapps目录路径 localhost:8080/

项目根目录: 服务器的webapps目录下项目路径 localhost:8080/jsp/

请求转发和重定向的绝对路径写法总结:

重定向:

在重定向中的路径中第一个/表示服务器根目录。

示例:

resp.sendRedirect("/虚拟项目名/资源路径");//重定向jsp页面

请求转发:

在请求转发中第一个/表示项目根目录

示例:

req.getRequestDispatcher("/资源路径").forward(req, resp);//请求转发到jsp页面

package com.sxt.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet01 extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		//设置请求编码格式
		request.setCharacterEncoding("utf-8");
		//设置响应编码格式
		response.setContentType("text/html;charset=utf-8");
		String way = request.getParameter("way");
		if("main".equals(way)){
			//重定向jsp页面
			//response.sendRedirect("main.jsp");
			//response.sendRedirect("/Jsp5/main.jsp");
			//请求转发
			request.getRequestDispatcher("/main.jsp").forward(request, response);
		}else{
			response.sendRedirect("/Jsp5/error.jsp");
		}
	}
}

跳转的两个页面

main.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
	<head>
	</head>
	<body>
		<b>主页显示</b>
	</body>
</html>

error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
	<head>
	</head>
	<body>
		<b>服务区错误</b>
	</body>
</html>

------------------------------------------------------------------------------------------------------------------------

Jsp资源路径总结:

相对路径:../../资源

绝对路径:/虚拟项目名/资源路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值