首页 > 编程语言 >狂神说Java Web学习笔记_JSP

狂神说Java Web学习笔记_JSP

时间:2024-02-03 12:01:23浏览次数:32  
标签:Web Java write JSP jspx servlet javax out

什么是JSP

JSP(Java Server Pages):Java服务器端页面,和Servlet一样,用于动态web技术!

写JSP就像在写HTML。它们之间不同的是,JSP页面里可以嵌入Java代码,提供动态数据。

JSP原理

IDEA使用tomcat服务器,会在tomcat中产生一个work目录;

C:\Users\winner\AppData\Local\JetBrains\IntelliJIdea2022.1\tomcat\e93bc8ad-ed5a-4d64-86d6-0a6e3ce05bf1\work\Catalina\localhost\ROOT\org\apache\jsp

从这儿可以发现JSP文件被转换成为了Java程序。由此得知:浏览器向服务器发送请求,无论是访问什么资源,实际上都是在访问Servlet。JSP的本质上就是一个Servlet。

主要方法

public void _jspInit() {
}

public void _jspDestroy() {
}

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
    throws java.io.IOException, javax.servlet.ServletException {
}

_jspService方法细节捕捉

判断请求方式

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;
    }
}

内置对象

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;// 当前页面
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
HttpServletRequest request;// 请求
HttpServletResponse response;// 响应

JSP文件里面的HTML代码会被转换为out.write("\n")这种格式之后再输出

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
try {
    response.setContentType("text/html");
    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;

    out.write("<html>\n");
    out.write("<body>\n");
    out.write("<h2>Hello World!</h2>\n");
    out.write("</body>\n");
    out.write("</html>\n");
}

JSP文件里面的Java代码不会被转换,会直接输出

<html>
<body>
<h2>Hello World!</h2>

<%
    String feeling = "happy~";
%>

i am <%=feeling%>

</body>
</html>
out.write("<html>\n");
out.write("<body>\n");
out.write("<h2>Hello World!</h2>\n");
out.write("\n");

String feeling = "happy~";//原封不动输出

out.write("\n");
out.write("\n");
out.write("i am ");
out.print(feeling);//原封不动输出
out.write("\n");
out.write("\n");
out.write("</body>\n");
out.write("</html>\n");

标签:Web,Java,write,JSP,jspx,servlet,javax,out
From: https://www.cnblogs.com/growingbambi/p/18004506

相关文章

  • 狂神说Java Web学习笔记_Cookie&Session
    Cookie,Session保存会话的两种技术,Cookie(客户端技术),Session(服务端技术)Cookie服务器端设置token,从客户端获取tokenCookie[]cookies=req.getCookies();//从客户端获取cookiecookie.getName();//获取cookie名字cookie.getValue();//获取cookie值Cookiecookie=newCoo......
  • postman自动生成Cookie java代码怎么实现
    在Java中实现Postman自动生成Cookie的功能,通常涉及到模拟HTTP请求,处理服务器的响应,并提取Cookie信息。这个过程可以使用一些Java库,如ApacheHttpClient或者OkHttp。以下是使用ApacheHttpClient来实现这个功能的步骤:步骤1:添加依赖首先,您需要在项目的pom.xml文件中添加ApacheHttpC......
  • JAVA8 - 异步编程
    目录FutureFutureFuture接口在JAVA5中被引入,设计初衷式对将来某个时刻会发生的结果进行建模。它建模了一中异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。在Future中触发那些潜在耗时的操作把调用线程解放出来,让它能继续执行其他有价值的工作,不再......
  • Java 数据类型详解与类型转换技巧
    Java数据类型Java中的变量必须是指定的数据类型:intmyNum=5;//整数floatmyFloatNum=5.99f;//浮点数charmyLetter='D';//字符booleanmyBool=true;//布尔值StringmyText="Hello";//字符串数据类型分为两组:......
  • Java面向对象程序设计——设计日期类
    设计日期类【问题描述】借助Calendar类,设计一个日期类MyDate,能根据多种输入数据创建日期对象,可对日期进行计算,并以不同的模式输出日期。类图如下:【输入形式】1-8的整数【输出形式】输入1,则输出2010-10-10importjava.text.ParseException;importjava.text.SimpleDateFormat......
  • Java 8 Optional:优雅处理空指针异常的新型容器
    一、Optional概述1.1Optional定义Optional是Java8中引入的一个类,用于描述一个值不存在的情况。它可以存储任意类型的值,或者表示一个空值。使用Optional类可以避免null值的传递和检查,提高代码的健壮性和可读性。Optional类的定义如下:publicfinalclassOptional<T>{/......
  • 包机制和JavaDoc
    包机制为了更好地组织类,Java提供包机制,用于区别类名的命名空间。包语句的语法格式为:packagepkg1[.pkg2[.pkg3...]]一般利用公司域名倒置作为包名;//com.hongyi.xxx为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import”语句可完成此功能。impor......
  • JVM(Java虚拟机)整理(二)
    前言上一篇内容:JVM(Java虚拟机)整理(一)Java内存模型(JMM)Java内存模型引入声明:本节内容转载于@pdai:JVM基础-Java内存模型引入。很多人都无法区分Java内存模型和JVM内存结构,以及Java内存模型与物理内存之间的关系。本文从堆栈角度引入JMM,然后介绍JMM和物理内存之间的关系。@......
  • 延迟Promise/单项目多npm版本/webpack好处/webpack5构建速度
    《Promise.withResolvers延迟Promise》https://sorrycc.com/promise-with-resolvers/promise当被reject之后,再次resolve,都是会返回reject的消息一个npm包的多个版本webpack好处需要通过模块化的方式来开发使用一些高级的特性来加快我们的开发效率或者安全性,比如通过ES6......
  • JAVA8 - 函数式接口
    目录原始类型特化函数描述符原始类型特化JAVA8为Predicate、Consumer、Suppler等函数式接口带来了一个专门的版本,以便在输入和输出时都是基本类型时避免自动装箱的操作IntPredicateevenNumbers=(inti)->i%2==0;//无装箱Predicate<Integer>evenNumbers2=(Inte......