JSP

本文详细介绍了使用JSP创建Web页面的过程,包括JSP的工作原理、语法、指令标签、操作动作及内置对象等内容。读者可以了解到JSP如何通过转换成Servlet来实现动态页面的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web 服务器如何使用 JSP 创建 web 页面

  • 作为正常的页面,你的浏览器发送一个 HTTP 请求到 web 服务器。
  • web 服务器承认一个 JSP 页面的 HTTP 请求,并将其转发给一个 JSP 引擎。这是通过使用 URL 或 JSP 页面实现的,该 JSP 页面是以.jsp结尾而不是以 .Html 结尾的。
  • JSP 引擎从磁盘加载 JSP 页面并将其转换为一个 servlet 的内容。这种转换是非常简单的,所有模板文本转换为 println()语句,所有 JSP 元素转换为 Java 代码实现页面的相应的动态行为。
  • JSP 引擎编译 servlet 到一个可执行的类中,并将原始请求转发给一个 servlet 引擎
  • 调用 servlet 引擎的 web 服务器的一部分加载 Servlet 类并执行它。执行期间,Servlet 产生一个 HTML 格式的输出,servlet 引擎将该输出传递到 HTTP 响应内的 web 服务器中。
  • web 服务器将 HTTP 响应以静态 HTML 内容的形式转发到你的浏览器中。
  • 最后 web 浏览器处理 HTTP 响应中的动态生成的 HTML 页面,就好像它是一个静态页面

总结: jsp代码会被转换会一个servlet


JSP语法

<%! 声明变量或者定义方法%>
//也可使用XML代替
<jsp:declaration>
   code fragment
</jsp:declaration>

<%  逻辑代码%>
//也可使用XML代替
<jsp:scriptlet>
   code fragment
</jsp:scriptlet>

<%= 表达式%>
//也可使用XML代替
<jsp:expression>
   expression
</jsp:expression>

JSP指令标签Directives

<%@page...%>//定义 page-dependent 属性,比如脚本语言,错误页面和缓冲要求

<%@include...%>//包括转换阶段的一个文件
<%@ include file="relative url" >//你可以在你的 JSP 页面中的任何位置编写 include 指令。包含指令中的文件名实际上是一个相对 URL。如果你只指定一个文件名而没有相关路径,JSP 编译器就会假定文件与你的 JSP 在同一个目录下。

<%@taglib...%>//声明一个在页面中使用的标签库,包含自定义操作。
<%@ taglib uri="uri" prefix="prefixOfTag" >//uri 属性值解析为容器理解的一个位置,prefix 属性通知容器什么标记是自定义操作。

###Page指令的相关属性

buffer  //指定一个输出流的缓冲模型。
autoFlush   //控制 servlet 输出缓冲区的行为。
contentType //定义了字符编码方案。
errorPage   //定义了 Java 未检查运行时异常报告的另一个 JSP 的 URL。
isErrorPage //表明这个 JSP 页面是否是由另一个 JSP 页面的 errorPage 属性指定的 URL
extends //指定一个超类,生成的 servlet 必须扩展
import  //指定在 JSP 中使用的包或类的列表,正如 Java 导入声明为 Java 类所做的相同。
info    //定义一个字符串,可以访问 servlet 的 getServletInfo()方法。
isThreadSafe    //为生成的 servlet 定义线程模型。
language    //定义了在 JSP 页面中使用的编程语言。
session //指定 JSP 页面是否参与 HTTP 会话
isELIgnored //指定 JSP 页面中的 EL 表达式中是否将被忽略
isScriptingEnable   //  决定是否允许使用脚本元素。

JSP操作Actions

< jsp:action_name attribute=”value”>

jsp:include//当请求页面时,包含一个文件
<jsp:include page="relative URL" flush="true" />//布尔属性决定了包含的资源在被包含之前其缓冲区是否刷新

jsp:useBean//发现或实例化一个 JavaBean
<jsp:useBean id="name" class="package.class" />//class指定 bean 的全部包名。

jsp:setProperty//JavaBean 的属性集
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>
<jsp:useBean id="myName" ... >
...
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

jsp:getProperty//将 JavaBean 的属性嵌入到输出中
<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

