1 为什么学习JSP
问题:在学习了 Servlet 之后,使用 Servlet 进行页面的展现,代码书写过于麻烦。极大的影响了开发的效率,那么有没有一种方式可以让我们像以前写网页一样来进行网页的编程工作呢?
解决:使用 JSP 技术
概念:JSP 全名为 Java Server Pages,中文名叫 java 服务器页面,其根本是一个简化的 Servlet 设计,它 [1] 是由 Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。
特点:本质上还是 Servlet跨平台,一次编写处处运行组件跨平台健壮性和安全性
2 什么是Java Server Pages?
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
3 为什么使用JSP?
JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势:
1.性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。
2.服务器调用的是已经编译好的JSP文件,而不像CGI/Perl那样必须先载入解释器和目标脚本。
3.JSP 基于Java Servlet API,因此,JSP拥有各种强大的企业级Java API,包括JDBC,JNDI,EJB,JAXP等等。
4.JSP页面可以与处理业务逻辑的 Servlet 一起使用,这种模式被Java servlet 模板引擎所支持。
最后,JSP是Java EE不可或缺的一部分,是一个完整的企业级应用平台。这意味着JSP可以用最简单的方式来实现最复杂的应用。
默认代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is my JSP page. <br> </body> </html>
4 Jsp之间的资源转发:
jsp之间的资源转发:
问题:不同的jsp在处理请求时,有可能会将当前的请求转发给另外的jsp进行处理。
解决:使用forward动作指令
使用:<jsp:forward page="要转发的jsp的相对路径"></jsp:forward>
特点:从当前jsp跳转另外一个jsp页面。
注意:forward标签中除了<jsp:param value="" name=""/>子标签以外不能出现其他内容,否则会报错。
5 Jsp如何防止和其他页面相同代码冗余度过高:
问题:发现,不同的jsp页面会使用相同的资源。如果将资源在每个jsp页面都单独声明则会造成代码的冗余量过高,不易于代码的维护和升级。
解决:使用静态引入和动态引入的方式
使用:静态引入:<%@include file="要引入的资源的相对路径"%>
特点:被引入的jsp文件和原有jsp文件被转译成一个java文件使用。
注意:静态引入的相关jsp文件中不能声明同名变量。
动态引入:<jsp:include page="static.jsp"></jsp:include>
特点:被引入的文件会被单独转译,原有jsp文件会调用被引入的jsp文件。
注意:动态引入的相关jsp文件中可以声明同名变量。
作用:实现了不同jsp之间的资源共享。
6 Jsp在做业务逻辑实现的弊端:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'data.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h3>jsp的页面</h3> <hr/> <% //设置请求编码格式 //获取请求信息 //处理请求信息 int a=1; if(a>2){ %> <b>使用jsp页面的展现非常舒服</b> <% }else{ %> <b>但是在jsp中进行业务逻辑处理很不方便</b> <%} %> </body> </html>
7 jsp代码块学习:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%-- 局部代码块 声明方式:<% java代码 %> 特点: 使用局部代码块声明的java代码会被原样转译到_jspService方法中。也就是局部代码。 --%> <% int a=123; System.out.println(a); test(); %> <%-- 全局代码块 声明方式:<%! 声明全局java代码%> 特点: 全局代码块中声明的java代码,在被转译时,会转译成jsp对应的java文件的全局的代码。 作用: 声明方法和全局量等 注意: 使用全局代码块声明方法,使用局部代码块调用方法。 --%> <%! int b=456; public void test(){ System.out.print("全局代码块声明"); } %> <%-- java脚本段、表达式 声明方式:<%=变量名或者方法名()%> 作用:将java代码的运算结果数据或者其他数据响应给浏览器 注意: 在该表达式中不能使用分号结尾 --%> <i><%=a%></i> <b>jsp代码块学习</b> 今天天气真好,适合学习
虽然不常用但是要知道,可以看出很多的<% %>来转义serverlet,看起来不美观而且需要反复转义很麻烦,所以使用JSP 负责页面展现,Servlet 负责业务逻辑处理。
8 需要使用的注释:
<%@ 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>hhh</i> --> <b>HTML注释</b> </body> </html>