admin管理员组

文章数量:1442237

JavaWeb后端入门9—JSP、MVC

1. JSP的脚本和注释

1.1 脚本

  • <%java代码%>内部的代码翻译到service方法的内部
代码语言:javascript代码运行次数:0运行复制
	<%
		int i=1;
		System.out.print(i);
	%>
  • <%=java变量或表达式%> 会在前台页面输出,被翻译成service方法内部的out.write( )
代码语言:javascript代码运行次数:0运行复制
	<%=i %>
	<%=1+1 %>
  • <%!java代码或类方法%> 会被翻译成Servlet的成员内容
代码语言:javascript代码运行次数:0运行复制
	<%!
		String str = "你好中国";
	%>
	<%=str %>

1.2 jsp注释

不同的注释可见范围不同

  • html注释可见范围:jsp源码、翻译后的Servlet、前台html
代码语言:javascript代码运行次数:0运行复制
<!-- 这是html 注释-->
  • java注释可见范围:jsp源码、翻译后的Servlet
代码语言:javascript代码运行次数:0运行复制
//单行注释

/*多行注释*/

/**可写入javadoc的注释*/
  • jsp注释可见范围:只在jsp源码
代码语言:javascript代码运行次数:0运行复制
<%-- 这是JSP注释 --%>

1.3 设置web应用的全局错误页面

代码语言:javascript代码运行次数:0运行复制
打开web.xml
  <error-page>
  	<error-code>404</error-code>
  	<location>/error.jsp</location>
  </error-page>

2. 运行原理

JSP的本质是Servlet。

3. JSP指令

3.1 page指令

  • page指令:属性最多的一个指令,根据不同的属性,指导整个页面特性

格式:

代码语言:javascript代码运行次数:0运行复制
<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>

常用属性:

代码语言:javascript代码运行次数:0运行复制
language:jsp脚本中可以嵌入的语言种类,但是只能填写java 
pageEncoding:当前jsp文件的本身编码---内部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻译时自动创建session
import:导入java的包
errorPage:当当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面

3.2 include指令

  • include指令:页面包含指令,可以将一个jsp包含到另一个jsp中
代码语言:javascript代码运行次数:0运行复制
<%@ include file="被包含的文件地址"%>

作用:代码复现,可以单独写header.jspfooter.jsp,写其他页面时直接引入

静态包含注意点:

  1. 被包含的页面结构应该去掉(比如head标签等),只保存需要引入的html代码。
  2. 在被包含的页面中定义变量,在包含的页面中还可以使用。

3.3 taglib指令

  • taglib指令:在jsp引入标签库(jstl标签库、struts2标签库)
代码语言:javascript代码运行次数:0运行复制
<%@ taglib uri="标签库地址" prefix="前缀"%>
  • uri:引入的标签库的路径
  • prefix:引入的标签库的别名(前缀)

4. JSP的9个内置(隐式)对象

名称

类型

描述

out

javax.servlet.jsp.JspWriter

用于页面输出

request

javax.servlet.http.HttpServletRequest

得到用户请求信息,

response

javax.servlet.http.HttpServletResponse

服务器向客户端的回应信息

config

javax.servlet.ServletConfig

服务器配置,可以取得初始化参数

session

javax.servlet.http.HttpSession

用来保存用户的信息

application

javax.servlet.ServletContext

所有用户的共享信息

page

java.lang.Object

指当前页面转换后的Servlet类的实例

pageContext

javax.servlet.jsp.PageContext

JSP的页面容器

exception

java.lang.Throwable

表示JSP页面所发生的异常,在错误页中才起作用

5. pageContext对象的概述

5.1 简介

pageContext翻译为“页面上下文”对象,代表的是当前页面运行的一些属性

5.2 作用

  • 提供了page范围的数据存取对象
代码语言:javascript代码运行次数:0运行复制
向page范围中存入数据:setAttribute()
向page范围中获取数据:getAttribute()
向page范围中删除数据:removeAttribute()
查找属性的方法:findAttribute()
  • 通过这个对象获得其他的8个内置对象
代码语言:javascript代码运行次数:0运行复制
getException() 
getPage() 
getRequest() 
getResponse() 
getServletConfig() 
getServletContext() 
getSession()
getOut()

5.3 pageContext对象向四个域范围存取数据

代码语言:javascript代码运行次数:0运行复制
1、向request中存数据
pageContext.setAttribute("name", "张三", pageContext.REQUEST_SCOPE);
这句相当于
request.setAttribute("name", "张三");

session、application同理
2、取数据用getAttribute("name",pageContext.REQUEST_SCOPE);
其余同理

5.4 findAttribute方法

先根据小范围的名称进行查找,如果找到了就返回,找不到就去更大范围的那里去找。

代码语言:javascript代码运行次数:0运行复制
PageContext.findAttribute("name");
如果pageContext里面没有,就去requestContext找,没有就去SessionContext找,没有就去applicationContext找,找不到就返回null

6. JSP的四个作用范围

6.1 概述

  • PageScope:页面范围
    • 在当前的页面内有效,离开这个页面,用PageContext保存的数据无效
  • RequestScope:请求范围
    • 从客户端向服务器发送一次请求,服务器对这次请求作出相应之后,用reuqest保存的数据无效
  • SessionScope:会话范围
    • 每个浏览器向服务器发送请求(多次请求)。会话结束后(关闭浏览器或手动删除Session),数据无效。
  • ApplicationScope:应用范围
    • 整个应用中任意的地方都可以获取。

6.2 代码演示

demo1.jsp的body:

代码语言:javascript代码运行次数:0运行复制
<h1>JSP四个作用范围演示</h1>
<%
	//page范围(PageContext)
	pageContext.setAttribute("name", "张三");

	//request范围
	request.setAttribute("name", "李四");
	
	//Session范围
	session.setAttribute("name", "王五");
	
	//application范围
	application.setAttribute("name", "冰冰");
%>
<h1>当前页面获取值</h1>
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>


<%
	//转发到另外一个页面	
	//request.getRequestDispatcher("./demo2.jsp").forward(request, response);
%>
<a href="./demo2.jsp">demo2.jsp</a>

demo2.jsp的body:

代码语言:javascript代码运行次数:0运行复制
<h1>demo2页面获取值</h1>
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>

分析:

  1. 直接打开demo1.jsp
    • 四个都有
  2. demo1.jsp请求转发至demo2.jsp
    • 张三没了
  3. demo1.jsp通过a标签跳转至demo2.jsp
    • 张三、李四没了
  4. demo1.jsp重定向至demo2.jsp
    • 张三、李四没了
  5. 换个浏览器直接打开demo2.jsp
    • 只有冰冰

7. JSP的动作标签

JSP的动作标签用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码造成jsp页面难以维护。

7.1 常用的动作标签

  • <jsp:forward page=""/>:请求转发
    • 相当于request.getRequestDispatcher("").forward(request, response);
  • <jsp:include/>:动态包含
  • <jsp:param/>:传递参数(不用了),用request.setAttribute()实现

7.2 动态包含的原理

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-04-19 ,如有侵权请联系 cloudcommunity@tencent 删除jspmvc后端入门数据

本文标签: JavaWeb后端入门9JSPMVC