极速3分快3开奖_Java匹马行天下之JavaWeb核心技术——JSP(续)

  • 时间:
  • 浏览:1
  • 来源:吉林新闻网_吉林主流媒体_吉林门户网站

十二、JSP表单避免

亲戚亲戚我们歌词 在浏览网页的之前 ,老是需要向服务器提交信息,并让后台应用程序池池避免。浏览器中使用 GET 和 POST 辦法 向服务器提交数据。

GET 辦法

GET辦法 将请求的编码信息加进在网址里边,网址与编码信息通过"?"号分隔。如下所示:

http://www.runoob.com/hello?key1=value1&key2=value2

GET辦法 是浏览器默认传递参数的辦法 ,因此 敏感信息,如密码等建议不使用GET辦法 。

用get时,传输数据的大小有限制 (注意也有参数的个数有限制),最大为1024字节。

POST 辦法

因此 敏感信息,如密码等亲戚亲戚我们歌词 都可以 通过POST辦法 传递,POST提交数据是隐式的。

POST提交数据是不可见的,GET是通过在url里边传递的(都可以 看一下你浏览器的地址栏)。

JSP使用getParameter()来获得传递的参数,getInputStream()辦法 用来避免客户端的二进制数据流的请求。

JSP 读取表单数据

  • getParameter(): 使用 request.getParameter() 辦法 来获取表单参数的值。
  • getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型
  • getParameterNames():该辦法 都可以 取得所有变量的名称,该辦法 返回原本 Enumeration。
  • getInputStream():调用此辦法 来读取来自客户端的二进制数据流。
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>表单信息</title>
</head>
<body>

<form action="Demo1.jsp" method="post">
    <input type="text" name="name"/><br>
    <input type="text" name="url"/><br>
    <input type="checkbox" name="mao" checked="checked"/>猫<br>
    <input type="checkbox" name="gou"/>狗<br>
    <input type="checkbox" name="ji" checked="checked"/>鸡<br>
    <input type="checkbox" name="ya"/>鸭<br>

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

</form>
</body>
</html>
<%@ page import="java.util.Enumeration" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>JSP</title>
</head>
<body>

    <h1>读取参数信息</h1>
    <table align="center" border="1" width="3000%">
        <tr bgcolor="#f0f8ff">
            <th>参数名</th>
            <th>对应值</th>
        </tr>

            <%
                Enumeration<String> parameterNames = request.getParameterNames();
                request.setCharacterEncoding("utf-8");
                while (parameterNames.hasMoreElements()){
                    String name = parameterNames.nextElement();
                    out.println("<tr><td>"+name+"</td>\n");
                    String url = request.getParameter(name);
                    out.println("<td>"+url+"</td></tr>\n");
                }
            %>

    </table>
    <%

    %>

</body>
</html>

  

十三、四大域对象:实际开发怎么才能 才能 用?

    PageContext:pageConext      存放的数据仅在当前页面有效。开发时使用较少。当前页面存放数据用表单标签中的 <input type="hidden" />,且该存值辦法 用户看都可以 了。

    ServletRequest: request      存放的数据在一次请求(转发:都可以 传数据)内有效。使用非常多。

    HttpSession: session         存放的数据在一次会话(多次请求)带有效。使用的比较多。同类:存放用户的登录信息、购物车功能。

    ServletContext: application  存放的数据在整个应用范围内也有效。不可能 范围太多,应尽量少用。用于统计在线人数。

