JSP简单总结

本文介绍了JSP的基本概念,包括隐含对象、表达式、注释、请求转发与重定向的区别,以及JSP指令如page、include和taglib的使用方法。

   看了几天,感觉东西好多,做个JSP简单总结。

JSP隐含对象:

      打开之前那篇博客写的hello_jsp.java文件后,你会在_jspService()方法的下面发现该方法有声明好几个对象,如下:

public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
其实这几个就是JSP的隐含对象,即我们在JSP页面中不用声明就可以直接使用。因为我们写的代码都会在该方法下面,所以可以直接使用。

request,response,pageContext,session,application,config,out,page 加一个exception就是我们说的JSP的9个隐含变量。

request:是HttpServletRequest的一个对象;

response:HttpServletResponse对象

pageContext: 页面的上下文, 是 PageContext 的一个对象. 可以从该对象中获取到其他 8 个隐含对象. 也可以从中获取到当前
页面的其他信息.

session: 代表浏览器和服务器的一次会话, 是 HttpSession 的一个对象。浏览器从第一次打开到关闭,这算一次会话

application: 代表当前 WEB 应用. 是 ServletContext 对象. *
  config: 当前 JSP 对应的 Servlet 的 ServletConfig 对象(几乎不使用). 若需要访问当前 JSP 配置的初始化参数, 
需要通过映射的地址才可以.

out: JspWriter 对象. 调用 out.println() 可以直接把字符串打印到浏览器上. 
page: 指向当前 JSP 对应的 Servlet 对象的引用, 但为 Object 类型, 只能调用 Object 类的方法(几乎不使用) 
exception: 在声明了 page 指令的 isErrorPage="true" 时, 才可以使用. 后面讲错误页面的时候用到;

对属性的作用域打大小:

pageContext(页面) < request(请求)<session(会话 )<application(当前WEB应用)

String name =request.getParameter("name");
	System.out.println(name);
	
	ServletRequest	 servletRequest=			pageContext.getRequest();
	
	System.out.println(servletRequest == request);
	
	System.out.println(session.getId());
	 
	
	System.out.println(application.getInitParameter("user"));
	System.out.println(config.getInitParameter("test"));
	out.println(session.getId());
	out.println("<br>");
	out.println("<br>");
	out.println(servletRequest);
	
	out.println(this);
	out.println("<br>");
	out.println("<br>");
	out.println(page);//this和page得到的结果一致

JSP表达式(expression)提供了将一个 java 变量或表达式的计算结果输出到客户端的简化方式,它将要输出的变量或表达式直接封装在<%= 和 %>之中

<% 
	Date date = new Date();
	out.print(date);
%>

<%= date %>

     上面2种方法得到的结果是一致的。

JSP注释的格式:<%-- JSP 注释 --%> <!-- HTML 注释 -->。JSP注释可以阻止Java代码的执行。但HTML注释不行。

请求的转发和重定向:

//请求的转发
		//1.调用HttpServletRequest 的getRequestDispatcher()
		//获取对象。调用getRequestDispatcher()方法时需要传入转发的地址
		String path ="testServlet";
		RequestDispatcher requestDispatcher =request.getRequestDispatcher("/"+path);
		
		
		//2.调用requestDispatcher的forward(request,response)进行请求的转发
		requestDispatcher.forward(request, response);

请求的重定向:
//	执行请求的重定向,直接调用response.sendRedirect()方法
			//path为要重定向的地址
			String location ="testServlet";	
			response.sendRedirect(location);

 本质区别: 请求的转发只发出了一次请求, 而重定向则发出了两次请求. 


具体:

①. 请求的转发: 地址栏是初次发出请求的地址.
       请求的重定向: 地址栏不再是初次发出的请求地址. 地址栏为最后响应的那个地址 
       
②. 请求转发: 在最终的 Servlet 中, request 对象和中转的那个 request 是同一个对象. 
       请求的重定向: 在最终的 Servlet 中, request 对象和中转的那个 request 不是同一个对象.       
   
③. 请求的转发: 只能转发给当前 WEB 应用的的资源
       请求的重定向: 可以重定向到任何资源. 
       
