JSP学习集锦(一)

一、JSP开口汤

1.1、为什么学习JSP

暂且总结如下3点原因:

  1. 公司里可能有陈年的老项目,其中不乏使用JSP开发的,如果公司安排让你维护,敢不干否?
  2. JSP与Servlet是雌雄同体,一体两面,而不少的Web框架又是构建在Servlet和JSP之上的,要想了解各中原理,敢不学否?
  3. 初学阶段大多是单体应用,此时没有前后端分离,自己又当前端又当后端,写写Demo玩玩,敢不玩否?

1.2、为什么使用JSP?(WHY)

让我们先看看不用JSP,直接使用Servlet来获取一个HTML页面是多么的酸爽

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>Hello JSP!</h1>

</body>
</html>

如果是通过请求Servlet的方式来获得以上HTML页面

​ 如下:

package cn.report.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloJSPServlet
 */
@WebServlet("/HelloJSPServlet")
public class HelloJSPServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter writer = response.getWriter();
		
		writer.write("<!DOCTYPE html>\r\n");
		writer.write("<html>\r\n");
		writer.write("<head>\r\n");
		writer.write("<meta charset=\"UTF-8\">\r\n");
		writer.write("<title>Insert title here</title>\r\n");
		writer.write("</head>\r\n");
		writer.write("<body>\r\n");
		writer.write("<h1>Hello JSP!</h1>\r\n");
		writer.write("</body>\r\n");
		writer.write("</html>\r\n");
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

怎么样,酸爽吧,仅仅是这么一丢丢代码,就需要如此繁复的编码才能实现,委实不值当呐。所以要不看下JSP是怎么搔首弄姿的?

​ 如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>Hello JSP!</h1>

</body>
</html>

看看,高下立判!!!

1.3、如何使用JSP

eclipse中步骤如下:

  1. 创建动态的web工程。

  2. 在WebContent目录下创建一个index.jsp页面。

    注意:不要错误地创建在WEB-INF目录下,该目录下的资源对客户端是不可见的

  3. 通过http://localhost:8080/project01/index.jsp即可访问创建的JSP页面

二、JSP细节

2.1、JSP概述

JSP本质上是一个Servlet。JSP页面在JSP容器中运行,一个Servlet容器通常也是一个JSP容器。例如,Tomcat就是一个Servlet/JSP容器。

2.1、JSP自带的API包含4个包:

  • javax.servlet.jsp。包含用于Servlet/JSP容器将JSP页面翻译为Servlet的核心类和接口,其中的两个重要成员是JspPage和HttpJspPage接口。所有的JSP页面实现类必须实现JspPage或HttpJspPage接口。在Http环境下,实现HttpJspPage接口是显而易见的选择。
  • javax.servlet.jsp.tagext。包括用于开发自定义标签的类型。
  • javax.el。提供了统一表达式的API。
  • javax.servlet.jsp.el。提供了一组必须由Servlet/Jsp容器支持,以便在JSP页面中使用表达式语言的类

2.3、当一个JSP页面被请求时,Servlet/JSP容器做了啥?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwQFuWl2-1608118404977)(C:\Users\Hello World\AppData\Roaming\Typora\typora-user-images\image-20201216192324099.png)]

  • JSP页面—>转换为JSP页面实现类。

  • JSP页面实现类是javax.servlet.jsp.JspPage或其子接口javax.servlet.jsp.HttpJspPage的实现类。

  • 而javax.servlet.jsp.JspPage是javax.servlet.Servlet的子接口。

  • 所以JSP页面最终会被转化为一个Servlet。

    注意

    ① 以上都是由Servlet/JSP容器来完成的,并且转化成功之后,Servlet/JSP容器随后会编译该类,并装载和实例化该类,像其他的正常的Servlet一样,执行生命周期操作。

    ②对于同一个JSP页面的后续请求,Servlet/JSP容器会先检查JSP页面是否被修改过。如果是,则该JSP页面会被重新翻译、编译并执行。如果不是,则执行已经在内存中的JSP Servlet,这样一来,一个JSP页面的第一次调用的实际花费总比后来的花费多,因为它涉及翻译和编译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值