首页 > 其他分享 >【JSP 随笔之一】JSP常用语法和使用总括&&JSP服务器端和客户端代码互相调用

【JSP 随笔之一】JSP常用语法和使用总括&&JSP服务器端和客户端代码互相调用

时间:2022-11-24 14:33:21浏览次数:76  
标签:服务器端 jsp && jspx JSP servlet javax out




本站文章均为​ 李华明Himi ​​原创,转载务必在明显处注明:​​​​


对于Servlet 学习过后,那么接触到JSP,那么可以发现JSP编程则会突然喜爱上,因为JSP不仅仅也是一个servlet,还能帮我们直接从servlet的容器(Tomcat)为我们直接生成对应的servlet代码。至于更加详细的介绍大家可以自行baidu~goole

下面让我们首先写一个JSP,然后大家就明白了其用途:

1. 首先我们编写如下一个jsp文件,这里起名 himi.jsp,其内容如下:


​<​​ ​​html​​ ​​>​


​<​​ ​​head​​ ​​>​


​</​​ ​​head​​ ​​>​


 


​<​​ ​​body​​ ​​>​


​<%​


​out.println("HelloWorld!");​


​%>​


​</​​ ​​body​​ ​​>​


​</​​ ​​html​​ ​​>​


OK,将其之间放置我们上一篇创建的webapp根目录即可;

然后尝试访问一下这个himi.jsp 观察如下:(这里Himi在tomcat目录下创建的webapp叫“MyWebApp”)

​​

 

OK,发现Servlet 返回给Client端一个“ Hello World! ”字符串

大家先到tomcat目录下的/work/Catalina/localhost/MyWebApp/org/apache/jsp文件夹下我们可以看到如下两个文件:

a)himi_jsp.class          b)himi_jsp.java

不二话打开 himi_jsp.java 如下:


​/*​


​* Generated by the Jasper component of Apache Tomcat​


​* Version: Apache Tomcat/7.0.27​


​* Generated at: 2012-05-24 16:07:57 UTC​


​* Note: The last modified time of this file was set to​


​*       the last modified time of the source file after​


​*       generation to assist with modification tracking.​


​*/​


​package​​ ​​org.apache.jsp;​


 


​import​​ ​​javax.servlet.*;​


​import​​ ​​javax.servlet.http.*;​


​import​​ ​​javax.servlet.jsp.*;​


 


​public​​ ​​final​​ ​​class​​ ​​himi_jsp ​​ ​​extends​​ ​​org.apache.jasper.runtime.HttpJspBase​


​implements​​ ​​org.apache.jasper.runtime.JspSourceDependent {​


 


​private​​ ​​static​​ ​​final​​ ​​javax.servlet.jsp.JspFactory _jspxFactory =​


​javax.servlet.jsp.JspFactory.getDefaultFactory();​


 


​private​​ ​​static​​ ​​java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;​


 


​private​​ ​​javax.el.ExpressionFactory _el_expressionfactory;​


​private​​ ​​org.apache.tomcat.InstanceManager _jsp_instancemanager;​


 


​public​​ ​​java.util.Map<java.lang.String,java.lang.Long> getDependants() {​


​return​​ ​​_jspx_dependants;​


​}​


 


​public​​ ​​void​​ ​​_jspInit() {​


​_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();​


​_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());​


​}​


 


​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 {​


 


​final​​ ​​javax.servlet.jsp.PageContext pageContext;​


​javax.servlet.http.HttpSession session = ​​ ​​null​​ ​​;​


​final​​ ​​javax.servlet.ServletContext application;​


​final​​ ​​javax.servlet.ServletConfig config;​


​javax.servlet.jsp.JspWriter out = ​​ ​​null​​ ​​;​


​final​​ ​​java.lang.Object page = ​​ ​​this​​ ​​;​


​javax.servlet.jsp.JspWriter _jspx_out = ​​ ​​null​​ ​​;​


​javax.servlet.jsp.PageContext _jspx_page_context = ​​ ​​null​​ ​​;​


 


​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(​​ ​​"\t<head>\n"​​ ​​);​


​out.write(​​ ​​"\t</head>\n"​​ ​​);​


​out.write(​​ ​​"\n"​​ ​​);​


​out.write(​​ ​​"\t<body>\n"​​ ​​);​


​out.write(​​ ​​"\t\t"​​ ​​);​


 


​out.println(​​ ​​"HelloWorld!"​​ ​​);​


 


​out.write(​​ ​​"\n"​​ ​​);​


​out.write(​​ ​​"\t</body>\n"​​ ​​);​


​out.write(​​ ​​"</html>"​​ ​​);​


​} ​​ ​​catch​​ ​​(java.lang.Throwable t) {​


​if​​ ​​(!(t ​​ ​​instanceof​​ ​​javax.servlet.jsp.SkipPageException)){​


​out = _jspx_out;​


​if​​ ​​(out != ​​ ​​null​​ ​​&& out.getBufferSize() != ​​ ​​0​​ ​​)​


​try​​ ​​{ out.clearBuffer(); } ​​ ​​catch​​ ​​(java.io.IOException e) {}​


​if​​ ​​(_jspx_page_context != ​​ ​​null​​ ​​) _jspx_page_context.handlePageException(t);​


​}​


​} ​​ ​​finally​​ ​​{​


​_jspxFactory.releasePageContext(_jspx_page_context);​


​}​


