JSP 学习笔记
JSP 全名为Java Server Pages,中文名叫java 服务器页面,它是在传统的 HTML 页面中插入 JAVA 代码片段和 JSP 标签形成的文件。
上一篇 Servlet 中只是讲解了我们开发中为什么继承 HttpServlet,而不是 Servlet 和 GenericServlet。并且只是对 ServletConfig、ServletContext、ServletResponse、ServletRequest 四个对象所拥有的方法简单的进行了介绍,这篇文章将会接着上一篇文章进行更加详细的讲解。
首先我们需要知道在 JSP 页面上需要将 java 代码写在 <% java... %> 中间,JSP 经过服务器解析翻译其底层其实是一个 Servlet 的实现。
知道了如何在 JSP 页面上写 JAVA 代码,接着便是如何去写 Java 代码并且和服务器相关。首先我们需要了解 JSP 页面的九个隐含对象。
request -- HttpServletRequest 对象
response -- HttpServletResponse 对象
pageContext -- 页面的上下文, pageContext 对象,从中可以获取到其他八个隐含对象吗,也可以获取到当前页面的其他信息,可以代表当前页面
session -- 代表浏览器和服务器的一次对话,是 HttpSession 的一个对象
application -- 代表当前 WEB 应用,是 ServletContext 对象,可以获取当前 WEB 应用的初始化参数参数
config -- 代表当前 ServletConfig 对象
out -- 是 JSPWriter 对象,调用 out.println() 可以把字符打印到页面, <%= %> 等于 out.print() 功能就是输出至页面(底层实现都是一样的)
page -- 当前 JSP 对应的 Servlet 对象的引用,为 Object 对象
exception -- 在 page 指令中声明了 isErrorPage=true 时才会用到
我们接着上篇文章所说的 ServletContext 等对象的方法讲解,setAttribute() ,getAttribute(),那么 JSP 的隐含对象也就有这些对象所拥有有的方法,接下来我们在页面上给 request pageContext session application 四个对象设置属性,在另外一个页面和 Servlet 上获取其属性值,index.jsp 如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>LoginPage</title>
</head>
<body>
<h2>PAGE1</h2>
<%
request.setAttribute("request", "requestValue");
pageContext.setAttribute("pageContext", "pageContextValue");
session.setAttribute("session", "sessionValue");
application.setAttribute("application", "applicationValue");
%>
<br><br>
<%= request.getAttribute("request")%>
<br><br>
<%= session.getAttribute("session")%>
<br><br>
<%= pageContext.getAttribute("pageContext")%>
<br><br>
<%= application.getAttribute("application")%>
<br><br>
<%-- 跳转至 page2 和 Servlet 获取属性 --%>
<a href="page2.jsp">ToPage2</a>
<a href="attributeServlet">ToServlet</a>
</body>
</html>
page2.jsp 如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Page2</title>
</head>
<body>
<h2>PAGE2</h2>
<br><br>
<%= request.getAttribute("request")%>
<br><br>
<%= session.getAttribute("session")%>
<br><br>
<%= pageContext.getAttribute("pageContext")%>
<br><br>
<%= application.getAttribute("application")%>
<br><br>
<a href="index.jsp">ToIndex</a>
</body>
</html>
AttributeServlet 如下
package attribute.scope.test; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class AttributeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
// 由于是超链接,所以是 get 请求,所以只需要覆盖 doGet 方法即可
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object objRequest = request.getAttribute("request");
Object objSession = request.getSession().getAttribute("session");
Object objApplication = getServletContext().getAttribute("application"); System.out.println("Application: " + objApplication);
System.out.println("Request: " + objRequest);
System.out.println("Session: " + objSession);
}
}
运行程序后,page2.jsp 中只有 session 和 application 两个对象的值不为 null,而在 Servlet 中 也只有 session 和 application 两个对象不为空,这是因为 pageContext 对象的作用范围为当前页面,所以跳转到另外一个页面或 Servlet 便不会获取到;而 request 的作用范围为一个请求,因为点击的是超链接所以每次都是不同的请求,所以获取不到,而 session 的作用范围为一次会话,也就是浏览器打开直到关闭为一次会话,application 的作用范围为当前 WEB 应用,只要一处设置属性,在当前 WEB 应用的任何地方都可以访问到。我们称上述四个对象为域对象,其对属性的作用范围从小到大依次为 PageContext request session application
上面我们介绍了和 Attribute 相关的两个方法,接着是请求的转发和重定向,我们需要知道转发和重定向的区别:
对于请求转发,其URL 为初次发送请求的地址,而重定向为请求响应的地址;
request 对象在请求转发的情况下在不同的 Servlet 中是相同的request,重定向不是同一个
请求转发只能作用于当前 WEB 应用,而请求重定向可以作用于任何资源包括网络资源
转发实现步骤 servletRequest.getRequestDispatcher("/user.jsp").forward(servletRequest, servletResponse);
调用 HttpServletRequest 的 getRequestDispatcher() 方法获取 RequestDispatcher 对象,调用 getRequestDispatcher() 需要传入要转发的地址;
调用 HttpServletRequest 的 forward(request, response)
/ 代表当前 WEB 应用根目录(http://localhost:8989/项目名称)
重定向的步骤 response.sendRedirect("user.jsp");
直接调用 response(HttpServletResponse 的对象) 的 sendRedirect 方法
我们知道了请求的重定向和请求的转发之后加上我们之前所学的 request 域对象,这时候便可以实现跨页面得到 request 的属性值了。
JSP 指令之 Page 指令
Page 指令的 session 值为可 true 或 false,指当前页面是否可用 session 隐含域对象;
isErrorPage 可设置为 true 或 false,指定当前页面是否为错误页面,如果为 true,那么该页面就可调用 JSP 域对象 Exception,就可以使用 Exception.getMessage() ,打印错误消息。若一个页面的 isErrorPage 为 true,那么该页面不该被直接访问,只能通过请求转发访问,因为若直接访问,Exception 域对象将为 null,调用 getMessage() 方法将会有 空指针异常;
ErrorPage 指定当前页面发生异常的时候到一个指定页面,该页面的 isErrorPage 应当为 true;
contentType 设置页面响应类型,实际上是调用 response.setContentType(“text/html; charset=”UTF-8””) 方法,JSP 页面通常都设置为 text/html;
charSet 指定返回的页面字符编码;pageEncoding 指定当前页面字符编码
IsELIgnored 指定当前 JSP 页面是否可使用 EL 表达式(有关 EL 表达式后面将会讲解),通常为 true;
解决中文乱码
1. 设置所有可设置的编码为 UTF-8,可以解决当前页面和返回页面不乱码;
2. 若获取表单中的值并返回,且表单值为中文采用上面的方法便不会达到目地,这种情况可以采用 request.setCharacterEncoding(“UTF-8”); 并且此方法必须在获取表单值之前调用(即 request.getParameter("name"); 之前),POST 方法。
3. 对于 GET 请求调用上面的 setCharacterEncoding(“UTF-8”); 并不会奏效,因为默认传输过程编码为 ISO-8859-1,这时候我们可以修改 Tomact 配置文件 server.xml,在 Connector 节点中加上 useBodyEncodingForURI=“true”,那么对于 GET 请求 request.setCharacterEncoding(“UTF-8”); 方法便会奏效,如下:
<Connector port="9090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"/>
加上上一篇 Servlet 博文便是我上一周的学习内容,希望有大神读完的可以给点建议,比如如何写博客,在这先谢谢了!
JSP 学习笔记的更多相关文章
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
- JSP 学习笔记1
JSP 学习笔记 JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例--JSP页面有系统编译成Servlet,Servlet再负责响应用户请求. 1.JSP注释 < ...
- jsp学习笔记:mvc开发模式
jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息 ...
- JSP学习笔记2
<JAVA遇见HTML——JSP篇>学习笔记(下) 1.Javabean Javabeans就是符合某种规范的java类,使用Javabeans的好处是[解决代码的重复编写],减少代码冗余 ...
- (转) jsp学习笔记
fromhttp://www.cnblogs.com/tao975/p/4445070.html 什么是JSP JSP的优势 JSP的劣势 JSP与PHP的比较 JSP工作原理 JSP的九大内置对象 ...
- 重温JSP学习笔记--三大指令九大内置对象
最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: ...
- 重温JSP学习笔记--与日期数字格式化有关的jstl标签库
上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: &l ...
- 重温JSP学习笔记--JSTL标签库
以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是 ...
随机推荐
- Python协程深入理解
从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数.yield在协程中的用法: 在协程中yield通常出现在表达式的右边,例如:datum = yield,可以产出值,也可以不产出 ...
- IDL 使用数组
1.下标方式 IDL> array=indgen(8) IDL> print,array 0 1 2 3 4 5 6 7 IDL> print,array[3] IDL> ar ...
- python爬虫之爬取百度图片
##author:wuhao##爬取指定页码的图片,如果需要爬取某一类的所有图片,整体框架不变,但需要另作分析#import urllib.requestimport urllib.parseimpo ...
- PHP 404页面/如何设置404页面/URL静态化/URL伪静态化
php中如何设置404页面及其他错误页面 首先在项目根目录下新建文件,文件名为" .htaccess " 在该文件中写入一下配置项: ErrorDocument 404 /404. ...
- CSS3动画 transition和animation的用法和区别
transition和animation都是CSS3新增的特性,使用时需要加内核 浏览器 内核名称 W3C IE -ms- Chrome/Safari -webkit- Firefoc - ...
- IDEA搭建SpringMVC+Mybatis+Mysql+Maven框架
相关环境 Intellij IDEA Ultimate Tomcat JDK MySql 5.6(win32/win64) Maven (可使用Intellij IDEA自带的) 搭建步骤 创建项目工 ...
- spring-boot学习资料
spring-boot: http://www.ityouknow.com/spring-boot 这里的内容都可以学习下: https://zhuanlan.zhihu.com/dreawer?to ...
- python识别html主要文本框
在抓取网页的时候只想抓取主要的文本框,例如 csdn 中的主要文本框为下图红色框: 抓取的思想是,利用bs4查找所有的div,用正则筛选出每个div里面的中文,找到中文字数最多的div就是属于正文的d ...
- python Logging的使用
日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分. 根据事件的轻重可分为以下几个级别: DEBUG: 详细信息, ...
- 浏览器缓存相关HTTP头部字段
1.Cache-Control/Pragma 2.Expires 3.Last-Modified/Etag