1.jsp 9大内置对象
request 请求
response 响应
pageContext; 页面上下文
session; 会话管理session
application; 应用
config; 配置
out ; 输出
page ; 页面 this
exception;异常
特点:
内置对象由Web容器自动载入,不需要实例化;
内置对象通过Web容器来实现和管理;
在所有的JSP页面中,直接调用内置对象都是合法的。
1)out对象
out对象类型为javax.servlet.jsp.JspWriter,
与HttpServletResponse接口的getWriter()方法获得的PrintWriter对象功能相同,
并都由java.io.Writer类继承而来。
//输出
out.print() 输出任意数据类型
out.println() 带有换行
响应给客户端的效果是一样的。
//刷新
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" autoFlush="false"%>
<% out.flush();%>
2)request
request对象的类型为javax.servlet.http.HttpServletRequest,与Servlet中的请求对象为同一对象。
request对象的作用域为一次request请求。
//常用方法
a.获取请求参数
String getParameter(String name)
String[]getParameterValues()
Enumeration getParameterNames()
Map<String,String[]> getParameterMap() 键值对
b.属性操作
setAttribute(String name,Object value)
getAttribute(String name)
removeAttribute(String name)
c.请求头
getHeader(String name)
Enumeration getHeaderNames()
Cookie[] getCookie()
getMethod()请求方式 get post
getContextPath()上下文路径( /应用 或者叫 /工程名)
getRequestURI()请求url地址 (/工程名/../文件 lesson5/my/login.jsp)
getProtocol()http协议版本 htpp1.1
getRemoteAddr()用户ip地址
getRemoteHost()用户ip地址、主机名
getRemotePort()用户端口号
getRemoteUser()用户名
d.乱码
setCharacterEncoding() post请求的编码
e.请求转发
getRequestDispatcher().forword()
f.session 相关
HttpSession getSession()
3)response 响应
javax.servlet.http.HttpServletResponse,与Servlet中的响应对象为同一对象
a.重定向
sendRedirect()
b.响应头
addCookie()设置cookie
setHeader(String name,String value) 修改和添加
addHeader(String name,String value)添加
响应码
sendError(int code,String msg)
<% response.sendError(403,"哈哈哈哈,错啦,害不害怕吧????"); %>
c.编码
response.setContentType("text/html;charset=utf-8")
response.setCharacterEncoding("utf8")
//练习
==login.jsp
<div style="color:red">
<%
String msg=(String)request.getAttribute("msg");
if(msg!=null){
out.print(msg);
}
%>
</div>
<form action="loginValidate.jsp" method="post">
用户名<input type="text" name="username" >
密码<input type="text" name="psw" >
<input type="submit" value="登录">
</form>
===loginValidate.jsp
用户验证页-----
<%
request.setCharacterEncoding("utf8");
//用户名和密码为空时候,跳转到login.jsp,并且提示信息
String uname=request.getParameter("username");
String psw=request.getParameter("psw");
out.print(uname+","+psw);
if(uname==""||psw==""){
//设置属性
request.setAttribute("msg", "用户名或者密码不能为空");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else if(psw.length()<6 ||psw.length()>12){
request.setAttribute("msg", "密码长度是6-12");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{
response.sendRedirect("testOut.jsp");
}
%>
4)session对象
作用域:打开浏览器到关闭浏览器并且session不失效
HTTPSession session = pageContext.getSession();
a.设置session
setAttribute(String name,Obejct value)
setMaxInactiveInterval(int second) 过期时间 // 默认30分钟
b.获取session值
getAttribute(String name)
getId() sessionid
c.清除session
removeAttribute(String name)
invalidate()设置过期,取消,清除session
d.判断
boolean isNew() session 为新
===login成功时:
//存放session
session.setAttribute("user", uname);
//重定向
response.sendRedirect("main.jsp");
===main.jsp主页面:
<%="欢迎"+session.getAttribute("user")%>
<a href="logOut.jsp">退出</a>
===logOut.jsp退出
<% //清除session
//session.removeAttribute("user");
session.invalidate();
%>
<jsp:forward page="login.jsp"></jsp:forward>
5)application对象
在容器启动时实例化,在容器关闭时销毁。作用域为整个Web容器的生命周期。
实现了javax.servlet.ServletContext接口
getContextPath()应用
getContext(String path)应用
getRealPath()绝对路径
getServletInfo()web容器名称与版本
log(String msg)写入日志文件
getMiMEType()
<%="servletr容器名称与版本"+application.getServerInfo() %>
<%=application.getContextPath() %><br>
<%=application.getRealPath("login.jsp") %><br>
6)pageContext对象
页面上下文对象,表示当前页面运行环境,用以获取当前JSP页面的相关信息
可以获取其他的内置对象
pageContext.getRequest()
pageContext.getResponse()
pageContext.getOut()
pageContext.getSession()
pageContext.getServletConfig()
//例如
<%=request.getParameter("name") %>
等价于
<%=pageContext.getRequest().getParameter("name") %>
作用域范围:
PAGE_SCOPE = 1代表page范围;
REQUEST_SCOPE = 2代表request范围;
SESSION_SCOPE = 3代表session范围;
APPLICATION_SCOPE = 4代表application 范围。
<% pageContext.setAttribute("user", "管理员",pageContext.APPLICATION_SCOPE ); %>
<%=pageContext.getAttribute("user",pageContext.APPLICATION_SCOPE )%>
7)config对象,page对象(了解)
config对象
即页面配置对象,表示当前JSP页面翻译后的Servlet的ServletConfig对象,存放着一些初始的数据结构。
config对象实现于java.servlet.ServletConfig接口。
config对象和page对象一样都很少被用到(了解即可)
page对象
即this,代表JSP本身,更准确地说它代表JSP被翻译后的Servlet,因此它可以调用Servlet类所定义的方法。page对象的类型为javax.servlet.jsp.HttpJspPage,在实际应用中,page对象很少在JSP中使用(了解即可)。
web.xml
<servlet>
<servlet-name>hello</servlet-name>
<jsp-file>/conf.jsp</jsp-file>
<init-param>
<param-name>username</param-name>
<param-value>张三</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/conf.jsp</url-pattern>
</servlet-mapping>
conf.jsp
<%=config.getInitParameter("username") %> //张三
以下的三个对象是同一个
<%=pageContext.getPage() %>
<%=page %>
<%=this %>
获取servlet引擎
<%=((HttpJspPage)pageContext.getPage()).getServletInfo() %>
<%=((HttpJspPage)page).getServletInfo() %>
<%=this.getServletInfo() %>
//练习: 分别用request,session,application,pageContext四个对象,实现网站点击量计数
<%
int rc=0,sc=0,ac=0,pc=0;
//request:再次请求无法获取历史访问量
if(request.getAttribute("rc")!=null){
rc=Integer.parseInt((String)request.getAttribute("rc"));
rc++;
out.print("欢迎再次访问");
}else{
rc=1;
out.print("欢迎");
}
request.setAttribute("rc", rc);
//session:关闭浏览器,访问量会从0开始
if(session.getAttribute("sc")!=null){
String s=session.getAttribute("sc").toString();
sc=Integer.parseInt(s);
sc++;
out.print("欢迎再次访问");
}else{
sc=1;
out.print("欢迎");
}
session.setAttribute("sc", sc);
//application:关闭服务,访问量符合要求
if(application.getAttribute("ac")!=null){
String s=application.getAttribute("ac").toString();
ac=Integer.parseInt(s);
ac++;
out.print("欢迎再次访问");
}else{
ac=1;
out.print("欢迎");
}
application.setAttribute("ac", ac);
//pageContext:关闭服务,访问量符合要求
if(pageContext.getAttribute("pc",pageContext.APPLICATION_SCOPE)!=null){
String s=pageContext.getAttribute("pc",pageContext.APPLICATION_SCOPE).toString();
pc=Integer.parseInt(s);
pc++;
out.print("欢迎再次访问");
}else{
pc=1;
out.print("欢迎");
}
pageContext.setAttribute("pc", pc,pageContext.APPLICATION_SCOPE);
%>
<%="request访问量"+rc %><br/>
<%="session访问量"+sc%><br/>
<%="application访问量"+ac %><br/>
<%="pageContext访问量"+pc %><br/>
【结论】统计网站点击量只能用application与pageContext对象
2.JSP的四种作用域
pageContext page域 当前页面中
request request域 :当前请求
session session域:当前会话,关闭浏览器
application context域 当前应用,关闭服务器
都有属性设置与获取的方法
setAttribute("name",Object) 保存数据
getAttribute("name") 获取数据
pageContext重载了以上两个方法
setAttribute("name",Object,scope)
getAttribute("name",scope)
3.javabean 组件
HTML代码与Java代码分离,在jsp中由javabean处理业务
JSP提供的访问JavaBean 的3个动作元素
<jsp:useBean>:创建或查找JavaBean实例对象
<jsp:setProperty>:设置JavaBean对象的属性值
<jsp:getProperty>:获取JavaBean对象的属性值
<%
UserInfo user=new UserInfo();
user.setUsername("张三");
user.setPassword("123");
out.print(user.getUsername()+","+user.getPassword());
%> 等价于
<jsp:useBean id="user" class="com.edu.entity.UserInfo"></jsp:useBean>
<jsp:setProperty property="username" name="user" value="张三"/>
<jsp:setProperty property="password" name="user" value="123"/>
<jsp:getProperty property="username" name="user"/>
<jsp:getProperty property="password" name="user"/>