JavaWeb = JSP详解
jsp
工作原理(servlet) 脚本注释 指令
内置对象 动作标签MVC模式
一.JSP
HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。JSP技术所开发的Web应用程序是基于Java的,本质上就是一个Servlet , 它可以用一种简捷而快速的方法从Java程序生成Web页面,其使用上具有如下几点特征:跨平台:由于JSP是基于Java语言的,它可以使用Java API,所以它也是跨平台的,可以应用于不同的系统中,如Windows、Linux等。当从一个平台移植到另一个平台时,JSP和JavaBean的代码并不需要重新编译,这是因为Java的字节码是与平台无关的,这也应验了Java语言“一次编译,到处运行”的特点业务代码相分离:在使用JSP技术开发Web应用时,可以将界面的开发与应用程序的开发分离开。开发人员使用HTML来设计界面,使用JSP标签和脚本来动态生成页面上的内容。在服务器端,JSP引擎(或容器,本书中指Tomcat)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结果以HTML页面的形式返回到浏览器。组件重用:JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在JSP页面中,甚至在整个项目中,都可以重复使用这个JavaBean,同时,JavaBean也可以应用到其他Java应用程序中。预编译:预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大大的提升了客户端的访问速度。
在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages) JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,页面动态资源使用java代码,页面静态资源使用html标签。简单来说:可以在html标签中嵌套java代码作用:简化书写,展示动态页面入门:
在jsp页面,动态展示当前时间<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>${NAME}</title></head><body><%Date date = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String currentTime = simpleDateFormat.format(date);%><h3><% out.write(currentTime);%></h3></body>
</html>
(2)工作原理:
JSP本质上就是一个Servlet
1. <% 代码 %>脚本片段,生成在service方法中,每次请求的时候都会执行2. <%! 代码 %>声明片段,在java代码中声明成员,放在jsp生成java文件中的成员位置3. <%=代码 %>输出脚本片段,相当于out.print("代码") 方法,输出到jsp页面
-2.注释:
1. html注释<!-- 注释静态资源 -->2. JSP注释<%-- 注释所有 --%>3. java注释(JSP脚本内使用)// 单行/* 多行 *//**文档 */
注释作用范围
(4).指令:
* 作用用于配置JSP页面,导入资源文件
* 格式<%@ 指令名称 属性名1="属性值1" 属性名2="属性值2" ...%>* 三大指令1. page:配置JSP页面2. include:页面包含(静态)3. taglib:导入资源文件
- page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>contentType 相当于 response.setContentType(); 设置响应体的MIME类型和编码方式language 目前仅支持java语言import 导入jar包<%@ page import="java.util.Date" %>pageEncoding
该属性的作用是:指定当前jsp页面的编码。这个编码是给服务器看的,服务器需要知道当前页面的编码,否则服务器无法正确的把jsp翻译成Java文件。
extends
它用于设置jsp翻译后的java类的父类. 要求必须是HttpServlet或其子类Session
面上是否禁用session。可取值为true/false 如果值为false,在页面上不能使用session。
isELIgnored
用是否忽略el表达式.可取值为true/false 如果值为true,那么页面上的el表达式就不会被解析.errorPage 当前页面报错后,跳转指定错误提示页面isErrorPage 声明当前jsp页面是一个异常处理页面,打开异常开关false(默认)true:可以操作exception异常对象<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="500.jsp" %>
<html>
<head><title>demo2</title>
</head>
<body>
<h3>page指令</h3>
<%new Date();new SimpleDateFormat();Integer age = 1 / 0;
%>
</body>
</html>异常处理页面<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head><title>500</title>
</head>
<body>
<h4>服务器繁忙,请稍后重试....</h4>
<%// 获取错误信息,发送程序员,进行处理。。。out.print(exception.getMessage());
%>
</body>
</html>
pageEncoding与contentType的区别与联系pageEncoding与contentType都是page指令的属性,它们都是用来设置编码,有如下联系:如果这两个属性只提供了其中一个,那么没有提供的那个属性的编码值就是提供的这个属性的编码值,例如:在jsp页面中设置了contentType=”text/html;charset=utf-8”,那么没有设置的pageEncoding的值就为utf-8,反之亦然;如果两个属性都没有提供,那么两者的默认编码就是ISO-8859-1。根据对这两个属性的讲解,它们有如下区别:pageEncoding是设置当前页面的编码,该编码是给服务器看的,可以让服务器正确的将jsp文件翻译成Java文件;contentType有两个作用:一是设置响应字符流的编码,二是设置Content-Type响应头,即通知浏览器使用什么编码方式解码响应信息。
- include指令-静态包含
top.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>top.jsp</title>
</head>
<body>
<div style="border: skyblue dashed 5px;height: 100px">头部</div>
</body>
</html><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>demo</title>
</head>
<body>
<%@include file="top.jsp"%>
<div style="border: red solid 5px;height: 400px">我是include静态包含,主体..</div>
</body>
</html>
include指令作用include指令的作用是在JSP页面中静态包含一个文件,同时由JSP解析包含的文件内容include指令格式<%@ include fifile=“fifilename” %>include指令功能分析包含的是目标文件的源码;包含过来,一起翻译
- taglib指令
taglib指令作用作用:是用于导入标签库.taglib指令格式<%@taglib prefifix="" uri="" %>uri 标签文件的URI地址prefifix 标签组的命名空间前缀
(5)内置对象
* 作用在JSP页面中不需要获取和创建,可以直接使用的对象* JSP一共有9个内置对象变量名 真实类型 作用pageContext PageContext 当前页面中共享数据(域对象)request HttpServletRequest 一次请求中共享数据(域对象)session HttpSession 一次会话中共享数据(域对象)application ServletContext 整个web应用共享数据(域对象)-----------------------------------------------response HttpServletResponse 响应对象page(this) Object 当前页面(servlet)对象out JSPWriter 输出对象config ServletConfig servlet配置对象exception Throwable 异常对象(默认关闭...)
注意:exception对象只有在jsp页面上设置了page指令的isErrorPage才会有exception对象。
* 常用1. pageContext1)当前页面的域对象2)获取其他八个内置对象2. request1)接收用户请求(参数)2)一次请求中域对象3. response1)设置响应字节流字符流4. out1)专门在jsp中处理字符流print(); // 可以输出一切类型write(); // 只能输出字符类型
(6)jsp动作标签
* 作用简化JSP页面编码* 常用<jsp:include>:页面包含(动态)相当于request.getRequestDispatcher().include(request,response);<jsp:forward>:请求转发(页面跳转)相当于request.getRequestDispatcher().forword(request,response);<jsp:param>:参数传递其实这是forward子标签使用request.getParameter() 获取参数
动态包含:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>demo6</title>
</head>
<body>
<jsp:include page="top.jsp"></jsp:include>
<div style="border: green solid 5px;height: 400px">jsp的动态包含,主体</div>
</body>
</html>
静态包含和动态包含的区别:
在企业开发时,我们推荐使用静态包含,提升访问性能;注意:不能出现重名的变量。。。
请求转发
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>a</title>
</head>
<body>
<%System.out.println("a.jsp执行了");request.setAttribute("username", "request域存值了");
%>
<jsp:forward page="b.jsp"><jsp:param name="name" value="ack"></jsp:param><jsp:param name="age" value="18"></jsp:param>
</jsp:forward>
</body>
</html><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>b</title>
</head>
<body>
<%System.out.println("b.jsp执行了");// request域传递System.out.println(request.getAttribute("username"));// param标签传递System.out.println(request.getParameter("name"));System.out.println(request.getParameter("age"));
%>
</body>
</html>
总结:
jsp中四个域对象
jsp有四个域对象,分别是:application:域范围是整个应用;session:域范围是整个会话,注意一个会话中只有一个用户,如果要统计站点的访问次数,使用的域是
ServletContext,因为这个时候统计的是多个用户,而非一个用户;request:域范围是整个请求链;pageContext:域范围是一个jsp页面,在一个页面中存数据再取数据没有任何意义,所以这里所说的域指的是在当前jsp页面和当前jsp页面中使用的标签之间共享数据。
jsp动作标签:
Jsp中常用动作标签jsp:forward
jsp:forward标签是用来做请求转发,它与RequestDispatcher接口的forward()方法一样,唯一不同的是它是在jsp页
面中使用。jsp:param
jsp:param标签作为jsp:forward标签和jsp:include标签的子标签,用来给转发或包含的页面传递数据。
二.MVC模式,思想
1.早期只有Servlet,只能使用response输出html标签,非常麻烦:
2、后来有了jsp,简化了Servlet开发,如果过度使用jsp。同样在jsp页面写了大量的java代码和html标签,造成了代码难以维护,难于分工协作的场景》
3,后来为了弥补过度使用jsp的问题,我们使用servlet+jsp这套组合拳,利于分工协作。
4。mvc介绍:
MVC设计模式: Model-View-Controller简写。
MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。
简单来说:前人们总结的一套设计经验,适合在各种软件开发领域,目的:高内聚,低耦合
* M:model(模型) JavaBean(1.处理业务逻辑、2.封装实体)* V:view(视图) Jsp(展示数据)* C:controller(控制器)Servlet(1.接收请求、2.调用模型、3.转发视图)* 优缺点优点降低耦合性,方便维护和拓展,利于分工协作缺点使得项目架构变得复杂,对开发人员要求高
JavaWeb = JSP详解相关推荐
- JavaWeb Cookie详解
代码地址如下: http://www.demodashi.com/demo/12713.html Cookie的由来 首先我们需要介绍一下,在Web开发过程中为什么会引入Cookie.我们知道Http ...
- JAVAEE和项目开发——JSP详解
jSP详解 主要内容 JSP介绍 JSP运行原理 JSP的使用 学习目标 一.JSP简介 1 JSP介绍 JSP(全称 Java Server Pages)Java服务端页面技术,是JavaEE平台下 ...
- Servlet与jsp详解
Servlet与jsp详解 一.Servert 概念:运行在服务器端的小程序 1.servlet就是一个接口,定义了java类被浏览器访问到的规则 2.将来我们自定义一个类,实现该接口,复写方法 快速 ...
- JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用
Session的追踪技术 已知Session是利用cookie机制的服务器端技术,当客户端第一次访问资源时 如果调用request.getSession() 就会在服务器端创建一个由浏览器独享的ses ...
- Mac下Intellij IDea发布JavaWeb项目 详解一 (1、新建JavaEE Project并进行相应设置 2、配置tomcat)...
IDEA中 javaWeb项目的创建和tomcat配置(完整) 1.先新建JavaEE Project并进行相应设置 2.在配置tomcat Step1 新建JavaEE Project并进行相应设置 ...
- 遇见狂神说JavaWeb笔记详解
写在最前面,这篇博客为观看学习狂神javaweb所写,记录下来及时复习以及分享. 文章目录 1.基本概念 2.web服务器 3.Tomcat 4.Http 5.Maven 6.Servlet 1.基本 ...
- 第二部分_搭建Java Web开发环境与配置Tomcat服务器JSP详解
MyEclipse集成Tomcat 首先配置Tomcat,即配置环境变量Java_HOME.path,在第一讲中已经完成了,不再赘述. Eclipse代码风格导入MyEclipse: 每个项目都要配置 ...
- javaWeb服务详解(含源代码,测试通过,注释) ——web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...
- javaWeb服务详解(含源代码,测试通过,注释)
javaweb服务分为两个部分,一部分是web服务端,另一部分就是你调用的客户端了.首先我说下实现web服务的简单思路: 一.服务器端实现: 1.添加webservice jar包 spring支持 ...
最新文章
- Java基础 Day07(方法)
- 继承关系中的拷贝构造函数和赋值操作重载函数分析
- Java ServletContextListener用法
- 初来乍到?请多关照==23333
- python怎么让输出的数字右对齐_python(格式化输出)
- javascript --- [express+ vue2.x + elementUI]登陆的流程梳理
- -%3erow mysql_MySQL查询优化
- 七个重要习惯——读《高效能人士的七个习惯》整理
- jmeter找不到java.dll_Windows下Jmeter安装出现Not able to find Java executable or version问题解决方案...
- 1.C#基础之简介(完成)
- Element中 el-tag 点击事件 el-tag添加@click事件无效
- linux重启后mysql无法启动_Linux重启后MySQL数据库文件全部丢失MySQL无法启动
- FeignClient与RestTemplate的区别
- 2个月面了鹅厂的5个部门,心态差点奔溃了......
- 模态 - block
- EpiDope:用于线性B细胞表位预测的深度神经网络
- 学一点Wi-Fi:WEP
- win10计算机证书管理器,win10系统iE浏览器导入数字证书的详细办法
- python一元二次方程组
- android控件翻书效果,android ViewPager实现滑动翻页效果实例代码