24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

JSP基础知识点(三)

2017-08-21 20:57:01 东方博宜 阅读

1jsp的作用域(缓存)

ApageContext:页面作用域,只在本页面有效

Brequest:请求作用域,在forward跳转或者include包含的情况下有效

Csession:会话作用域,只要浏览器不关闭(session不超时)的情况下有用

注意:

asession是存储在服务器端的缓存,因此不要向session中存储大量的数据,如果确认数据不需要使用了注意要清除掉!

b、不同品牌的浏览器不共享session

 

例子:

a.jsp

     <%

        //设置session超时时间(如果浏览器10秒内没有刷新动作,则session失效)

        session.setMaxInactiveInterval(10);

        session.setAttribute("username","管理员");

        out.print("session存值成功!<br />");

      %>

      <a href="b.jsp">跳转</a>

 

b.jsp

  <body>

       用户名:<%=session.getAttribute("username") %>

 

注意:清除session的值,session.removeAttribute(“参数名”);

 

Dapplication:应用作用域,只要服务器不关闭都有效

 

问题:forward跳转和重定向跳转的区别?

Aforward跳转url地址不变,request作用域有效;

B、重定向跳转url改变,request作用域无效;

 

特别注意:forward跳转由于url不改变,当我们刷新页面时,不是直接刷新的我们看到的页面,而是直接刷新的我们看到的url!因此,要注意,如果是下订单、删除数据等不能重复的操作,操作之后不能forward跳转!

 

例子:session的应用:判断用户是否登陆

原理:用户登陆成功后向session存一个值来标记该用户登陆过!

      必须登陆才能看到页面,都需要检测是否有这个值,如果有这个值表示登陆过,如果没有表示没有登陆去登陆页面!

 

图片.png

check.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%@ page import="com.baidu.login.LoginService" %>

<%

   //获取参数

   String username = request.getParameter("username");

   String pwd = request.getParameter("pwd");

   //注意:如果某个参数没有填写,此处获取到的是空字符串""

   //out.print(username + " " + pwd);

  

   //处理参数

   boolean r = LoginService.login(username,pwd);

  

   //根据处理结果跳转

   if(r == true){

      //存储session标记用户登陆成功

      session.setAttribute("username",username);

%>

   <jsp:forward page="success.jsp"></jsp:forward>

<%

   }else{

%>

  <jsp:forward page="index.jsp?m=fail"/>

<%  

   }

%>

 

success.jsp

    <div align="right">

       <a href="logout.jsp">安全退出</a>

    </div>

    <%@ include file="checkLogin.jsp" %>

           欢迎<%=session.getAttribute("username") %>登陆!<br>

 

checkLogin.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%

   //如果用户没有登陆

   if(session.getAttribute("username") == null){

%>

     <jsp:forward page="index.jsp?m=notlogin"></jsp:forward>

<%

   }

%>

 

logout.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%

   //清除session

   session.removeAttribute("username");

%>

   <jsp:forward page="index.jsp"></jsp:forward>

 

index.jsp

    <%

       //判断如果用户登陆过,则直接跳转到内页,不需要再登陆了(比如:用户登陆了,但没关闭浏览器)

       if(session.getAttribute("username") != null){

     %>

       <jsp:forward page="success.jsp"></jsp:forward>

     <% 

       }

     %>

 

    <h1>用户登陆</h1>

   

    <!-- action:表示跳转的目的地址,method:表示带参的方式,method="get"默认值表示url带参数 -->

    <!-- method="post"表示隐藏的形式带参数 -->

    <form action="check.jsp" method="post">

       <p>

                        用户名:<input type="text" name="username"/>

       </p>

       <p>

                        密码:<input type="password" name="pwd"/>

       </p>

       <p>

         <input type="submit" value="提交"/>

         <input type="reset" value="重置"/>

       </p>

    </form>

   

    <span style="color:#F00">

      <%

         String m = request.getParameter("m");//获取提示信息

         if(m != null){

            if(m.equals("fail")){

                out.print("用户名或密码有误,请重新登陆!");

            }else if(m.equals("notlogin")){

                out.print("您尚未登陆,请先登陆再访问!");

            }

         }

       %>

    </span>

 

2、页面之间的参数传递方式

A、表单

Index.jsp

    <form action="check.jsp?port=8080&key=123456" method="post">

       <p>

                        用户名:<input type="text" name="username"/>

       </p>

       <p>

                        密码:<input type="password" name="pwd"/>

       </p>

       <p>

         <!-- 隐藏域带参数 -->

         <input type="hidden" name="myage" value="28"/>

         <input type="submit" value="提交"/>

         <input type="reset" value="重置"/>

       </p>

    </form>

 

check.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

用户名:<%=request.getParameter("username") %>

密码:<%=request.getParameter("pwd") %>

myage<%=request.getParameter("myage") %>

port<%=request.getParameter("port") %>

key<%=request.getParameter("key") %>

 

B、超链接

    <a href="check.jsp?username=zhang&pwd=123">跳转</a>

 

Cjsp:forward跳转动作

 

D、作用域

 

3、从request可以获得哪些内容

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

path=<%=path %><br />

basePath=<%=basePath %><br />

 

<%

  //包含了页面名称的详细路径

  String uri = request.getRequestURI();

  out.print(uri + "<br />");

 

  //获取参数的名字

  Enumeration en = request.getParameterNames();

  while(en.hasMoreElements()){

      String paramName = (String)en.nextElement();

      String value = request.getParameter(paramName);

      out.print(paramName + "=" + value + "<br />");

  }

 

  //获取参数的Map

  Map map = request.getParameterMap();

  Set set = map.keySet();

  Iterator it = set.iterator();

  while(it.hasNext()){

     String key = (String)it.next();

     String[] value = (String[])map.get(key);

     out.print(key + "=" + value[0] + "<br />");

  }

 

%>

 

 

4、如何获取checkbox的参数

String[] values = request.getParameterValues(“参数名”);

 

例子:

a.jsp

    <form action="check.jsp" method="post">

       <p>

                        语言:

          <input type="checkbox" name="langs" value="Java">Java

          <input type="checkbox" name="langs" value="PHP">PHP

          <input type="checkbox" name="langs" value="C">C

          <input type="checkbox" name="langs" value="C++">C++

       </p>

       <p>

         <input type="submit" value="提交"/>

       </p>

    </form>

 

b.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

<%

   String[] langs = request.getParameterValues("langs");

   if(langs != null){

      for(int i = 0;i < langs.length;i++){

         out.print(langs[i] + "<br />");

      }

   }else{

      out.print("您没有选择任何语言!");

   }

%>

 

5forward跳转和重定向的代码跳转

Aforward跳转(请求分发跳转)

<%

    //获取请求分发工具

    RequestDispatcher dispatcher = request.getRequestDispatcher("b.jsp");

    //跳转

    dispatcher.forward(request,response);

%>

 

                

B、重定向跳转

<%

    //重定向跳转

    response.sendRedirect("b.jsp");

%>

 


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn