一、scriptlet标签:

通过scriptlet标签我们可以可以在jsp理嵌入java代码;

第一种:<%! %>    可以在里面定义全局变量、方法、类;

第二种:<% %>    可以在里面定义局部变量、编写语句;

第三种:<%= %>    在里面输出一个变量或者一个具体内容;

二、jsp包含指令:

<%@ include file="..." %>   静态包含   先包含,后编译处理

<jsp:include page="...">    动态包含   先编译处理,后包含

以后开发用动态包含

三、jsp跳转指令:

<jsp:forward>

  <jsp:param value="" name="" />

</jsp:forward>

服务器内部跳转,可带参数;

例如:

 <jsp:forward page="target.jsp">
<jsp:param value="java" name="username"/>
<jsp:param value="123456" name="password"/>
</jsp:forward> target.jsp页面:
<body>
服务器内部跳转后的页面<br>
usename: <%= request.getParameter("username")%>
password: <%= request.getParameter("password")%>
</body>   还有一种跳转方式:
   <% response.sendRedirect("target.jsp")%>
<jsp:forward /> 和 response.sendRedirect()的区别:
  • <jsp:forward />:访问第一个界面,第一个界面调转到第二个界面,第二个界面把内容传送到客户端,客户端浏览器url显示的仍然是第一个界面的名字;跳转过程是发生在服务器端的;客户端感知不到;客户端发起的一个请求,这个请求无声无息的被转到另外一个界面进行处理;这两个界面拿到的request还是同样的、原来的那个request;拿到的request对象是同一个对象。因为就发起了一次请求;
  • response.sendRedirect:如果说访问一个界面,这个界面respone.sendRedirect到另外一个界面的话,执行过程是:你访问我这个界面的话,请你重新访问另外一个界面;他会告诉客户端请你在url里面输入另外一个界面的地址,另外一个界面会将内容反馈给你,和客户端有一个来回往复的过程;使用的是不同的request;

四、jsp九大内置对象及四大作用域概述:

pageContext:request,response:session:application:config:out:page:exception
jsp四大作用域:
1.page:只在一个页面中保存数据,javax.servlet.jsp.PageContext(抽象类)
 <body>
<%
// 设置两个page范围的数据 key-> value
pageContext.setAttribute("name","page王二小");
pageContext.setAttribute("age",12);
%>
<%
// 取值
String name=(String)pageContext.getAttribute("name");
int age=(Integer)pageContext.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>

2、request范围,只在一个请求中保存数据,javax.servlet.http.HttpServletRequest(接口)

 <body>
<%
// 设置两个request范围的数据 key-> value
request.setAttribute("name","request王二小");
request.setAttribute("age",12);
%>
<jsp:forward page="requestTarget.jsp"></jsp:forward>
</body> requestTarget.jsp页面:
<body>
<%
// 取值
String name=(String)request.getAttribute("name");
int age=(Integer)request.getAttribute("age");
// 获取头信息
Enumeration enu=request.getHeaderNames();
while(enu.hasMoreElements()){
String headerName=(String)enu.nextElement();
String headerValue=request.getHeader(headerName);
%>
<h4><%=headerName %>&nbsp;<%=headerValue %></h4>
<%
}
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>

3.session: 再一次会话范围中保存数据,仅供单个浏览器使用,javax.servlet.http.HttpSession(接口)

 <body>
<%
// 设置两个session范围的数据 key-> value
session.setAttribute("name","session王二小");
session.setAttribute("age",12);
%>
<h1>session值设置完毕!</h1>
</body> sessionTarge.jsp:
<body>
<%
// 取值
String name=(String)session.getAttribute("name");
int age=(Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>

4.application: 在整个服务器上保存数据,所有用户共享,javax.servlet.ServletContext接口

 <body>
<%
// 设置两个application范围的数据 key-> value
application.setAttribute("name","application王二小");
application.setAttribute("age",12);
%>
<h1>application值设置完毕!</h1>
</body> applicationTarget.jsp
<body>
<%
// 取值
String name=(String)application.getAttribute("name");
int age=(Integer)application.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>

五、response对象:

response内置对象和request内置对象是对应的;response用于响应客户请求,向客户端输出信息;

javax.servlet.HttpServletResponse接口;

1.自动刷新应用;

2.页面重定向,客户端跳转;

3.操作cookie应用;

自动刷新应用:

 <body>
<%
// 每隔一秒刷新一次页面
response.setHeader("refresh","1");
// 获取当前时间
Date myDate=new Date();
%>
当前时间:<%= myDate.toLocaleString() %>
</body>

操作cookie,一个简单的登陆页面记录密码:

登陆页:response03.jsp

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function resetValue(){
document.getElementById("userName").value="";
document.getElementById("pwd").value="";
}
</script>
<%
String userName=null;
String pwd=null;
Cookie[] cookies=request.getCookies();
for(int i=0;cookies!=null &&i<cookies.length;i++){
if(cookies[i].getName().equals("userNameAndPwd")){
userName=cookies[i].getValue().split("-")[0];
pwd=cookies[i].getValue().split("-")[1];
}
} if(userName==null){
userName="";
} if(pwd==null){
pwd="";
}
%>
</head>
<body> <form action="userLogin.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="pwd" name="pwd" value="<%=pwd %>" /></td>
</tr>
<tr>
<td>记住密码:</td>
<td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
</tr>
<tr>
<td><input type="submit" value="登录"/></td>
<td><input type="button" value="重置" onclick="resetValue()"/></td>
</tr>
</table>
</form>
</body>
</html>

userLogin.jsp:

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
String userName=request.getParameter("userName"); // 获取用户名
String pwd=request.getParameter("pwd"); // 获取密码
String remember=request.getParameter("remember"); // 获取记住密码 if("remember-me".equals(remember)){
Cookie userNameAndPwd=new Cookie("userNameAndPwd",userName+"-"+pwd);
userNameAndPwd.setMaxAge(1*60*60*24*7); // cookie记录一个星期
response.addCookie(userNameAndPwd); // 保存cookie
System.out.println("设置Cookie成功");
}
response.sendRedirect("response03.jsp");
%>
</body>
</html>