十四、会话跟踪

  •   会话概述

  1、那先 是会话?如同打电话。

     会话可简单理解为:用户开原本浏览器,点击多个超链接,访问服务器多个web资源,因此关闭浏览器,整个过程称之为原本会话。

  2、会话过程要避免的间题报告 是那先 ?保持各个客户端自己的数据。

      每个用户在使用浏览器与服务器进行会话的过程中,不可避免每本人 会产生因此 数据,应用程序池池要想辦法 为每个用户保存那先 数据。

      同类:用户点击超链接通过原本servlet购买了原本商品,应用程序池池应该想辦法 保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet都可以 得到用户购买的商品为用户结帐。

      思考:用户购买的商品保处在request或servletContext中行不行?答:不行。

  保存会话数据的一种生活生活技术

    Cookie:是客户端技术,应用程序池池把每个用户的数据以cookie的形式写给用户每本人 的浏览器。

       当用户使用浏览器再去访问服务器中的web资源时,就会带着每本人 的数据去。

       原本,web资源避免的好多好多 我用户每本人 的数据了。

    HttpSession:Session是服务器端技术,利用这些技术,服务器在运行时都可以 为每原本用户的浏览器创建原本其独享的HttpSession对象

       不可能 session为用户浏览器独享,好多好多 有用户在访问服务器的web资源时,都可以 把每本人 的数据装进每本人 的session中,

       当用户再去访问服务器中的其它web资源时,其它web资源再从用户每本人 的session中取出数据为用户服务。

  • http协议的无具体情况性

无具体情况是指,当浏览器发送请求给服务器时,服务器响应客户端请求。因此当同原本浏览器再次发送请求给服务器时,服务器并问你它好多好多 我刚才那个浏览器。简单来说,好多好多 我服务器不想去记得你,好多好多 有好多好多 我无具体情况协议。

  •   JSP Cookie 避免

Cookie是存储在客户机的文本文件,它们保存了一定量轨迹信息。在servlet技术基础上,JSP显然有有助于提供对HTTP cookie的支持。

通常有原本步骤来识别回头客:

  • 服务器脚本发送一系列cookie至浏览器。比如名字,年龄,ID号码等等。
  • 浏览器在本地机中存储那先 信息,以备不时之需。
  • 当下一次浏览器发送任何请求至服务器时,它会一起将那先 cookie信息发送给服务器,因此服务器使用那先 信息来识别用户不可能 干些其它事情。

JSP Cookie 避免需要对中文进行编码与解码,辦法 如下:

String   str   =   java.net.URLEncoder.encode("中文","UTF-8");            //编码
String   str   =   java.net.URLDecoder.decode("编码后的字符串","UTF-8");   // 解码
  • Servlet Cookie 辦法

  • 使用JSP设置Cookie

使用JSP设置cookie带有原本步骤:

(1)创建原本Cookie对象: 调用Cookie的构造函数,使用原本cookie名称和值做参数,它们也有字符串。

Cookie cookie = new Cookie("key","value");

请务必牢记,名称和值中也有能带有空格不可能 如下的字符:

(2) 设置有效期:调用setMaxAge()函数表明cookie在多长时间(以秒为单位)内有效。下面的操作将有效期设为了24小时。

cookie.setMaxAge(300*300*24);

(3) cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中加进cookie。

response.addCookie(cookie);
  • 实例说明

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>表单提交</title>
</head>
<body>

<form action="CookieDemo.jsp" method=GET>
    站点名: <input type="text" name="name">
    <br />
    网址: <input type="text" name="url" />
    <input type="submit" value="提交" />
</form>

</body>
</html>
<%@ page import="java.net.URLEncoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%
    // 编码,避免中文乱码
    String str = URLEncoder.encode(request.getParameter("name"),"utf-8");
    // 设置 name 和 url cookie
    Cookie name = new Cookie("name", str);
    Cookie url = new Cookie("url", request.getParameter("url"));

    // 设置cookie过期时间为24小时。
    name.setMaxAge(300*300*24);
    url.setMaxAge(300*300*24);

    // 在响应头部加进cookie
    response.addCookie( name );
    response.addCookie( url );
%>
<html>
<head>
    <title>设置 Cookie</title>
</head>
<body>

<h1>设置 Cookie</h1>

<ul>
    <li><p><b>网站名:</b>
        <%= request.getParameter("name")%>
    </p></li>
    <li><p><b>网址:</b>
        <%= request.getParameter("url")%>
    </p></li>
</ul>
</body>
</html>

  • 使用 JSP 读取 Cookie

