更多java学习笔记
在学习jsp时,老师说jsp很强大,可以在前端写一些java的代码
<%java代码%> 内部的java代码翻译到service方法内部
<%=java变量或表达式%> 会被翻译到service方法内部out.print();
<%!java代码%> 会被翻译成servlet的成员的内容
一开始学习的时候没有追踪溯源,知识记住怎么去做,怎么去使用,随后的学习中对于原理还是不够理解,直到现在追溯原理发现源码才是真的艺术。
对于如何创建项目不做具体的描述。
eclipse中jsp的位置(eclipse目录)
Eclipse查看自己项目编译后的jsp文件转换成的java源码,其放置路径
\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\自己的项目名\org\apache\jsp
idea中的位置(系统位置)
C:\Users\Administrator.IntelliJIdea2018.2\system\tomcat\自己的项目名\work\Catalina\localhost_\org\apache\jsp
index.jsp程序
<%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8" %>
<html>
<body>
<h2>Hello xxx World!</h2>
<%
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
String name = "冯雁星";
int age = 25;
%>
name:<%=name%>
age:<%=age%>
</body>
</html>
经过翻译后得到index.jsp转换成了index.java
新的类继承HttpJspBase,其是HttpServlet的子类
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
//实现的方法
}
jsp翻译后所拥有的方法
//初始化
public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
}
//销毁方法
public void _jspDestroy() {
}
//Service方法
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
//逻辑代码
}
源码中看内置对象,在jsp中定义了内置对象
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对象
还有service传入的参数request对象个response对象
···
源码中页面输出的对象有:
```java
response.setContentType("text/html; UTF-8;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;
页面中嵌入的java代码被翻译后的样子:使用out对象向页面写回
out.write("<html>\n");
out.write("<body>\n");
out.write("<h2>Hello xxx World!</h2>\n");
out.write(" ");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
String name = "冯雁星";
int age = 25;
out.write("\n");
out.write(" name:");
out.print(name);
out.write("\n");
out.write(" age:");
out.print(age);
out.write("\n");
out.write("</body>\n");
out.write("</html>\n");
jsp指令(三大指令):
1)page指令(jsp上边显示的几行):
<%@page 属性名1=‘属性值1’ 属性名二=‘属性值2’ …%>
常用属性:语言language文本类型contentType;
2)include指令:<%@ include file=“另一个页面”%>
3)taglib指令:引入标签库,格式:<%@taglib uri=“标签库地址” prefix=“前缀”%>
jsp的九大内置对象
out:页面输出;
rquest:得到用户请求;
response:用于服务器响应
page:指当前页面转换后的Servlet类的实例;
pageContext:jsp页面容器
application:所有用户的共享信息;
session:用来保存用户的信息
config:服务器配置,可以取得初始化参数;
exception:表示jsp页面所发生异常;
注:out缓冲区默认为8kb;out缓冲区的数据会被放置在response缓冲区
jsp四大作用域:
application:整个web应用
request:一次ttp请求
session:一次会话
page:当前jsp页面范围
学无止境,学海无涯