六、out对象:

out内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区,所以out内置对象的方法是向客户端输出数据和管理缓冲区,底层javax.servlet.jsp.JspWriter抽象类;

 <body>
<%
out.println("<h1>");
out.println("Hello Jsp Servlet");
out.println("</h1>");
%>
</body> <body>
<%
int totalbuffer=out.getBufferSize(); // 获取总共缓冲区的大小
int available=out.getRemaining(); // 获取未使用的缓冲区的大小
int user=totalbuffer-available; // 获取使用的缓冲区大小
out.println("总共缓冲区的大小:"+totalbuffer);
out.println("未使用的缓冲区的大小:"+available);
out.println("使用的缓冲区大小:"+user);
%>

七、Config对象

Config内置对象是JSP页面通过jsp容器进行初始化时被传递的对象;javax.servlet.ServletConfig。在Servlet初始化的时候,JSP引擎通过config向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息;

比如web.xml中配置servlet:

 <servlet>
<servlet-name>init</servlet-name>
<jsp-file>/sysInit.jsp</jsp-file>
<init-param>
<param-name>jdbcName</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>dbUrl</param-name>
<param-value>jdbc:mysql://localhost:3306/db_xx</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>init</servlet-name>
<url-pattern>/init</url-pattern>
</servlet-mapping>

sysInit.jsp中获取初始化参数:

 <body>
<%
String jdbcName=config.getInitParameter("jdbcName");
String dbUrl=config.getInitParameter("dbUrl");
%>
<h1>驱动名称:<%=jdbcName %></h1>
<h1>连接地址:<%=dbUrl %></h1>
</body>

八、exception对象:

Exception内置对象用来处理JSP文件在执行时发生的所有异常,它是java.lang.Throwable类的一个对象。

exception01.jsp:

 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page errorPage="error.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
int a=1;
int b=0;
out.println(a/b);
%>
</body>
</html>

error.jsp:

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
if(exception!=null){
out.println("程序错误信息:");
out.println(exception.getMessage());
}
%>
</body>
</html>

访问exception01.jsp页面展示:

九、pageContext对象:

pageContext对象,相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext内置对象由jsp容器创建并初始化,pageContext对象提供了对jsp页面所有对象及控件的访问。

 <body>
<%
pageContext.setAttribute("name0", "pageInfo");
request.setAttribute("name1", "requestInfo");
session.setAttribute("name2", "sessionInfo");
application.setAttribute("name3", "applicationInfo"); out.println("使用pageContext<br/>");
out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>");
out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>");
out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>");
out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>");
%>
</body>

最新文章

  1. IIS性能相关的配置、命令
  2. codeforces 558B. Amr and The Large Array 解题报告
  3. hive :MetaException(message:Version information not found in metastore. )
  4. yum添加网易和搜狐源
  5. PSI在windows server2008服务器上的安装方法
  6. C#语言的Image和byte数组的互相转换
  7. 数据库监控[Z]
  8. 2014在百度之星资格赛的第二个问题Disk Schedule
  9. js判断浏览器类型(手机和电脑终端)
  10. Java进阶(四)Java反射TypeToken解决泛型运行时类型擦除问题
  11. QT之Http请求
  12. 数据库 ACID
  13. bzoj 4621: Tc605 动态规划
  14. [P3613]睡觉困难综合征
  15. docker push到私有仓库
  16. 企业项目构建学习(一)maven
  17. Windows 7 With Sp1 简体中文旗舰版
  18. 基于 Docker 的现代软件供应链
  19. Linux学习之常用系统工作命令(一)
  20. 悲催的IE6 七宗罪大吐槽(带解决方法)第二部分

热门文章

  1. 使用Messenger 从Activity发送数据到service 通过后台计算结果Log输出;
  2. npm install mysql --save-dev
  3. python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA
  4. L212
  5. 多重条件判断SQL:用于用户名称,密码,权限的检测和判断
  6. 1.1.4 A+B for Input-Output Practice (V)
  7. Android Kernel save defalut config
  8. pip模块的使用
  9. /proc/sys/vm/drop_caches 清理缓存
  10. ehci及其伴随ohci主机控制器驱动分析