④. 请求的转发: / 代表的是当前 WEB 应用的根目录 http://localhost:8090/web/
       请求的重定向: / 代表的是当前 WEB 站点的根目录. http://localhost:8090/


JSP指令:page,include,taglib.

page指令

page指令用于定义JSP页面的各种属性, 无论page指令出现在JSP页面中的什么地方, 它作用的都是整个JSP页面, 为了保持程序的可读性和遵循良好的编程习惯, page指令最好是放在整个JSP页面的起始位置。 

 page 指令常用的属性: 
①. import 属性: 指定当前 JSP 页面对应的 Servlet 需要导入的类. 
<%@page import="java.text.DateFormat"%>

②. session 属性: 取值为 true 或 false, 指定当前页面的 session 隐藏变量是否可用, 也可以说访问当前页面时是否一定要生成 HttpSession
对象. 
<%@ page session="false" %> 


③. errorPage 和 isErrorPage: 
> errorPage 指定若当前页面出现错误的实际响应页面时什么. 其中 / 表示的是当前 WEB 应用的根目录. 

<span style="font-size:14px;"><%@ page errorPage="/error.jsp" %> </span>
> 在响应 error.jsp 时, JSP 引擎使用的请求转发的方式. 
> isErrorPage 指定当前页面是否为错误处理页面, 可以说明当前页面是否可以使用 exception 隐藏变量. 需要注意的是: 若指定 
isErrorPage="true", 并使用 exception 的方法了, 一般不建议能够直接访问该页面. 
> 如何使客户不能直接访问某一个页面呢 ? 对于 Tomcat 服务器而言, WEB-INF 下的文件是不能通过在浏览器中直接输入地址的方式
来访问的. 但通过请求的转发是可以的!
> 还可以在 web.xml 文件中配置错误页面: 
<error-page>
  <!-- 指定出错的代码: 404 没有指定的资源, 500 内部错误. -->
  <error-code>404</error-code>
  <!-- 指定响应页面的位置 -->
  <location>/WEB-INF/error.jsp</location>
</error-page>
 
<error-page>
  <!-- 指定异常的类型 -->
  <exception-type>java.lang.ArithmeticException</exception-type>
  <location>/WEB-INF/error.jsp</location>
</error-page>

④. contentType: 指定当前 JSP 页面的响应类型. 实际调用的是 response.setContentType("text/html; charset=UTF-8");
通常情况下, 对于 JSP 页面而言其取值均为 text/html; charset=UTF-8. charset 指定返回的页面的字符编码是什么. 通常取值为 UTF-8

⑤. pageEncoding: 指定当前 JSP 页面的字符编码. 通常情况下该值和 contentType 中的 charset 一致. 

⑥. isELIgnored: 指定当前 JSP 页面是否可以使用 EL 表达式. 通常取值为 false. 


 include 指令:

 <%@ include file="b.jsp" %>

      1). include 指令用于通知 JSP 引擎在翻译当前 JSP 页面时将其他文件中的内容合并进当前 JSP 页面转换成的 Servlet 源文件中,
这种在源文件级别进行引入的方式称之为静态引入, 当前JSP页面与静态引入的页面紧密结合为一个Servlet。
      2). file属性的设置值必须使用相对路径
      3). 如果以 / 开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

 jsp:incluce 标签:
    1). <jsp:include page="b.jsp"></jsp:include>
    2). 动态引入: 并不是像 include 指令生成一个 Servlet 源文件, 而是生成两个 Servlet 源文件, 然后通过一个方法的方式把目标页面包含进来:org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "b.jsp", out, false);

 jsp:forward:

<jsp:forward page="/include/b.jsp"></jsp:forward><pre name="code" class="java"><% 
	request.getRequestDispatcher("/include/b.jsp").forward(request, response);
%>


以上2中效果是一样的。但使用forward标签,可以通过jsp:param子标签传入参数(include标签也可以使用该子标签)
<jsp:forward page="/include/b.jsp">
	<jsp:param value="abcd" name="username"/>
</jsp:forward>	
然后在b.jsp通过调用request.getParameter("username")可获得value=abcd.



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值