jsp:forward//将请求转发给一个新页面
<jsp:forward page="Relative URL" />

jsp:plugin//生成浏览器-特定代码,为 Java 插件创建 OBJECT 或 EMBED 标签
//Java 组件可以是一个 Applet 或一个 JavaBean。

jsp:element//动态的定义 XML 元素

jsp:attribute//定义了动态定义的 XML 元素的属性

jsp:body//定义了动态定义 XML元素的 body

jsp:text//用于在 JSP 页面和文档中编写模板

JSP九大对象

request//这是与请求关联的HttpServletRequest对象
//每次客户端请求一个页面时,JSP 引擎都会创建一个新的对象来表示那个请求。
//Request 对象提供方法来获取 HTTP 头信息,包括表单数据,cookies,HTTP 方法等

reponse//这是与客户端响应关联的HttpServletReponse对象
//当服务器创建 request 对象时,它也创建了代表客户端响应的对象。
//Response 对象还定义了接口,可以处理创建的新的 HTTP 头。通过这个对象 JSP 程序员可以添加新的 cookies 或日期 stamps,HTTP 状态码等

out//这是用于向客户端发送输出的PrintWriter对象

session//这是与请求关联的HttpSession对象

application//这是与应用程序剩下文关联的ServletContext对象
//这个对象是 JSP 页面整个生命周期的一个代表。当初始化 JSP 页面时,这个对象被创建,当 JSP 页面由 jspDestroy()方法删除时,该对象也会被删除。
//通过为 application 添加属性,你可以确保生成 web 应用程序的所有 JSP 文件可以访问它

config//这是与页面关联的ServletConfig对象
//config.getServletName();这返回 servlet 的名称,该名称是包含在定义在 web - inf \ web.xml 文件中< servlet-name >元素中的字符串。

pageContext//这个封装特使用特定服务器的特性。如更高的性能jspwriter

page//这是this的一个简单同义词。是用来调用由转换的servlet类定义的方法

Exception//Exception对象允许指定的JSP访问异常数据

控制语句的例子

//if语句
<%if(day == 1 | day == 7 ){%>
    <p>Today is Weekend</p>
<%} else{%>
    <p>Today is not weekend</p>
<%}%>

//for循环语句
<%for(fontSize=1;fontSize<=3;fontSize++){%>
    <font color="green" size="<%=fontSize%>">
    JSP Tutorial
    </font><br />
<%}%>

JSP过滤器

Servlet 和 JSP 过滤器都是 Java 类,可以在 Servlet 和 JSP 编程中用于以下目的:

  • 在请求访问后端资源之前从客户端拦截请求。
  • 在响应发送回客户端之前从服务器操作响应。
<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
      <param-name>test-param</param-name>
      <param-value>Initialization Paramter</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

-----------------------------------------------------------
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Implements Filter class
public class LogFilter implements Filter  {
   public void  init(FilterConfig config) 
                         throws ServletException{
      // Get init parameter 
      String testParam = config.getInitParameter("test-param"); 

      //Print the init parameter 
      System.out.println("Test Param: " + testParam); 
   }
   public void  doFilter(ServletRequest request, 
                 ServletResponse response,
                 FilterChain chain) 
                 throws java.io.IOException, ServletException {

      // Get the IP address of client machine.   
      String ipAddress = request.getRemoteAddr();

      // Log the IP address and current timestamp.
      System.out.println("IP "+ ipAddress + ", Time "
                                       + new Date().toString());

      // Pass request back down the filter chain
      chain.doFilter(request,response);
   }
   public void destroy( ){
      /* Called before the Filter instance is removed 
      from service by the web container*/
   }
}

JSP-Cookies

  • 服务器脚本向浏览器发送的一系列cookies。例如姓名、年龄、身份证号码等。
  • 浏览器将这个信息存储在本地机器上,以供将来使用。
  • 下次当浏览器向web服务器发送任何请求时,将这些 cookies 信息发送给服务器,服务器使用这些信息来识别用户或可能用于其他目的。
直接用法:添加和获取Cookies对象
cookies = request.getCookies();//返回的是Cookie数组
response.addCookie( cookie );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值