JavaWeb-文章简单易懂,教你学jsp!!

JSP

1、JSP简介

jsp全称Java Server Page, 一种动态网页开发技术。它允许使用el表达式、jstl来获取Java代码中的数据,同时允许在jsp中编写html代码,使得jsp可以非常容易的显示页面。Jsp本质是Servlet,最终以Servlet方式运行,所以可以说Jsp是一种特殊的Servlet。

2、JSP组成结构

2.1、静态内容
html静态文本
2.2、注释
第1种: <!-- HTML注释 -->     
第2种: <%--  JSP注释 --%>     
第3种: <%     //java注释     %>
2.3、代码段Scriptlet
<% java代码 %>
2.4、表达式

表达式的结果会直接被输出到页面中。要注意表达式的后面不能有;号

<%=Math.PI %>
2.5、声明

JSP用来定义页面级变量,以保存信息或定义JSP页面的其余部分可能需要的方法。

<%! int a = 0; %>
2.6、指令

用于将有关的页面的特殊处理信息传送到JSP容器。常见的JSP指令分为三种:

  1. page指令用来导入指定类、编码等等。缺省情况下JSP默认自动导入以下四个包中的所有类:java.lang、javax.servlet、javax.servlet.http、javax.serlvet.jsp
<%@ page ... %>
属性缺省值
import类名或包名
language脚本语言名称“java”
contentTypeMIME类型和字符集“text/html”
extends类名
info文本字符串
session布尔值“true”
buffer缓冲器大小,或none“8kb”
autoFlush布尔值“true”
isThreadSafe布尔值“true”
errorPage本地URL
isErrorPage布尔值“false”

错误页面的配置除了通过page指令中的errorPage跟isErrorPage来配置外,还可以通过web.xml中来配置全局的错误页面。可以通过错误代码跟错误类型来配置。

  • 通过错误码来配置error-page
	<error-page>
        <error-code>500</error-code>
        <location>/error.jsp</location>
  	</error-page> 
  • 通过异常的类型配置error-page

    <error-page>
            <exception-type>java.lang.NullException</exception-type>
            <location>/error.jsp</location>
    </error-page>
    
  1. include指令用来在JSP文件转换成Servlet时引入其他文件。
<%@ include file="URL" %>
    
  1. taglib指令是为了定义标签。
<%@ taglib ... %>
2.7、动作

JSP中定义了若干个标准动作,可以在页面中使用JavaBean组件和有条件的把页面的控制权移到其他页面。

  • jsp:useBean:寻找或者实例化一个JavaBean

声明一个JavaBean:

<jsp:useBean id="sevenbean" class="com.seven.MyBean" scope="request" />

id表示JavaBean的标识,代表了一个JavaBean实例对象

class属性值表示JavaBean实例的类的名字,大小写要完全一致

scope属性值表示指定JavaBean实例的作用域。取值是pageContext(默认)、request、session、application

​ 整体表示在request范围中获取名称为“sevenbean”的对象,如果能获取到则直接使用,如果获取的是null则新创建一个MyBean对象。

  • jsp:setProperty:设置JavaBean的属性

<jsp:setProperty property="age" name="sevenbean" value="18" />

​ 表示给sevenbean这个实例对象的age属性赋值18

<jsp:setProperty property="age" name="sevenbean" param="ageParam" />

​ 表示给sevenbean这个实例对象的age属性赋值,值通过请求参数request.getParameter(“ageParam” ) 获取到。

<jsp:setProperty property="*" name="sevenbean" />

​ 表示给sevenbean这个实例对象的所有属性进行赋值,值通过请求参数中获取,所以要求请求参数中的参数名称跟bean的属性名必须一样才能自动映射上。

注意:jsp:setProperty标签不能单独使用,必须在之前使用<jsp:useBean />标签。

  • jsp:getProperty:输出某个JavaBean的属性

    <jsp:getProperty name="sevenbean" property="name" />

    表示获取sevenbean对象的name属性值并输出,会依次从pageConext、request、session、application范围中寻找。

​ 注意:jsp:getProperty 标签不能单独使用,必须在之前使用<jsp:useBean />标签。

jsp:include:在页面被请求的时候引入一个文件

<jsp:include page="URL" flush="true" />

