JSP基本语法(六)
1.response对象:主要是对客户端的请求进行回应,把web服务器处理后的结果返回给客户端。
1.1定时刷新页面
*.jsp页面:
(1)采用形式:response.setHeader("refresh","2");
<%! //定义全局变量 int count = 0; %> <% response.setHeader("refresh","3");//定时3s刷新一次页面 %> <h2>已经访问了<%=count++ %> 次了!</h2>
(2)多少秒后自动跳转(属于客户端跳转)到首页
方式1:response.setHeader("refresh","3;URL=xxx");
<body> <h2>3秒后跳转到首页,如果没有跳转请按<a href="index.jsp">这里</a></h2> <% response.setHeader("refresh","3;URL=index.jsp"); //response.setHeader("refresh","0;URL=index.jsp"); //无条件立刻跳转 %> </body>
方式2:使用<meta http-equiv="refresh" content="3;url=xxx.jsp">
<head> <meta http-equiv="refresh" content="3;url=index.jsp"> </head> <body> <h2>3秒后跳转到首页,如果没有跳转请按<a href="index.jsp">这里</a></h2>】 </body>
当一个页面没有JSP代码而又想立即执行跳转,则使用方式2设置跳转头信息操作!
方式3:页面跳转,使用sendRedirect()(属于客户端跳转)
<% response.sendRedirect("index.jsp"); %>
<jsp:forward page="index.jsp"></jsp:forward> 与response.sendRedirect("index.jsp")的区别
1.<jsp:forward>属于服务器端跳转,地址栏不会变化;response.sendRedirect()属于客户端跳转,地址栏是跳转之后的页面地址。
2.在使用request属性时,只有在服务器端跳转能够获取到属性值,在客户端跳转之后获取不到。
3.服务器端跳转在执行到跳转语句后立即跳转;客户端跳转是在整个页面执行完后再跳转的。
开发中,服务器端跳转使用的多些。
运行结果:(下面的代码不会执行)
==============forward跳转之前==============
运行结果:
=============response跳转之前=====================
=============response跳转之后=====================
3.Cookie操作
使用Cookie保存信息可以减少客户端的部分操作(如:保存账号密码等操作).
javax.servlet.http.Cookie类
所有的Cookie是由服务器端设置到客户端中的,向客户端添加cookie时需使用response.addCookie()方法:
设置Cookie:
<% Cookie c1 = new Cookie("mxzer","m1"); //1.创建新的Cookie Cookie c2 = new Cookie("mxzer","m2"); c1.setMaxAge(60); //2.设置cookie的保存时间1分钟 c2.setMaxAge(1800); //设置cookie的保存时间30分钟 response.addCookie(c1); //3.向客户端添加cookie response.addCookie(c2); //向客户端添加cookie %> 获取Cookie: <% Cookie ck[] = request.getCookies(); //获取说呀的cookie for(int i = 0; i < ck.length; i++){ %> <h3><%=ck[i].getName()%>----><%=ck[i].getValue()%></h3> <% } %>
JSESSIONID:12342423432SDSADS34R5DFSFD23是系统自动设置的,服务器为了区分每一个客户端,服务器端或自动设置一个JSESSIONID,表示用户的唯一身份标识。
一般一个客户端最多可设置300个Cookie,数据量太大事无法使用Cookie的。
通过头信息来设置客户端Cookie(使用的少): response.setHeader("Set-Cookie", "https://i.cnblogs.com/mxzer");
4.session对象
实际开发中,主要使用session进行用户的登录、注销等操作.
4.1重新启动服务器时,sessionId会变化。可以通过序列化的方式保存session,及时重新启动服务器,通过反序列化可以恢复之前的session信息。
<% String id = session.getId(); //该id与上面的JSESSIONID一样,因为sesssion使用的是Cookie机制! %>
4.2登录、注销操作
方式1:session操作
<% //输入用户名、密码 String name = request.getParameter("username"); String pwd = request.getParameter("password"); //进行用户名、密码验证 if(!(name==null||"".equals(name) || pwd==null||"".equals(pwd))){ if("mxzer".equals(name) && "123".equals(pwd)){ response.setHeader("refresh", "2;URL=welcome.jsp"); session.setAttribute("uname", name); //登录名放在session中 } } %> //获取操作 <% if(session.getAttribute("uname" != null)){ %> <h3>欢迎<%=session.getAttribute("uname")%>,登录,<a href="logout.jsp">注销</a></h3> <% } %> //退出登录 response.setHeader("refresh", "2;URL=logout.jsp"); session.invalidate(); //注销
方式2:会话跟踪技术
①通过session通过的方法保存
②使用Cookie保存信息: 由于客户端禁用Cookie造成的问题不是程序开发考虑的范畴。
③通过表单的隐藏域保存信息
④通过地址重写的方式保存信息:不安全a.jsp?JSESSIONID=2342343DFFSD345DFGF34F43
<% //用户第一次连接服务器时,服务器记录session的创建时间 long start = session.getCreationTime(); long end = session.getLastAccessedTime();//获取最后一次的操作时间 %>
5.application对象
application对象是javax.servlet.ServletContext接口的实例化对象
String path = application.getRealPath("/"); String path = this.getServletContext().getRealPath("/");// 推荐使用代替application %> <h3>真实路径<%=path%></h3>
例如:Tomcat下配置的,docBase为真实路径
应用例子:文件的存、取操作、网站访问量的统计等
5.web.xml
WEB-INFO:字母全部大写、安全性最高!
web.xml配置:
<servlet>
<servlet-name>mxz</servlet-name>
<jsp-file>/WEB-INFO/hello.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>mxz</servlet-name>
<url-pattern>/hello.do</url-pattern>
</servlet-mapping>
解释:把/WEB-INFO/hello.jsp映射成/hello.do,用户只有输入/hello.do就会自动根据<servlet-mapping>节点中配置的<servlet-name>找到对应的<servlet>节点,并找到<jsp-file>所指定的真实路径执行程序。
<servlet-name>只在web.xml内部起作用,且不能重复!
config对象是javax.servlet.ServletConfig接口的实例化对象,获取web.xml中初始化的配置信息
<servlet>
<servlet-name>mxz</servlet-name>
<jsp-file>/WEB-INFO/hello.jsp</jsp-file>
<init-param>
<param-name>name</param-name>
<param-value>mxzer</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>20</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mxz</servlet-name>
<url-pattern>/hello.do</url-pattern>
</servlet-mapping>
取值:必须通过映射路径才能获取初始化参数!
<% //从web.xml中获取初始化配置信息 String name = (String)config.getInitParameter("name"); String age = (String)config.getInitParameter("age"); %>