​}​


​}​


看到这里大家应该明白了,当客户端访问jsp后,jsp默认生成一个 servlet 并且编译字节码,(当然是第一次访问生成并编译,后续访问就不会再次编译了);

 

 JSP 语法:

拐回头来看 himi.jsp 代码:


​<​​ ​​html​​ ​​>​


​<​​ ​​head​​ ​​>​


​</​​ ​​head​​ ​​>​


 


​<​​ ​​body​​ ​​>​


​<%​


​out.println("HelloWorld!");​


​%>​


​</​​ ​​body​​ ​​>​


​</​​ ​​html​​ ​​>​


 

【JSP 自动生成的servlet代码,其实内置了一些对象,如下:】

out    就是PrintWriter;

req     就是HttpServletRequest,

resp   就是HttpServletResponse

1.  <% …  %>

也就是说客户端访问jsp后默认将我们himi.jsp中的内容转换成servlet;

   

    2. 其中注视的方式:

1) <%–… …–%>                    2) <%//… …%>                      3)  <%/*… …*/%>

要注意:以上注视都是服务器端的注视方式,如果你在jsp使用客户端注视方式:

 <!–  …  –>  那要格外注意!如果你在客户端注视方式加入<%…%>如下:

                   <!– <%   %>  –>中是无法阻止服务器端的代码!只能保证<%..%>不保证在客户端显示出来罢了;

 

表示将其中的代码成为自动生成servlet类的成员变量或者成员函数; 

 

    4. <%= …  %>

 

   5. request.getParameter(“xxx”);

例如传入一个 xxx.jsp?xxx=yyy

 

    6. <%@Directive 属性=”属性值”%>     编译期间的命令;

Directive 常用: a)  page         b) include       c) taglib

 

JSP服务器端和客户端代码互相调用方法:

示例代码段1:


​xx.jsp​


 


​<​​ ​​script​​ ​​>​


​<%out.println("var a =10");%>​


​</​​ ​​script​​ ​​>​


示例代码段2:


​xx.jsp​


 


​<​​ ​​script​​ ​​>​


​var a ='  <% out.print(23); %> ';​


​</​​ ​​script​​ ​​>​



       注意 :

          1)JSP服务器端代码<%…%>总执行在Client端代码之前

           2)代码段2 要注意   “  print(23) ”而不是“println(23)” 因为println是会换行造成客户端语法错误!;

 


标签:服务器端,jsp,&&,jspx,JSP,servlet,javax,out
From: https://blog.51cto.com/xiaominghimi/5883910

相关文章

  • springboot整合jsp打包
    本文主要分享了对整合jsp的springboot项目打jar包,如何正确的配置maven pom。二、打包配置1.pom.xml添加spring-boot-maven-plugin配置<build><plugins>......
  • springboot整合jsp传参
    ViewController:packagecom.keafmd.controller;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframewo......
  • 补档--【THM】SSRF(服务器端请求伪造漏洞)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/ssrfqi通过学习相关知识点:了解如何利用服务器端请求伪造(SSRF:Server-SideRequestForgery)漏洞,从而允许......
  • java web开发(servlet传递数据给jsp)
        实际开发中,servlet多用于controller,jsp多用于view。之前,我们谈过了怎么把数据从jsp传递给servlet,即采用form+action的方法来完成这一目标。今天可以继续讨论下,s......
  • java web开发(jsp传递数据给servlet)
        有了servlet,有了jsp,其实就已经可以做很多的事情了。比如说表单的制作等等。在实际项目中,表单、表格都是很常见的输入选项。一个常见的场景,就是客户在输入数据之......
  • java web开发(第一个jsp工程)
        前面两期,我们谈到了怎么进行servlet的编写。一种方法是将传统的java工程改造成servlet工程;另外一种方法就是直接利用maven创建一个webapp工程。事实上呢,如果大......
  • 踩坑JSTL标签库:/WEB-INF/jsp/fore/home.jsp (行.: [3], 列: [0]) 无法在web.xml或使用
    Tomcat9及之前使用到的JSTL库最近心血来潮想复习一下JavaWEB,调试JSTL标签的时候出现了一些错误,如标题所示。先说下场景,我已经在:WEB-INF/lib下添加了Tomcat9使用JSTl需要用......
  • JSP利用AJAX实现页面即时校验验证码
    在JSP页面实现验证码校验文章中当时是使用的Servlet类来进行的验证码校验,但是这种方式并不能即时校验,在正常情况下都是直接在用户输入之后就进行校验,这样对用户来说很方便......
  • php开发中实现客户端扫描文档并保存到服务器端
    项目中需要控制扫描仪器扫描文稿并作为OA系统的附件保存到服务器端,在网页中控制扫描仪使用的是ScanOnWeb控件,实现了客户端通过javascript控制扫描仪扫描文稿,多页文稿全部扫......
  • JSP以及MVC模式和三层架构
    jsp:javaserverpages,java服务端页面。它是一种,动态网页技术,其中可以定义html等静态内容,也可以定义java代码等动态内容,可以避免在servlet中用write()直接输出html,但是本质......