什么是JSP?
Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态Web技术!
最大的特点:
- 写JSP就像写HTML
- 区别:
- HTML只给用户提供静态的数据
- JSP页面中可以嵌入Java代码,为用户提供动态数据
JSP原理
思路:JSP到底怎么执行的!
- 代码层面没有任何问题
- 服务器内部工作
- tomcat中有一个work目录
work是tomcat服务器工作的目录


- IDEA中使用Tomcat会在IDEA的tomcat中生成一个work目录
在运行Tomcat项目的时候,会显示work目录在C盘中


实践步入类
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet!
JSP也会转换成java类

我们可以发现JSP的本质是HttpServlet

可以发现打开的index_jsp.java 其实是index.jsp 编写的内容,实际上都是由java类实现的,我们只需要编写简单的代码即可

java
// 初始化
public void jspInit() {
}
// 销毁
public void jspDestroy() {
}
JspService
public abstract void _jspService(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException;
- 判断请求方法
java
if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
return;
}
}
- 内置一些对象
java
final javax.servlet.jsp.PageContext pageContext; // 页面上下文
javax.servlet.http.HttpSession session = null; // session
final javax.servlet.ServletContext application; // applicationContext
final javax.servlet.ServletConfig config; // config
javax.servlet.jsp.JspWriter out = null; // out
final java.lang.Object page = this; //page:当前
javax.servlet.jsp.JspWriter _jspx_out = null; //请求
javax.servlet.jsp.PageContext _jspx_page_context = null; //响应
- 输出页面前增加的代码
java
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
- 以上的这些个对象我们可以在JSP页面中直接使用!

<%--通过尖括号百分号引起的代码就能写java代码--%>
plain
<% %>

访问hello.jsp的时候,work目录下才会生成对应的hello.java

可以发现除了这里不一样,其他都是一样的

在JSP页面中;
只要是JAVA代码就会原封不动的输出;
如果是HTML代码,就会被转换为
java
out.wreite("<html>\r\n")
这样的格式,输出到前端!