JSP

jsp(javascript page)服务端脚本语言,用于写动态网页。就是可以在html中写java代码。

一个JSP页面是由传统的HTML页面标记加上JSP标记和嵌入的Java代码组成
由以下4种元素组成:HTML标记、JSP标记、JSP脚本和注释。

执行过程:

第一次访问:jsp -> java(servlet文件) -> .class
第二次访问:直接访问.class文件
tips:所以第一次访问网页都比较慢,后面后好点了,如果服务端代码修改时,服务器会重新编译。

架构

CS:Client Server

BS:Browser Server
内容较多,可查看:cs和bs架构的区别

tomcat服务器

目录结构:

bin:可执行文件都放在这(startup.bat开启服务器 shutdown.bat关闭服务器)
只有开启了服务器才能够访问部署在tomcat的网页

conf:(configure)配置文件都放在这

lib:tomcat依赖的jar文件

log:日志文件

temp:临时文件

webapps:可执行的项目(一般我们的项目都放在这里面)

work:存放由jsp翻译成java以及编译后的class文件

常见状态码

200:一切正常

404:资源不存在

403:权限不足

3开头:重定向

5开头:服务器内部出错(一般是代码写错)

虚拟路径

先来看看conf/server.xml文件中常用的一些配置吧
在这里插入图片描述
很多人不知道去哪里看自己设置的端口号或者想要自己重新设置端口号,这里就可以解决你的问题!

那我们再来看看一张图:
在这里插入图片描述
所以我们在输入url的时候需要localhost:端口号/文件夹/文件名

<welcome-file-list>

服务器一开始是怎么知道哪些文件是默认文件的呢?

原来在WEB-INF/web.xml中设置了 默认的 初始页面

<welcome-file-list>

	<!--你也可以添加一些默认的初始页面-->

	<welcome-file>index.jsp</welcome-file>

<welcome-file-list>

当你输入localhost:端口号时,服务器会先在这里找文件,如果没有找到就404

JSP中写java代码

<%@ %>、<% %>,<%= %>,<%! %>跟<%-- --%>标签

<%@ 指令%>:指令标签,将有关页面的特殊处理信息传送到JSP容器,告诉容器如何处理JSP网页。
指令主要包括:page 指令include 指令taglib指令

page指令:用来定义和操作许多重要的依赖于页面的属性,这些属性影响整个JSP文件
语法:<%@ page 一些配置属性 %>
其属性:

  • language: 指定jsp页面使用的脚本语言
  • import: 导入类或包,导入多个时用,分割。如果不写该属性,JSP页面自动引入以下4个包:java.servlet.*; java.lang.*; java.servlet.http.*; java.servlet.jsp.*;
  • pageEncoding: 指定jsp文件本身的编码
  • contentType: 指定浏览器解析jsp的编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

include指令:引入静态资源文件。
语法:<%@ include file="relativeURL" %>
注意事项:

  • 可以让页面内容分成几个组成部分分别管理。
  • 出现在一个JSP页面中的include指令的数量不受限制。
  • 被包含文件的URL路径一定是和发出指令的JSP页面相对的路径,即这些文件应该和当前JSP页面在同一个Web应用中。
  • 该指令采取的是静态插入方式,所谓静态插入,是指当前的JSP页面和被嵌入的文件合并成一个新的JSP页面,然后JSP引擎再将这个新页面转换成Servlet。

taglib指令:自定义指令
语法:<%@ taglib uri ="tagLibraryURI" prefix = "tagPrefix" %> 其中uri是用户自定义标记所在的标记库描述文件的url地址,prefix是标记库描述文件的前缀

有关自定义指令更详细的内容可自行百度。


<% %>:可编写java代码块以及定义局部变量

  1. 一个JSP页面可以有多个代码段,它们被JSP引擎按顺序执行,并且这些代码段之间可以插入一些标记元素。
  2. 在代码段中也可以声明变量,但这些变量是_jspService()中的局部变量,它们在JSP页面内所有代码段部分和表达式部分有效。
  3. 当客户请求一个JSP页面时,JSP引擎为每个客户产生一个线程,每个线程分别执行各自的_jspService()方法,因此一个客户对局部变量的操作不会影响其它客户。