page属性包含的是一个相对的URL,可以是HTML页面、JSP页面或者是Servlet的url-pattern。flush属性作用是在包含页面前清空在缓冲区中的数据,默认值是true。可以在标签内通过 <jsp:param > 标签来传递参数。

jsp:forward:把请求转到一个新的页面

<jsp:forward page="new URL">

forward动作用于将控制权从JSP页面传递给本地服务器的另一个位置。丢弃当前页面生成的任何内容,并在替换位置上重新处理请求。forward标签只有一个page属性。page属性包含的是一个相对URL ,可以是HTML页面、JSP页面或者是Servlet的url-pattern。page的值既可以直接给出,也可以在请求的时候动态计算,通过表达式来实现,如:

<jsp:forward page='<%="new"+newNo+".html"%>'

此标签在传递页面的控制权到另外的页面的时候,可以把相应的参数值传递到目的页面。如果需要传递参数,使用<jsp:param >标签,注意这时必须要使用对标签。把<jsp:param >标签包含在里面。

<jsp:forward page="a_02.jsp">
	<jsp:param value="zhangsan" name="name"/>
	<jsp:param value="123" name="pwd"/>
</jsp:forward> 

问题:静态包含(指令)跟动态包含(动作)有什么区别?

  • 原理不同:

​ 静态包含:先合并再翻译

​ 动态包含:先翻译再包含

  • 最终编译成java文件的数目不同。

    静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。

  • 静态包含在两个文件中不能有相同的变量,动态包含允许

  • 语法不同:

    静态包含语法: <%@inclue file=“被包含的页面”%>

    动态包含语法: <jsp:include page=“被包含的页面”>

  • 参数传递不同 :

    静态包含不能向被包含页面传递参数

    动态包含可以使用jsp:param标签向被包含页面传递参数

3、JSP运行原理

查看Jsp生成的文件

4、JSP生命周期

jsp本质是一个Servlet,它比Servlet的生命周期多了一个翻译阶段。

翻译阶段

编译阶段

实例化阶段

初始化阶段

执行阶段

销毁阶段

回收阶段

5、Jsp九大隐式对象(内置对象)

  1. request:HttpServletRequest对象,代表请求
  2. response:HttpServletResponse对象,代表响应
  3. out:JspWriter对象,代表输出
  4. session:HttpSession对象,代表每个会话
  5. application:ServletContext应用对象,代表整个应用程序
  6. config:ServletConfig配置对象,代表配置文件中的信息
  7. pageContext:PageContext对象页面上下文对象,包含页面信息
  8. page:当前页面对象(this)(基本不使用)
  9. exception:Throwable异常对象,包含jsp异常信息

问题:JSP的内置对象有哪些?

6、JSP四大作用域

page:作用在某个页面

//设置参数
pageContext.setAttribute("key", "value");
//获取参数
pageContext.getAttribute("key");

request:作用在请求阶段

//设置参数
request.setAttribute("key", "value");
//获取参数
request.getAttribute("key");

session:作用在整个会话

//servlet中设置参数
request.getSession().setAttribute("key", "value");

//jsp中设置参数
session.setAttribute("key", "value");
//获取参数
session.getAttribute("key");

application:作用在整个应用程序

//Servlet设置参数
request.getServletContext().setAttribute("key", "value");

//jsp设置参数
application.setAttribute("key", "value");
//获取参数
application.getAttribute("key");

7、MVC模式

MVC不是一种技术,而是一种思想,一种架构模式,它主要用来将页面、数据、逻辑代码进行分离,更是责任分工的一种体现。

M:Model(模型)

V:View(视图)

C:Controller(控制器)

7.1 model1

在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接受处理客户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。从工程化角度看,它的局限性非常明显;JSP的职责不单一,身兼View和Controller两种角色,将控制逻辑职和表现逻辑混杂在一起,职责过重,代码的可复用性低,不便于维护。

在这里插入图片描述

7.2 model2

Model2就是MVC的一个成功应用。模型(JavaBean)、视图(JSP)、控制器(Servlet)。正如下图所示,Model2下的JSP不在承担控制器的责任,它仅仅是表现层角色,仅仅用于将结果呈现给用户。浏览器发来的请求与Servlet(控制器)交互,而Servlet负责与后台的JavaBean通信。在Model2模型下,模型(Model)由JavaBean充当,视图(View)有JSP页面充当,而控制器(Controller)则由Servlet充当。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值