我不想读取cookie,您就需要调用request.getCookies()辦法 来获得原本javax.servlet.http.Cookie对象的数组,因此遍历这些数组,使用getName()辦法 和getValue()辦法 来获取每原本cookie的名称和值。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.net.*" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>获取 Cookie</title>
</head>
<body>
<%
    Cookie cookie = null;
    Cookie[] cookies = null;
    // 获取cookies的数据,是原本数组
    cookies = request.getCookies();
    if( cookies != null ){
        out.println("<h2> 查找 Cookie 名与值</h2>");
        for (int i = 0; i < cookies.length; i++){
            cookie = cookies[i];

            out.print("参数名 : " + cookie.getName());
            out.print("<br>");
            out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
            out.print("------------------------------------<br>");
        }
    }else{
        out.println("<h2>越来越


发现 Cookie</h2>");
    }
%>
</body>
</html>

  • 使用JSP删除Cookie

删除cookie非常简单。不可能 您我不想删除原本cookie,按照下面给的步骤来做就行了:

  • 获取原本不可能 处在的cookie因此存储在Cookie对象中。
  • 将cookie的有效期设置为0。
  • 将这些cookie重新加进进响应头中。
  • 实例演示

下面的应用程序池池删除原本名为"name"的cookie,当您第二次运行CookieDemo2.jsp时,name 不可能 为 null。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.net.*" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>获取 Cookie</title>
</head>
<body>
<%
    Cookie cookie = null;
    Cookie[] cookies = null;
    // 获取当前域名下的cookies,是原本数组
    cookies = request.getCookies();
    if( cookies != null ){
        out.println("<h2> 查找 Cookie 名与值</h2>");
        for (int i = 0; i < cookies.length; i++){
            cookie = cookies[i];
            if((cookie.getName( )).compareTo("name") == 0 ){
                cookie.setMaxAge(0);
                response.addCookie(cookie);
                out.print("删除 Cookie: " +
                        cookie.getName( ) + "<br/>");
            }
            out.print("参数名 : " + cookie.getName());
            out.print("<br>");
            out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
            out.print("------------------------------------<br>");
        }
    }else{
        out.println("<h2>越来越


发现 Cookie</h2>");
    }
%>
</body>
</html>

  • 图解分析

  • Session

  • HttpSession概述

HttpSession是有JavaWeb提供的,用来会话跟踪的类,session是服务器对象,保处在服务器端;

HttpSession是Servlet三大域对象之一(request、session、application),好多好多 有它也有setAttribute()、getAttribute()、removeAttribute()辦法 ;

HttpSession底层依赖Cookie,或是URL重写。

  • HttpSession的作用
  • 会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器开始;

会话:原本用户对服务器的多次连贯性请求,所谓连贯性请求,好多好多 我该用户多次请求里边越来越 关闭浏览器。

  • 服务器会为每个客户端创建原本session对象,session就好比客户在服务器端的账户,它们被服务器保存到原本Map中,这些Map被称为session缓存。

Servlet中得到session对象:HttpSession session = request.getSession();

JSP中得到session对象:session是jsp内置对象之下,不想创建就都可以 直接使用。

  • session域相关辦法

void setAttribute(String name,Object val);

Object getAttribute(String name);

void removeAttribute(String name);
  • session保存用户登录信息

  • 案例相关页面和Servlet:

login.jsp 登录页面

LoginSuccess.jsp 都可以 了登录成功有有助于访问的页面

LoginServlet:校验用户与否登录成功

  • 各页面和Servlet内容:

login.jsp 提供登录表单,提交表单请求LoginServlet

LoginServlet 获取请求参数,校验用户与否登录成功

失败:保存错误信息到request域,转发到login.jsp,在login.jsp中显示request域中的错误信息;

成功:保存用户信息到session域中,重定向到LoginSuccess.jsp页面,显示session域中的用户信息。

LoginSuccess.jsp 从session域获取用户信息,不可能 不处在,显示“您还越来越 登录”,处在则显示用户信息;

因此我用户越来越 关闭浏览器,session就老是处在,越来越 保处在session中的用户信息也就一起处在,越来越 用户访问LoginSuccess.jsp就会通过

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
<%
    //获取cookie的值
    String name = "";
    String pwd = "";
    Cookie[] cs = request.getCookies();
    if(cs!=null){
        for(Cookie c : cs){
            if("username".equals(c.getName())){
                name = c.getValue();
            }
            if("pwd".equals(c.getName())){
                pwd = c.getValue();
            }
        }
    }
%>
<%
    //获取request信息
    String message="";
    String mess = (String)request.getAttribute("message");
    if(mess!=null){
        message = mess;
    }
%>
<h1>用户登录</h1>
<span color="red"><%=message %></span>
<form action="/LoginServlet" method="post">
    <p>
        账号:<input type="text" name="username" value="<%=name %>" />
    </p>
    <p>
        密码:<input type="password" name="pwd" value="<%=pwd %>" />
    </p>
    <p>
        <input type="submit" value="登录">
    </p>
</form>

</body>
</html>

  LoginServlet.java

package com.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置请求的字符编码
        request.setCharacterEncoding("utf-8");
        //接收客户端请求
        String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");
        //判断与否登录成功
        if("admin".equals(username) && "1234".equals(pwd)){
            //登录成功,把信息保存到cookie中
            Cookie c1 = new Cookie("username",username);
            Cookie c2 = new Cookie("pwd",pwd);
            c1.setMaxAge(300*300*24);
            c2.setMaxAge(300*300*24);
            response.addCookie(c1);
            response.addCookie(c2);
            //登录成功,保存用户名到session中,并重定向到LoginSuccess.jsp
            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            response.sendRedirect("/LoginSuccess.jsp");
        }else{
            //转发给客户端“登录失败”
            request.setAttribute("message", "用户信息错误,请重新登录");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }

    }
}

