Jsp的页面元素
a.脚本Scriptlet
i.
<%
局部变量,Java语句
%>
ii.
<%!
定义全局变量
%>
iii.
<%= 定义输出语句 %>
示例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
public String workName;
public void init(){
workName = "java";
}
%>
<%
String name = "lisi";
out.print("<font color='red' >hello...."+name + "<br/>");
init();
%>
<%=
"hello..."+workName
%>
</body>
</html>
结果:
b.指令
page指令
<%@ page …%>
page指定的属性
language:jsp页面使用的脚本语言
import:导入类
pageEncoding:Jsp文件自身的编码 jsp–>java
contnetType:浏览器解析jsp编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import = "java.util.Date"%>
c.注释
<%-- 注释内容 --%>
d.JSP的九大内置对象
(自带的,不需要new就可以使用的内置对象)
1、out:输出对象,向客户端输出内容
2、request:请求对象;存储:客户端向服务端发送的请求信息
request对象常见的方法
String getParameter(String name):根据请求的字段名key,返回字段值value
String [] getParameterValues(String name):根据请求的字段名key,返回多个字段值value
void setCharacterEncoding("utf-8"):设置POST请求的编码格式
getRequestDispatcher("b.jsp").forward(request,response):请求转发 的方式跳转页面A->B
ServletContext getServletContext():获取项目的ServletContext对象
**两种请求方式:**
get和post 区别
get:method=get 和地址栏,超链接请求方式,都属于get请求方式
a. get方式 在地址栏显示请求信息 (但是地址栏能够容纳的信息有限 4-5KB);post不会显 示
b. 文件上传操作,必须post
推荐使用post
get和post请求编码设置
get: 1.可以对每一个变量设置请求编码
new String(name.getBytes("iso-8859-1"),"utf-8")
2.也可以在tomcat的server.xml的配置信息做修改
<Connector connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
post:
void setCharacterEncoding("utf-8"):设置POST请求的编码格式
小demo实例
parameter.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<from action = "show.jsp">
姓名 :<input type="text" name="name"/><br/>
性别 :<input type="text" name="grand"/><br/>
用户名:<input type="text" name="uName"/><br/>
密码 :<input type="password" name ="uPassword"/><br/>
年龄 :<input type="text" name="uAge"/><br/>
爱好 :<br/>
<input type = "checkbox" name="uhobbies" value="足球"/>足球、
<input type = "checkbox" name="uhobbies" value="篮球"/>篮球、
<input type = "checkbox" name="uhobbies" value="乒乓球"/>乒乓球、
<input type = "checkbox" name="uhobbies" value="艾尔伯斯球"/>艾尔伯斯球、
<input type = "checkbox" name="uhobbies" value="飞机球"/>飞机球<br/>
<input type= "submit" value="注册">
</from>
</body>
</html>
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//设置编码
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String grand = request.getParameter("grand");
String uName = request.getParameter("uName");
String uPassword = request.getParameter("uPassword");
String uAge = request.getParameter("uAge");
String [] hobbies = request.getParameterValues("uhobbies");
%>
注册成功,信息如下:<br/>
姓名:<%=name %><br/>
性别:<%=grand %><br/>
用户名:<%=uName %><br/>
密码:<%=uPassword %><br/>
年龄:<%=uAge %><br/>
爱好:<br/>
<%
if(hobbies != null){
for(String ho: hobbies){
out.print(ho+" ");
}
}
%>
</body>
</html>
3、response:相应对象
提供的方法:
void addCookie(Cookie cookie):服务端向客户端增加cookie对象
void sendRediret(String location) throws IOException:页面跳转的一种方式
void setContentType(String type):设置服务端的响应编码(设置服务端的contentType类型)
请求转发 重定向
地址栏是否改变 不变 改变
是否保留第一次请求时的数据 保留 不保留
请求的次数 1 2
示例:login.jsp -> check.jsp ->success.jsp
4.session会话
4.1、Cookie:客户端,不是内置对象
Cookie是由服务端生成的,再发送给客户端保存
相当于本地缓存的作用
提高了访问服务端的效率,但是安全性较差
Cookie:name=value
包路径:javax.servlet.http.Cookie
public Cookie(String name,String value)
String getName():获取name
String getValue():获取value
void setMaxAge(int expiry):设置cookie的最大有效期
服务端准备给客户端:
response.addCookie(Cookie cookie)
页面跳转(转发,重定向)
客户端获取cookie:
request.getCookies():不能获取某一个对象,只能一次获取全部的cookie,遍历取出自己想要的
4.2、session:会话,存在服务端
实现机制:
第一次客户请求时,产生一个sessionid并复制给cookie的jsessionid,然后发给客户端
一次会话:
a.浏览网站:开始和关闭
b.购物:浏览、付款、退出
c.电子邮件:浏览、写邮件、退出
客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的信息);
并且每个session对象,都会有一个唯一的sessionid(用于区分其他session);
服务端由会话阐释一个cookie,并且,改cookie的name =JESSIONID,value =服务端sessionID的值;
然后服务端会在相应客户端的同时 将改cookie发送给客户端,至此客户端就有了一个cookie(JESSIONID)
因此,客户端的cookie就可以和服务端的session一一对应(JESSSION-sessionID)
客户端第二次或者第N次请求服务端时:服务端会先用客户端的cookie中的JESSIONID 去服务端的session中匹配sessionID
总结:客户端第一次请求,会由服务端产生一个sessionID给cookie,cookie会把这个拿到以JESSIONID名字存到客户端,当用户第二次请求时,就会查看JESSIONID是否为空,如果不为空,就不用到服务端请求新的sessionID了,也就是不用登陆了
session方法:
String getId():获取sessionId
boolean isNew():判断是否是新用户(第一次访问)
void invalidate():使session失效(退出登录,注销)
void setAttribute();
Object getAttribute();
void setMaxInactiveInterval(秒):设置最大有效 非活动时间
int getMaxInactiveInterval():获取最大有效 非活动时间
cookie和session的区别:
session cookie
保存位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String
5.pageContext:Jsp页面容器
6.appliation:全局对象
7.config:配置对象(服务器配置信息)
8.page:当前JSP页面对象(相当于java中的this)
9.exception:异常对象