jsp学习笔记

0x01 jsp的指令标签

<%@page %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等。
<%@include%> 包含其他文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。
<%@taglib%> 引入标签库的定义。

0x02 jsp的动作标签

与存取javabean有关(3只)
jsp:usebean 加载一个将在JSP页面中使用的JavaBean。
jsp:setProperty 设置已经实例化的Bean对象的属性
第一种:

1
2
3
4
5
用法:
<jsp:usebean id="myName" />
.....
<jsp:setProperty name="myName" property="someProperty" value="someValue"/>
不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行

第二种:

1
2
3
4
5
用法:
<jsp:usebean id="myName">
<jsp:setProperty name="myName" property="someProperty" value="someValue .../>
</jsp:usebean>
jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。

name和property是必须的,前者选择要用哪个bean,一般是usebean的id属性,后者表示是要设置的变量名。
jsp:getProperty获取Bean的属性的值并将之转化为一个字符串,将其插入到页面中

1
<jsp:getProperty name="someName" property="someProperty">

基本动作元素(6只)
jsp:include 包含静态和动态的文件。 插入文件的时间是在页面被请求的时候。

1
<jsp:include file="xx.jsp" flush="true">

jsp:forward 把请求转到另外的页面。

1
<jsp:forward page="相对 URL 地址" />

jsp:plugin用来在JSP中嵌入Java插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<jsp:plugin>  
type="bean | applet"
name="Applet名称"
code="java类名"
codebase="Java类所在目录"
align="对齐方式"
height="高度"
width="宽度"
hspace="水平间距"
vspace="垂直间距"
archive="预先加载的类列表"
jreversion="JRE版本"
iepluginurl="URL"
nspluginurl="URL"
</jsp:plugin>

jsp:paramjsp:params

1
2
3
4
5
<jsp:plugin>  
<jsp:params>
<jsp:param name="参数名" value="参数值" />
</jsp:params>
</jsp:plugin>

jsp:fallback用来指定当浏览器不支持或者无法启动Bean或Applet时,在页面上打印输出错误提示信息。

1
2
3
4
5
<jsp:plugin>  
<jsp:fallback>
错误信息
</jsp:fallback>
</jsp:plugin>

与JSP Document相关(6只)
jsp:root
jsp:declaration
jsp:scriptlet
jsp:expression
jsp:text
jsp:output

与动态生成XML标签有关(3只)
jsp:attribute
jsp:body
jsp:element

与Tag File有关(2只)
jsp:invoke
jsp:dobody

#0x03 jsp内置对象

request对象
来自客户端的请求,经过servlet容器处理后,由request对象进行封装
javax.servlet.http.HttpServletRequest类的实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
request.getParameter(key)        获取表单提交的相应key的值      (<% String name = request.getParameter("name");>)
request.getParameterValue(key) 获取表单提交的一组数据 (<% String[] names = request.getParameterValue("names");>)
request.getHeaderNames() 获取http请求头的信息
request.setAttribute(key.object) 设置请求对象的属性
request.getAttribute(key) 获取请求对象的属性
request.setCharacterEncoding("UTF-8") 对请求数据重新编码(解决post中文乱码问题,get不行)
request.getContentType() 获取请求体的MIME类型
request.getProtocol() 获取协议类型和版本类型
request.getServerName() 获取服务器主机名
request.getServerPort() 获取服务器端口号
request.getContentLength() 获取请求文件的长度
request.getRemoteAddr() 获取请求体的IP地址(xff不能伪装)
request.getRealPath("request.jsp") 获取请求文件的绝对路径
request.getContextPath() 获取请求的上下文路径

response对象
封装了JSP响应,将响应发送回客户端
javax.servlet.http.HttpServletResponse类的实例

1
2
3
4
response.setContentType("text/plain;charset=utf-8")         设置响应的MIME类型
request.getRequestDispatcher("request.jsp").forward(request, response) 请求转发
response.sendRedirect("xx.jsp") 页面跳转,与之前的forward不同,这个是跳转
response.setCharaterEncoding("gbk") 设置响应的编码

session对象
表示一个会话,用来保存用户的信息,以便跟踪用户,存在服务端,直到关闭网站或者注销账户,可以在浏览器浏览器之间切换,共享数据
作用域:session
javax.servlet.http.HttpSession类的实例

1
2
3
4
5
6
7
session.getid()        获取session的id号,该id号由tomcat自动分配
session.isnew() 判断session是否是新建的
session.setAttribute(key.object) 往当前会话中设置属性
session.getAttribute(key) 从当前会话中得到属性
session.removeAttribute(key) 从当前会话中删除一个属性
session.setMaxInactiveInterval(1000*60*30) 设置当前会话的失效时间,tomcat默认30分钟
session.invalidate() 初始化一个会话,删除会话

cookie对象
cookie对象不是jsp的内置对象,需要构造,不过因为跟session很相似,就放在这边说了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Cookie[] cookies = request.getCookie();
String getName() 返回cookie的名字
String getValue() 返回cookie的值
接受Cookie
Cookie[] cookies = request.getCookie();
for (int i = 0; i <= cookies.length; i++){
if ("username".equals(cookies[i].getName()))
username = cookies[i].getValue();
if ("password".equals(cookies[i].getName()))
password = cookies[i].getValue();
}
创建Cookie
Cookie nameCookie = new Cookie("username", name);
nameCookie.setMaxAge(60*60*24*30); 设置cookie生存周期
Cookie pwdCookie = new Cookie("password", pwd);
pwdCookie.setMaxAge(60*60*24*30);
response.addCookie(nameCookie); 添加cookie
response.addCookie(pwdCookie);

application对象
用户间数据的共享,全局变量
javax.servlet.ServletContext类的实例,代表着整个jsp页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
application.setAttribute(key.object) 
application.getAttribute(key)
application.removeAttribute(key)
实例:
<%
application.setAttribute("city", "北京");
application.setAttribute("postcode", "10000");
application.setAttribute("email", "123@123.com");
%>
所在城市:<%= application.getAttribute("city")%><br />
application的属性有:
<%
Enumeration attributes = applicaiton.getAttributeNames();
while(attribute.hasMoreElements())
out.println(attributes.nextElement()+"&nbsp;&nbsp;");
%>
<br />
JSP(SERVLET)引擎名以及版本号:<%= application.getServerInfo()%>

config对象
javax.servlet.ServletConfig类的实例,这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

page对象 这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。page 对象就是this对象的同义词。

page context对象

exception对象

out对象
javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
作用域:page,也就是说每个page都有一个out对象

1
2
3
4
out.print()         输出
out.println() 输出后换行
out.flush() 刷新输出流
out.write() 输出

0x03 javabeans

javabeans就是符合某种特性的java类,减少代码重复

创建javabeans实例
放到src的com.po包中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.po;
/**
* 用户类
**/
public class Users(){
private String username;
Private String password;
//保留次构造方法
public User(){
}
public String getUsername(){
return username;
}
public setUsername(String username){
this.username = username;
}
public String getPassword(){
return password;
}
public setPassword(password){
this.password = password;
}
}

使用javabeans实例

1
2
3
4
5
6
7
8
<%@page import="com.po.Users"%>
<%
Users user = new Users();
user.setUsername("admin");
user.setPassword("123456");
%>
用户名:<%= user.getUsername()%>
密码:<%= user.getPassword()%>

本文标题:jsp学习笔记

文章作者:Pino-HD

发布时间:2018年05月30日 - 17:05

最后更新:2018年05月30日 - 18:05

原始链接:https://pino-hd.github.io/2018/05/30/jsp学习笔记/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!