LoginSuccess.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <title>登录成功</title>
</head>
<body>

<%
    //获取session信息
    String name = (String)session.getAttribute("username");
    if(name==null){
        //session不处在,转发到登录页面,并提示信息
        request.setAttribute("message", "您还越来越


登录,都可以

了访问页面");
        request.getRequestDispatcher("/login.jsp").forward(request, response);
        //重定向到login.jsp,不想显示request提示的信息
        //response.sendRedirect("/login/login.jsp");
        return;
    }
%>
<h1>登录成功</h1>
你好<%=name %>,欢迎登录!

</body>
</html>

  

  • 隐藏表单域

原本网络服务器都可以 发送原本隐藏的HTML表单域和原本唯一的session ID,就像下面原本:

<input type="hidden" name="sessionid" value="12345">

这些条目愿因分析,当表单被提交时,指定的名称和值不可能 自动带有在GET或POST数据中。每当浏览器发送原本请求,session_id的值就都可以 用来保存不同浏览器的轨迹。

这些辦法 不可能 是一种生活生活有效的辦法 ,但点击<A HREF>标签中的超链接时不想产生表单提交事件,因此隐藏表单域好多好多 我支持通用会话跟踪。

  • 重写URL

您都可以 在每个URL里边加进因此 额外的数据来区分会话,服务器有有助于根据那先 数据来关联session标识符。

举例来说,http://w3cschool.cc/file.htm;sessionid=12345, session标识符为sessionid=12345,服务器都可以 用这些数据来识别客户端。

相比而言,重写URL是更好的辦法 来,就算浏览器不支持cookies有有助于工作,但缺点是您需要为每个URL动态指定session ID,就算这是个简单的HTML页面。

  • session依赖Cookie,目的是让客户端发出请求时注销 sessionID,原本有有助于找到对应的session;
  • 不可能 客户端禁用了Cookie,越来越 就无法得到sessionID,越来越 session也就无用了;
  • 也都可以 使用URL重写来替代Cookie
  • 让网站的所有超链接、表单中都加进原本特殊的请求参数,即sessionID;
  • 原本服务器都可以 通过获取请求参数得到sessionID,从而找到session对象;
  • response.encodeURL(String url)该辦法 会对url进行智能的重写,当请求中越来越 注销 session这些Cookie,越来越 该辦法 会重写URL,因此不重写,当然url需要是指向本站的url。
  • session对象

除了以上几种辦法 外,JSP利用servlet提供的HttpSession接口来识别原本用户,存储这些用户的所有访问信息。

默认具体情况下,JSP允许会话跟踪,原本新的HttpSession对象不可能 自动地为新的客户端实例化。禁止会话跟踪需要显式地关掉它,通过将page指令中session属性值设为false来实现,就像下面原本:

<%@ page session="false" %>

JSP引擎将隐含的session对象暴露给开发者。不可能 提供了session对象,开发者就都可以 方便地存储或检索数据。

下表列出了session对象的因此 重要辦法 :

 

 

  • Session与Cookie的对比

  • HttpSession原理

服务器不想马上我就创建session,在第一次获取session时,即reques.getSession()辦法 执行时,才会创建session。

获取Cookie中的JSESSIONID:

  •   不可能 sessionID不处在,创建session,把session保存起来,把新创建的sessionID保存到Cookie中;
  •   不可能 sessionID处在,创建sessionID查找session对象,不可能 越来越 查找到,创建session,把session保存起来,把新创建的sessionID保存到Cookie中;
  •   不可能 sessionID处在,通过sessionID查找到了session对象,越来越 就不想再创建session对象了;
  •   不可能 创建新的session,浏览器会得到原本带有了sessionID的Cookie,这些Cookie的生命为-1,即只在浏览器内存中处在,不可能 不关闭浏览器,越来越 Cookie就会老是处在;
  •   下次请求时,再执行request.getSession()辦法 时,不可能 都可以 通过Cookie中的sessionID找到session对象,好多好多 有与上一次请求使用的是同原本session对象。
  •   request.getSession(false):不可能 Cookie不处在,session好多好多 我处在,越来越 返回NULL,而不想创建session对象;
  •   request.getSession(true)/request.getSession():原本辦法 一样,当session对象不处在时,创建session对象
  •   String getId() 获取sessionID;
  •   int getMaxInactiveInterval() 获取session最大的不活动时间(秒),默认为300分钟,当session在300分钟内越来越 使用,越来越 Tomcat就会在session池中移除;
  •   void invalidate() 让session失效,调用这些辦法 会让session失效,当session失效后,客户端再次请求,服务器会给客户端原本新的session;
  •   boolean isNew() 查看session与否为新的,判断是新创建的,还是从Cookie获取的;

 

此篇是我在学习过程中参考菜鸟教程以及笔记和别人博客(黑泽君)完成

Java匹马行天下依旧在更新中,欢迎亲戚亲戚我们歌词 关注,感觉都可以 的都可以 点击一下推荐,若如有误,感谢指正,谢谢!

猜你喜欢

大发十分快3在哪玩_ 电热水器要用时开还是一直开着更省电?

大发十分快3在哪玩也不人大发十分快3在哪玩家里的电热水器肯定都在突然开着的吧,正好下班回家洗澡,也不究竟是从前突然开着耐开呢,还是要用的前一天再临时开烧水更省呢?一起来讨论一下

2020-01-21

分分飞艇计划客户端_Spring Cloud实战的代码位置

一群人好,本博文的连接里蕴藏了SpringCloud实战的代码位置。代码下载连接:链接:https://pan.baidu.com/s/1gcbTflRqeYEFdwtjwN3

2020-01-21

大发时时彩外挂_2019 年 10月 16 日 随笔档案

2019年10月16日在我的新书里,尝试着用股票案例讲述Python爬虫大数据可视化等知识摘要:我的新书,《基于股票大数据分析的Python入门实战》,预计将于2019年底在清

2020-01-21

大发pk10下载 _六迹象表明女人已患性病

女人女人男人性病难题没办法 受到女同胞们的重视,现在男女人女人男人病患者的比例日后 达到1.4:1,日后 男性性疾病的形态较为明大发pk10下载 显,而女人女人男人

2020-01-21

大发3分彩链接_一季度黑龙江进出口总值384.3亿元 同比增长34.3%

17日,记者从哈尔滨海关了解到,2018年一季度,黑龙江省进出口总值384.3亿元人民币,较前一年同期(同比)增长34.3%,高于同期全国进出口增速24.9个百分点,实现进出口

2020-01-21