java–JSP
JSP看起来像HTML,其中HTML代码叫做模板数据,java Scriptlet代码叫做JSP元素。
JSP是一种Servlet,但与HttpServlet的工作方式又不太一样。第一次访问JSP时,tomcat会先将jsp转为标准的java代码,然后将java代码编译为class文件,最后运行class,以后访问时,jsp不该动的情况下,会一直调用这个class。
看看转化过的jsp java类文件源码,可以发现,jsp和servlet基本没啥区别。
JSP标签
JSP脚本必须使用 <% %>括起来,语句必须遵循java语法。
1 2 3 4 5 6 7 8 9 | <html> <body> <% System.out.println( "aa" ); %> </body> </html> |
JSP输出
在servlet中,输出语句是 out.println(),这里jsp中的等效语法是 <%= %> 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <html> <body> <% int num = 10 ; int result = 1 ; for ( int i = 1 ; i <= num; i++){ result*=i; } %> 数字<%= num %>的乘阶是: <%= result %> </body> </html> |
JSP注释
在jsp元素中,可以使用java的标准注释,也可以使用注释标<%-- 我是注释 –%>
JSP方法
所有<% %>标签都会被原封不动的翻译为servlet中doGet这样的方法中,在方法中是无法定义方法的。
而<%! %>标签,可以方便的定义自己的方法,它会被翻译在默认方法外。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <%! private int x= 0 ; public String getX(){ return x+ "" ; } %> <% number=getX(); %> 数字<%= number %> |
JSP指令
jsp指令用来声明JSP页面的一些属性等,例如编码方式,文档类型。。。格式 <%@ 指令 属性%>
page指令
用来声明jsp页面的属性。
1 2 3 4 5 6 7 | <%@ page language= "java" contentType= "text/html" ; charset=utf- 8 %> <%-- 多个属性用;分割 --%> <%-- 也可以这样写 ,一个page指令写一个属性 --%> <%@ page pageEncoding= "UTF-8" %> <%@ page import = "java.util.*" %> |
page指令的常见属性( jsp 2.1规范)
属 性 名 称 | 取 值 范 围 | 描 述 |
language |
java |
指明解释该jsp文件时采用的语言。一般为java,默认为java。 |
extends |
任何类的全名 |
指明编译该jsp文件时继承哪个类。jsp为servlet,因此当指明继承普通类时需要实现servlet的init、destroy等方法。 |
import |
任何包名,类名 |
引入包或类。与java中的import作用相同。一个import语句也可以引入多个类:
|
session |
true , false |
指明该jsp是否内置Session对象。默认为true,存储Session对象 |
autoFlush |
true , false |
是否运行缓存,默认为true,使用out.println()输出字符串,并不是立刻到达客户端,暂时存在缓存里,等待程序执行完毕或者out.flus(),字符才发送到客户端。 |
buffer |
none 或者
|
当autoFlush为true时,制定缓存大小。例如:
|
isThreadSafe |
true , false |
是否线程安全。默认为false,如果为ture,则运行多个线程同时运行该jsp程序,否则只一个线程运行,其它线程等待。 |
isErrorPage |
true , false |
指定本jsp是否为错误处理页面。默认为false,如果为true,内置了一个Exception对象exception,可以直接使用 |
errorPage |
某个JSP页面的
|
指明一个错误显示页面。如果该jsp抛出了一个未被捕捉的异常,则转到指定的页面。指定的页面通常isErrorPage为true。 |
contentType |
有效地文档类型 |
客户端浏览器根据该属性判断文档类型。例如:
|
info |
任意字符串 |
指明jsp信息。该信息可以通过 Servlet.getServletInfo()方法得到。 |
trimDirective
|
true , false |
是否去掉指令前后的空白字符。默认为false。
|
include指令
包含页面。<%@ include file=”URL” %>
1 2 3 4 5 6 7 | <%-- url是相对路径 --%> <%@ include file= "head.jsp" %> <body> </body> <%@ include file= "foot.jsp" %> |
这里的include是静态引入,也就是说,tomcat会把引入的jsp编译为一个class,最后运行的事整合后的servlet。
被引入的文件必须遵循JSP语法。
被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。
JSP标签
JSP Actions,有人叫标签,有人叫动作,有人叫行为,都是一回事。JSP标签就是对常用的JSP功能的抽象的封装,优点就是代码少,方便维护,代码美观。JSP标签有内置的标准标签,也可以自定义标签。这里只说说默认的标签。
<jsp:include />标签
不同于<%@ include %>,<jsp:include />属于动态包含,也就是不编译为一个class,而是在运行时分别获取运行结果然后包含,等同于页面包含了html,这段html这样跳转过去 request.getRequestDispatcher(“URL”).forward(request,response) 。
1 2 3 4 | //flush指明,在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。 <jsp:include flush= "true" page= "/head.jsp" ></jsp:include> 这里是正文 <jsp:include flush= "true" page= "/foot.jsp" ></jsp:include> |
<jsp:forward />标签
<jsp:param />标签
页面跳转,等同于 request.getRequestDispatcher(“URL”).forward(request,response) 。<jsp:param />是转发时携带的地址栏参数。
注意的是,转发前不能向浏览器输出内容,否则抛出IllegalStateException
1 2 3 4 | <jsp:forward page= "/login.jsp" > <jsp:param name= "username" value= "name" /> <jsp:param name= "password" value= "passwd" /> </jsp:forward> |
<jsp:useBean />标签
<jsp:setProperty />标签
<jsp:getProperty />标签
顾名思义,使用javaBean。格式是这样的:
<jsp:useBean id=”beanId” class=”className” scope=”Value” />
id就是javaBean的变量名,class是完整类名,scope是作用域,有四个作用域:
page 该jsp内有效
request 当前request内有效
session 当前会话(用户)有效
application web应用内有效
setProperty就是设置属性
<jsp:setProperty name=”beanId” property=”p" value=”v” /> beanId就是以声明的bean的变量名,property为属性,value是值。
<jsp:setProperty name=”beanId” property=”*” /> 这里,是把request提交内容填充至bean,前提是这个bean必须有对应的属性。
getProperty是获取属性值
<jsp:getProperty name=”beanId” property=”p" value=”v” /> 这个就不解释了。
JSP九大隐藏对象
out --javax.servlet.jsp.JspWriter
request --javax.servlet.ServletRequest
response --javax.servlet.ServletResponse
config --javax.servlet.ServletConfig
session --javax.servlet.http.HttpSession
application --javax.servlet.ServletContext
page --javax.servlet.jsp.HttpJspPage 这个就等于 this
pageContext --javax.servlet.jsp.PageContext 这个很重要,它代表了jsp的运行环境,可以获得这上面所有对象
exception --java.lang.Exception
JSP配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | < servlet > <!-- 转换后的servlet的访问名称 --> < servlet-name >SimpleJspServlet</ servlet-name > <!-- jsp文件 --> < jsp-file >/jsp/simple.jsp</ jsp-file > </ servlet > <!-- jsp映射 --> < servlet-mapping > <!-- 需要映射的jsp servlet --> < servlet-name >SimpleJspServlet</ servlet-name > <!-- 映射地址 --> < url-pattern >/xxx/yyy.html</ url-pattern > </ servlet-mapping > |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述