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");
%> 
posted @ 2017-02-22 10:15  Mxzer.Zhang  阅读(190)  评论(0编辑  收藏  举报