<%  // 这里定义局部变量,常规java代码
	init(9);
	for(int i = 0; i < 3; i++){
		// 换行用<br/>
		out.print(i*i + "<br/>");
%>

<%= %> 称为输出表达式 功能与out.print()等价

<%=  
	// 可以在这里写一些简单的表达式
	"你好啊" + name
%>

<%! %> 一般在此定义/声明全局变量,方法

<%! 
	public String name; 
	public void init(int n){
		name = "codekiang" + n;
	}
%>

注意:out.print()以及输出表达式可以解析html标签


<%-- --%> 注释标签,网页中不可见。

<%-- 
	 <%@ page %> => page 指令
 --%>

到了这里,一些代码你就可以得心应手的写出来啦。那么如果遇到需要在java代码中写html标签那该怎么办呢?
在这里插入图片描述
我们可以这样做:

<%  // 这里定义局部变量,常规java代码
	for(int i = 0; i < 3; i++){
	out.print("哈哈哈")
%>
<h2>CodeKiang好帅</h2>
<% }%>

这是我们可以把java代码用<% %>分开来,中间写html标签。


注意项:以上出现的标签%跟其他符号之间都不能存在空格,如<%= %>以及<%! %>中的%跟!,=之间不要有空格!!

JSP动作

JSP动作标记是JSP页面中使用的一种特殊的标记,它利用XML语法格式的标记来控制JSP引擎完成某种功能。

<jsp:include>:在页面被请求的时候引入一个文件

如:<jsp:include page="relativeURL|<%=expression%>" flush="true"|false" /> 其中,page属性表示要包含的文件的相对地址,它可以是一个字符串,也可以是一个JSP表达式。flush属性默认为false,若为true则表示当缓冲区满时,缓冲区将被清空。

include指令和include 动作区别 (1)嵌入的内容。include指令嵌入的是静态的文本或页面,而include动作包含的可以是静态或动态内容。 (2)嵌入被包含页面的时间。include动作在处理请求时才将被包含页面嵌入进来,而include指令是在JSP文件被转换成Servlet的时候引入文件。 (3)共享局部变量。用include动作时,在页面中声明的变量不可用于另一文件;而在用include指令时,当前页面和被包含页面可以共享变量。 (4)修改的生效时间。用include指令时,修改的生效需刷新页面或去掉已经编译成的Servlet;而用include动作时,被包含页面的修改会随时生效。 (5)变量名冲突。用include指令时注意新生成的JSP页面要符合JSP语法要求,应该避免变量名的冲突。而用include动作不存在变量名冲突问题

<jsp:param>:提供了“名称——值”信息,用于将附加在request中的参数发送至转发的页面。
语法:<jsp:param name="parameterName" value="{parameterValue | <%= expression %> }" /> name属性指定参数的名称,value属性指定参数的值。

还可与 <jsp:include><jsp:forward><jsp:plugin> 标记一起使用。

<jsp:include page="relativeURL|<%=expression%>" flush="true"|false" >
	<jsp:param name="paramName" value="paramValue|<%=expression%>" />
</jsp:include>

<jsp:forward>:把请求转到一个新的页
语法:<jsp:forward page={"relativeURL" | "<%= expression %>"} />

使用<jsp:forward>标记时,JSP页面必须使用缓冲机制,不能将page指令中的buffer属性设为none。否则它将清空缓存里的内容,浏览器里将得不到任何输出。

tips:一旦JSP页面中加入<jsp:forward>,则它之后的程序将无法执行 ,<jsp:forward>标记将停止当前页面的处理而转向目标页面。

<jsp:plugin>:根据浏览器类型为Java插件生成OBJECT或EMBED标记
<jsp:useBean>:寻找或者实例化一个JavaBean
<jsp:setProperty>:设置JavaBean的属性
<jsp:getProperty>:输出某个JavaBean的属性

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