精华内容
下载资源
问答
  • 在a.jsp里面使用include调用B.JSP,就可以直接调用b.jsp里面的js方法了??? 用的是 ``` <jsp:include page="b.jsp"/> ...是因为js是前端的,和Java代码不一样? 想知道具体原因,和原理.....
  •  尤其是对于偏后端的程序员来说,感觉上其实jsp实现视图的功能,而且写jsp其实还更简单(不包括JSTL),直接使用Java的语法就可以了,感觉跟后端程序一样一样的。 其实问题就出在这里——无法实现前后端的有效...

      本篇属个人随笔,随意编写,很不严谨,欢迎拍砖。

      在软件工程一般实践中,为什么普遍使用模板引擎而不是首选jsp?

      尤其是对于偏后端的程序员来说,感觉上其实jsp也能实现视图的功能,而且写jsp其实还更简单(不包括JSTL),直接使用Java的语法就可以了,感觉跟后端程序一样一样的。

      其实问题就出在这里——无法实现前后端的有效解耦。

      不知道大家是否见过下面这种暗黑代码,反正我在十多年前是见过的,它在服务端(通常是Linux服务器)通过C语言,硬编码输出HTML代码。几乎一切可变内容都通过万能的sprintf函数来实现。这叫做CGI规范编程。


      其实jsp也是跟上面的c语言代码是一路的。jsp文件会编译成一个java class文件,你要打开文件看一眼,就还是一样的配方、还是熟悉的味道。jsp文件糅合了三种元素:Java代码、动态的数据、HTML代码结构。从抽象层次来看,Java代码部分不仅用来组织数据,还被用来控制HTML页面结构。这样在层次划分上属于比较含糊不清的。

      还有另外一个原因。写jsp给了程序员随意书写Java代码的自由,自然也就给了很多犯错的机会。尤其偏向前端的程序员,可能Java功底不是太好。这时与其给他完整的Java世界,不如给他一个限定的子集,更为妥当。

      最后,最不决定本质的一个因素是,一些模板引擎具有部分较优的功能,如更好的代码段带参重用、支持多种生成文件格式等等。

      所以,这么看的话:

    jsp:java代码+数据+html = html

    模板引擎:数据+模板 = html

      基于模板引擎构建的前端视图,在服务器上才有所谓的“渲染”过程。jsp在服务器端只有字符串输出而已,与古老的CGI程序通本同源。
    展开全文
  • 章二 JSP脚本和指令的使用 问1:Jsp页面包含几种元素? ... JSP指令: 表达式: Scriptlet:脚本 嵌入的java代码 声明:!%>定义Jsp页面中的变量和方法。...开头的是HTML注释,...问2:为什么第一次访问Jsp页面会比较慢?

    章二 JSP脚本和指令的使用
    问1:Jsp页面包含几种元素?

    1. 静态内容 :HTML相关的内容。
    2. JSP指令:<%@ %>
    3. 表达式:<%= %>
    4. Scriptlet:<% %>脚本 嵌入的java代码
    5. 声明:<%!%>定义Jsp页面中的变量和方法。
    6. 注释:以!开头的是HTML注释,客户端能看到。以%开头的是JSP注释,客户端无法看到。

    问2:为什么第一次访问Jsp页面会比较慢?
    JSP执行过程:请求——JSP页面转译成Servlet的源代码——编译成字节码——支撑字节码文件——返回请求内容
    其中最主要的是(转译、编译、执行)。但是第二次请求页面时,直接执行编译后的字节吗文件,所以会相对快很多。
    问3:列举一些page指令和include指令常用的属性。

    1. <%@ page import=”java.io.* pageEncoding=”UTF-8”“%>
    2. <%@ include file=”/jsp/top.jsp”%>

    import 属性:导入相关的java包文件。
    pageEncoding 属性:设置字符集。
    file 属性:将指向的文件嵌入当前jsp中,

    展开全文
  • 用J2EE Web开发已经好几年了,从JSP、... 再深入挖掘一下,你会发现,其实一个MVC框架无论服务器端设计有多么差,其实也差不到哪去,有面向对象经验的开发人员都可以写出比较维护的代码,即便像Struts这种比较古老的

        用J2EE Web开发已经好几年了,从JSP、Struts、WebWork到现在的Struts 2、Wicket,没有一个用起来简单顺手的。无论哪个框架吹嘘自己有多么简单和高效的生产力,甚至让一个从未接触过Web开发的人5分钟能上手,绝对是骗人的。照着教程做一个Hello World还可以,一旦网站规模一大,根本无法维护。

        再深入挖掘一下,你会发现,其实一个MVC框架无论服务器端设计有多么差,其实也差不到哪去,有面向对象经验的开发人员都可以写出比较能维护的代码,即便像Struts这种比较古老的框架,服务器端开发也不难,和WebWork2比仅仅是不方便而已。

    但是到了View这一层就五花八门了,总体来说,有以下几路主流门派:

    1. 以Struts为代表的JSP Tag派,真叫一个难用,尤其是Tag,不但要查手册,你还必须写出if equals ... else的逻辑来。

    2. 以JSF为代表的全Tag派,基本上写一个JSP和一个XML没啥区别,都是Tag堆出来的,甚至变态到HTML元素都给Tag了,比如<h:p>。

    3. 以Wicket为代表的嵌入式派,可以通过<span wicket:id="message" id="message">来搞定,不破坏HTML,不过通过Filter过滤性能值得怀疑。

         无论哪种MVC框架,目的都是要简化View的开发,然而在实际使用时却发现,简化了简单的页面,复杂页面却变得更复杂了,因为这些MVC框架都普遍忽视了一个基本原理:现代Web技术是建立在HTML CSS JavaScript基础上的,任何试图帮助Java开发者隐藏HTML、CSS和JavaScript的努力最终都将阻碍Web开发。不会HTML,不会CSS,不会JavaScript,那就不要做Web开发,无论你多么精通Java!

    正是由于这些MVC框架有意无意地让Java开发人员远离HTML,才造成了View开发的困难重重。尤其以JSF为代表,性能就不说了,要添加JavaScript你只能先看编译后的HTML源码,要修改CSS要DEBUG至少N次,所有的可视化HTML编辑器都用不了。

         所以,要真正提高Web开发的生产力,尤其是页面的可维护性,Web页面必须由精通HTML CSS JavaScript的开发人员完成,服务器端技术对这些的侵入性越小,页面越容易维护。目前我认为比较好的View框架还是Velocity和FreeMarker,通过<p>${message}</p>比JSP Tag强很多,结合HTML可视化编辑器(主要指Dreamwaver),调试起来非常方便,而且不用重启服务器。至于服务器端,其实各MVC大同小异,我一直使用Spring MVC Velocity,少集成一个框架毕竟麻烦少一些。

     

    展开全文
  • 使用dom解析xml文件在servlet中的dopost函数下运行dom解析代码正常运行提示找不到类,但是我自己导入了它提示的类还是不运行,但我新建了一个类在这个类中用主函数运行确实可以运行的。我是javaweb的初学者...
  • 1.2Jsp全称1.3Jsp只能运行在服务器中,不直接使用浏览器打开1.4Jsp本质是一个Servlet1.5jsp能够以HTML页面的方式呈现数据,是一个可以嵌入java代码的HTML2.Jsp工作原理 1.JSP简介 1.1为什么学习jsp? 以【登录业务...

    1.JSP简介

    1.1为什么学习jsp?

    以【登录业务】为例,当登录失败后,跳转回login.html页面时,需要提示用户【输入用户名和密码有误】。此时,目前只有两种解决方案:

    • 1.在Servlet中使用响应流。不足:有大量HTML内容,占据响应资源
    • 2.在HTML中重建一个【带有提示信息】的login2.html.不足:login.html和login2.html高度冗余。
      总结:完美解决方案,使用动态页面,jsp【在页面中将数据动态化显示】

    1.2Jsp全称

    Java Server Pages:Java服务器端页面

    1.3Jsp只能运行在服务器中,不能直接使用浏览器打开

    1.4Jsp本质是一个Servlet

    • jsp更适合于显示页面数据,数据采集
    • servlet更适合于业务处理【业务请求,做出响应】

    1.5jsp能够以HTML页面的方式呈现数据,是一个可以嵌入java代码的HTML

    2.Jsp工作原理

    • 第一次运行xxx.jsp文件时,服务器将xxx.jsp文件先翻译成xxx_jsp.java文件,再编译成xxx_jsp.class文件。
    • 以后再运行xxx.jsp文件时
      – 如果代码发生改变,服务器将会再次翻译&编译当前xxx.jsp文件
      –如果代码未发生改变,服务器不会再次翻译&编译当前xxx.jsp文件

    3.Jsp基本语法

    3.1指令

    • 格式:<%@%>
    • 常用指令:<%@ page%>、<%@include%>、<%@taglib%>## 3.2模板元素
    • html、css、js

    3.3代码脚本片段

    • 格式:<%%>
    • 作用:在_jspService()方法中,书写java代码

    3.4表达式

    • 格式:<%=%>
    • 作用:将数据显示到页面,类似Servlet的PrintWriter的write()方法作用。【out.print()】

    3.5 声明

    • 格式:<%!%>
    • 作用:在当前翻译后的xxx_jsp.java类中,书写java代码

    3.6注释

    • java注释:// /**/
    • html注释:
    • jsp注释:<%-- --%>

    4.jsp中常用指令

    4.1page指令

    • 语法:<%@page属性=属性值 属性2=属性2 …%>
    • 属性:
      – language:设置当前jsp中语言。有且仅有java。
      – contentType:与response.setContentType()方法作用一致。【设置服务器编码与浏览器解码】
      – import:导包
      – pageEncoding:设置jsp页面的编码字符集
      – errorPage:设置当前页面错误时的跳转页面。【错误位置在脚本片段中,声明中错误无法捕获】
      – isErrorPage:设置当前页面是否为错误页面,默认值:false
      —true:设置当前页面为异常页面,可以使用exception内置对象,捕获异常。
      — false:设置当前页面不为异常页面,不可以使用exception内置对象,捕获异常。

    4.2include指令【静态包含】

    • 语法:<%@ include file=""%>
    • 属性:file=“设置被包含文件的路径”
    • 特点:被包含的文件不会被翻译&编译。(先包含,再翻译&编译)
    • 作用:在当前文件中,包含其他文件
    • 应用场景:包含静态文件【html\css\js】或有少量Java代码的文件

    5.jsp中常用的动作标签

    jsp的动作标签语法:jsp:标签名

    5.1动态包含

    • 语法:<jsp:include page=""/>
    • 属性:page=“设置被包含文件的路径 ”
    • 特点:被包含的文件同时被翻译&编译。【先翻译&编译,再包含】
    • 作用:在当前文件中,包含其他文件
    • 应用场景:包含文件中含有大量的java代码

    5.2转发

    • 语法:<jsp:forward page=""></jsp:forward>
    • 属性:page:“设置转发的路径”
    • 作用:转发请求
    • 子标签:
    <jsp:forward page="include_demo.jsp">
        <jsp:param name="stuName" value="zs"/>
    </jsp:forward>
    

    注意:如果转发中不需要传递参数时,那么该标签的开始标签和结束标签之间,不允许书写任何内容。【包括空格都不能书写】,正确的书写语法如下:

    <jsp:forward page="include_demo.jsp"></jsp:forward>
    

    6.jsp中九大隐式对象(内置对象、隐含对象)【重点】

    什么是隐式对象?
    无需程序员自己实例化的对象。【jsp隐式对象,是服务器预先定义&实例化的对象】
    注意:jsp默认页面中只有8个隐式对象,需要设置isErrorPage=“true”时,才会出现exception这个隐式对象。
    具体隐式对象如下图:
    jsp隐式对象

    6.1pageContext

    • 类型:java.servlet.jsp.PageContext
    • 定义:代表页面【域对象】
    • 作用:
      –1.页面域对象
      –2.获取其他8个隐式对象。【九大隐式对象的大哥,大哥可以调用其他8个小弟】 pageContext.getRequest()或pageContext.getXXX()
    • 在Servlet中的获取方式:无

    6.2request

    • 类型:java.servlet.http.HttpServletRequest
    • 定义:代表浏览器向服务器发送请求报文,封装到了request对象中。该对象由服务器【容器】创建,并以参数的形式,传入到service()方法中,最终传入到doGet()和doPost()方法中。
    • 作用:
      –1.获取请求参数:
      什么是请求参数【请求参数有哪些】?
      请求参数,整体可以分为两类
      1.附加在url的后面的值,就是请求参数
      2.表单中从存在name属性值的表单项,也是请求参数
      request.getParameter();获取单个请求参数
      request.getParameterValues();获取多个请求参数【name相同】
      –2.获取URL信息【http://localhost:8080/day07_http_servlet】
      1.获取协议名:request.getScheme()
      2.获取主机名:request.getServerName()
      3.获取主机端口号:request.getServerPort()
      4.获取上下文路径【带/+项目名】:request.getContextPath()
      –3.获取请求头信息
      request.getHeader()
      –4.转发【路径跳转】,转发后地址栏不变
      获取转发器:RequestDispatcher rd=request.getRequestDistpatcher(“跳转URL”);
      执行转发:rd.forward(request,response);
      –5.请求域路径:
      ServletContext
      HttpServletRequest
    • 在Servlet中的获取方式,可以再doGet()方法中,doPost()方法中直接使用。

    6.3session

    • 类型:java.servlet.http.HttpSession
    • 定义:代表浏览器与服务器之间的会话
    • 作用:会话域对象
    • 在Servlet中的获取方式:request.getSession()

    6.4application

    • 类型:javax.servlet.ServletContext
    • 定义:代表当前web应用程序,当服务器启动时被创建。每个应用程序都有唯一的ServletContext对象。
    • 作用:
      –1.获取当前上下文路径:servletContext.getContextPath();
      –2.获取指定文件的真实路径:servletContext.getRealPath();
      –3.获取【当前上下文】初始化参数:servletContext.getInitParam()
      –4.上下文域对象,共享数据【共4个域对象】servletContext.getAttribute()
    • 在Servlet的获取方式中:直接在doGet()或doPost()中调用getServletContext()获取。

    6.5page

    • 类型:java.lang.Object
    • 源码:final.java.lang.Object page=this;
    • 作用:当前类的对象
    • 在Servlet的获取方式:this

    6.6response

    • 类型:javax.servlet.http.HttpServletResponse
    • 在Servlet中的获取方式:可以再doGet()方法中,也可以在doPost()方法中直接使用。

    6.7config

    • 类型:javax.servlet.ServletConfig
    • 定义:ServletConfig接口封装了Servlet的配置信息,每个Servlet都有唯一对应的ServletConfig对象
    • 作用:
      1.获取当前Servlet名称:servletConfig.getServletName()
      2.获取ServletContext对象:servletConfig.getServletContext()
      3.获取【当前Servlet】初始化参数:servletConfig.getInitParam()
    • 在Servlet中的获取方式:直接在doGet()或doPost()中调用getServletConfig()获取

    6.8out

    • 类型:javax.serlvet.jsp.JspWriter
    • 定义&作用:与Servlet中的PrintWriter作用一致。
    • 作用:与Servlet中的PrintWriter作用 一致。【响应数据到页面】jspWriter与PrintWriter均继承到java.io.Writer
    • 在Servlet中的获取方式:无【PrintWriter writer=response.getWriter()】

    6.9exception

    • 类型:java.lang.Throwable
    • 定义&作用:捕获处理异常
    • 在Servlet的获取方式:直接实例化

    7.jsp中的四大域对象 【重点】

    7.1什么是【域对象】?

    • 生活中的“域对象”:以快递行业为例:同区快递、同城快递、全国 快递、全球快递。主要在不同区域直接传递【共享】商品、物品。
    • 程序中的域对象:主要负责在不同web资源之间进行数据交换。【数据共享】
    • jsp中的四大域对象:pageContext、request、session、application。注意:Servelet中只有:request、session、application。

    7.2域对象共性&使用

    • 每个域对象内部都维护一个Map<String,Object>,域对象的共同方法如下:
      –void setAttribute(String key,Object value):将数据存放到域中
      –Object getAttribute(String key):从域对象中获取数据
      –void removeAttribute(String key):将数据从域中移除

    7.3域对象有效范围

    • pageContext【页面域】
      –作用域:当前页面中共享数据有效,离开 当前页面失效。
      每个页面都有唯一的pageContext对象
    • request【请求域】
      –作用域范围:当前请求有效,离开当前请求失效。
      –当前请求:转发、直接访问某个页面时为当前请求
      –离开当前请求:重定向、、location等跳转页面时,即为离开当前页面。
      –总结:只要【未使用转发时】路径发生改变,就离开当前请求。
    • session【会话域】
      –作用域范围:当前会话中有效,离开当前页面会话失效。
      –当前会话:当前浏览器不关闭或浏览器不更换时,即为当前会话。【会话与浏览器一一对应,与服务器无关】
      –离开当前会话:关闭浏览器即为会话结束,不同浏览器之间不能共享会话。【默认情况】
    • application【上下文域,web域】
      –作用域范围:当前web应用在服务器中启动状态,即有效。当前web应用关闭或卸载,即失效。
      –有效:当前web应用为启动状态
      –失效:关闭服务器,重启服务器,卸载web应用时,即为失效。
    • 总结:域对象的大小关系:pageContext<request<session<application
      在使用域对象时,能使用小域就不使用大域。
    展开全文
  • 一、Servlet 与 JSPServlet 通常使用字符串拼接的方式动态生成 html,大量的 html 内容使代码难以维护、可读性差。感受一下,简单地加一个 table 得酱写:都快看不出来是 Java 代码了。后来,大佬们想,既然在 ...
  • 一、Servlet 与 JSPServlet 通常使用字符串拼接的方式动态生成 html,大量的 html 内容使代码难以维护、可读性差。感受一下,简单地加一个 table 得酱写:都快看不出来是 Java 代码了。后来,大佬们想,既然在 ...
  • Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...
  • JSP原理与基本使用

    2013-08-17 16:16:18
    简单的说的话,JSP本质上就是把Java代码嵌套到HTML中,然后经过Web容器的编译执行,先转换成Java文件,在编译成*.class文件,最后执行并将执行结果生成对应的HTML代码为什么使用JSPJSP就是Sun公司开发的一种基于...
  • JSP

    2021-04-10 16:11:49
    JSPJSP与Servlet的区别Servlet实例对象的生命周期jsp的运行原理为什么jsp取代servletJSP技术原理3大JSP指令page指令include 指令taglib指令6大页面动作JSP动作元素包含五大类动态包含和静态包含之间的区别请求...
  • jsp简介与基本的使用

    2018-03-29 00:35:10
    为什么要有JSP这门技术? &gt; 软件的三层架构:表现层(HTML,Servlet) 业务逻辑层(Service层) 持久化层(Dao层) &gt; HTML是专门用来展示网页,不在页面中执行Java代码 &gt; Servlet不擅长显示...
  • ``` package com.admin; import java.util.ArrayList; ...以上是后台的代码 ...以上是前台的代码 ...就是很奇怪,数组slist的值可以接收到,并且正常使用。...我很疑惑,为什么会这样,有大佬为我解答吗?
  • jsp基础

    2017-07-12 18:33:45
    在html中嵌套java代码jsp代码是怎么运行的将jsp使用out.write() 输出out为什么不用创建out为jsp的内置对象,jsp共有9个内置对象为什么能输出j? int i=90; int j=i+10; %> <h1>sum=</h1>
  • JSP基础

    2017-12-21 18:32:47
    JSP基础一、什么JSP JSP,即 Java Server Pages,Java 服务器页面,即运行在服务器端的... 文件中插入 Java 代码片断和 JSP 标签后形成的一种文件,其后缀名.jsp使用 JSP 开发的 Web 应用是跨平台的,既
  • ④ 模板设置文件名称“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了点,不过管用 要自动创建带有某种后缀的文件,方法同上。 【9】软件技巧——提示找不到语法文件 *.stx 的解决办法 原因多为...
  • 被解析成了这样一段JAVA代码 String pageURL = "header.jsp"; out.print(pageURL); org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, [color=red]"/templates/<%=pageURL%>" [/...
  • try{ //必须使用try catch语句捕获加载数据库驱动时可能发生的异常 Class.forName(classname).newInstance(); //加载数据库驱动 }catch (Exception e){ e.printStackTrace(); //输出异常信息 ...
  • **我的疑惑是:为什么它走了两次这个流程?是因为我调用了个`dao`层的插入数据的方法吗?** 还是或事物回滚就是从头在执行要一遍流程呢? 这个异常, 导致回滚技术无法实现呀. ## 代码片段(图片) !...
  • 在这种访问中值的我们注意的是虽然JAVA是"Write Once ,Run Anywhere",但是如果通过这种访问的话,需要客户端必须设置ODBC和有相应的数据库客户机的驱动,当你看了下面的另外一个流程的时候或许你会想:明明下一种更...
  • Jsp基础和核心

    2019-10-10 10:30:00
    一、Jsp基础 ...JSP技术是在传统静态网页HTML文件中插入java代码片段和JSP标签后形成的一种文件,其后缀名.jsp使用JSP开 发的Web应用是跨平台的,既在Linux上运行,也在其他操作系统上运行。 J...
  • JSP基础(一)

    2017-08-21 17:26:04
    jsp技术是在传统的静态页面html文件中插入java代码片段和jsp标签后形成的一种文字,其后缀名.jsp使用jsp开发的web应用是跨平台的,既在linux上运行,也在其他系统上运行。 也就是说,jsp文件的本质是...
  • 在排查软件程序故障的过程中,程序员们通常是崩溃的。...从事过Java编程久一些的程序员,大都有了解或者使用过JSP,回想一下,为什么JSP写的代码就不需要重启JVM呢?让我们先来看看JSP的运行原理:当我们...
  • jsp学习笔记

    2020-12-10 11:18:01
    1)为什么JSP规范 Servlet技术产生以后,在使用时最麻烦的是使用大量的out.pirnt语句输出页面。这样的形式在系统变更、维护、预览效果时都不方便快捷的完成任务,于是推出JSP这种技术,用来将Servlet中负责显示...
  • java面试宝典

    2013-02-28 16:04:01
    144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS? 36 145、<%@include file="abc.jsp"%>与<jsp:include page="abc.jsp"/>之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36...
  • 为什么jsp取代servlet 我的面向对象程序观 我认为JSP有问题 无状态Enterprise JavaBeans的观点 小议如何在 Applet 中显示图象 小议如何在 Application 中显示图象 小议如何在组件上显示图象 Java做一个最...
  • 一文搞定JSP

    2021-04-15 09:09:27
    一、为什么使用JSP HTML和JSP的区别,就好像我有一块巨大的墙,然后在上面用传统的方式粘贴广告布,今天是张三出1万块钱展示他的成人用品广告,明天是李四花2万块钱展示他的治肾亏广告。。。我每天都得去换广告布?...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    往好了用什么都能干,就是不让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    往好了用什么都能干,就是不让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 233
精华内容 93
关键字:

为什么jsp能使用java代码

java 订阅