2014年一码中特
首頁 > 編程語言 > 詳細

筆記-JavaWeb學習之旅13

時間:2019-06-12 02:03:17      閱讀:57      評論:0      收藏:0      [點我收藏+]

標簽:cde   隨機   error   當前   美化   mov   row   dog   自動   

驗證碼案列

昨天晚上出現的500錯誤原因在于驗證碼沒有獲取到,獲取驗證碼是應該獲取的是共享域中的驗證碼,而我把獲取值得鍵給寫成了jsp中的鍵,而不是內存生成圖片中,然后把圖片上傳到共享域中的鍵。這兩個鍵搞混了,所以獲取不到驗證碼。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login</title>


    <script>
        window.onload = function(){
            document.getElementById("img").onclick = function(){
                this.src="/day14/checkCodeDemo4?time="+new Date().getTime();
            }
        }


    </script>
    <style>
        div{
            color: red;
        }

    </style>
</head>
<body>

<form action="/day14/loginServlet" method="post">
    <table>
        <tr>
            <td>用戶名</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密碼</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td>驗證碼</td>
            <td><input type="text" name="checkCode"></td>
        </tr>
        <tr>
            <td colspan="2"><img id="img" src="/day14/checkCodeDemo4"></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="登錄"></td>
        </tr>
    </table>


</form>


<div><%=request.getAttribute("cc_error") == null ? "" : request.getAttribute("cc_error")%></div>
<div><%=request.getAttribute("login_error") == null ? "" : request.getAttribute("login_error") %></div>

</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1><%=request.getSession().getAttribute("user")%>,歡迎您</h1>

</body>
</html>
package com.data;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/checkCodeDemo4")
public class checkCode extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int width = 100;
        int height = 50;
        //創建對象,該對象可以在內存中生成圖片
        //BufferedImage是Image的一個子類,Image和BufferedImage的主要作用就是將一副圖片加載到內存中。
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//這個類第一次接觸,好陌生,好抽象
        //圖片加載進內存了,就盡情的虐待他吧
        //美化圖片
        //填充背景色
        Graphics g = image.getGraphics();
        g.setColor(Color.PINK);
        g.fillRect(0,0,width,height);
        //畫邊框
        g.setColor(Color.BLUE);
        g.drawRect(0,0,width-1,height-1);
        String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        //  寫驗證碼
        Random ran = new Random();
        StringBuilder sb = new StringBuilder();//初始容量為16字節
        //隨機生成4個字符
        for(int i = 1;i<=4;i++){
            int index = ran.nextInt(str.length());
            char ch = str.charAt(index);
            sb.append(ch);//這個方法可以接收任意類型的數據
            g.drawString(ch+"",width/5*i,height/2);//ch代表要繪制的字符,x,y代表繪制的坐標
        }
        String value_checkCode_session = sb.toString();//把字符變成字符串
        System.out.println(value_checkCode_session);
        //創建對象,使用方法將驗證碼存入session
        req.getSession().setAttribute("key_checkCode_session",value_checkCode_session);//把數據放入共享域
        g.setColor(Color.GREEN);//線條的顏色
        //畫10條干擾線
        for (int i = 0 ; i< 10 ;i++){
            int x1 = ran.nextInt(width);
            int x2 = ran.nextInt(width);

            int y1 = ran.nextInt(height);
            int y2 = ran.nextInt(height);
            g.drawLine(x1,y1,x2,y2);//參數是坐標
        }


        //將圖片輸出到頁面上
        ImageIO.write(image,"jpg",resp.getOutputStream());

    }
}
package com.data;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //根據鍵獲取值
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String checkCode = request.getParameter("checkCode");//這里的checkCode是用戶輸入的驗證碼
        //要先看看獲取的驗證碼是否正確
        //先得取得內存中生成的驗證碼,
        HttpSession session = request.getSession();//創建HttpSession對象
        String checkCode1 = (String)session.getAttribute("key_checkCode_session");//這里的checkCode是內存中獲得的驗證碼
        //把獲得的驗證碼刪除,確保只使用一次
        session.removeAttribute("checkCode_session");
        //判斷驗證碼是否正確,忽略大小寫
        if(checkCode1!=null&&checkCode1.equalsIgnoreCase(checkCode)){
            //驗證碼正確
            //判讀用戶名和密碼是否一致
            if("zhangsan".equals(username)&&"123".equals(password)){
                //存儲信息,
                session.setAttribute("user",username);
                //重定向到success.jsp頁面
                response.sendRedirect(request.getContextPath()+"/success.jsp");

            }else{
                //儲存信息到request
                request.setAttribute("login_error","用戶名或密碼錯誤");
                //轉發都登錄頁面
                request.getRequestDispatcher("/login.jsp").forward(request,response);
            }
        } else{
            //驗證碼不一致
            //存儲提示信息到request
            request.setAttribute("cc_error","驗證碼錯誤,請重試");
            //轉發到登錄頁面
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}
JSP:

1.指令

作用:用于配置JSP頁面,導入資源文件

格式:<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ...%>

指令分類:

1.page :配置JSP頁面的

  • contentType:等同于response.setContentType(),設置響應體的mime類型
  • import:導包
  • errorPage:當前頁面發生異常后,會自動跳轉到指定的錯誤頁面
  • isErrorPage:標識當前是否是錯誤頁面,true,是,可以使用內置對象exception,false:否,默認值,不可以設置內置對象exception

2.include:頁面包含的,導入頁面的資源文件

  • <% @include file="要導入的資源文件名稱"%>

3.taglib :導入資源

  • <%@ taglib prefix="c" uri="文件的地址" %>
  • prefix :前綴,自定義的

2.注釋:

  • html注釋:只能注釋html代碼片段
  • jsp注釋:<%-- --%>可以注釋所有
3.內置對象

在jsp頁面中不需要創建,直接使用的對象,一共有9個

變量名 真實類型 作用
pageContext PageContext 當前頁面共享數據,還可以獲取其他八個內置對象
request HttpServletRequest 一次請求訪問的多個資源
session HttpSession 一次會話的多個請求間
application ServletContext 所有用戶間共享數據
response HttpServletResponse 響應對象
page Object 當前頁面的對象
out jspWriter 輸出對象,數據輸出到頁面上
config ServletConfig Servlet的配置對象
exception Throwable 異常對象
MVC:開發模式 模型視圖控制器

M:Model,模型。JavaBean,完成具體的業務操作,如,查詢數據庫,封裝對象

V:view,視圖,JSP,展示數據

C:Controller,控制器。Servlet,獲取用戶輸入,調用模型,將數據交給視圖進行展示

EL表達式:

1.概念:Expression Language 表達式語言

2.作用:替換和簡化jsp頁面中java代碼的編寫

3.語法:${表達式}

4.注意:jsp默認支持el表達式,瀏覽器會解析el表達式,如果讓瀏覽器忽略jsp頁面中所有的el表達式可以設置jsp中page指令中:isELIgnored="true"會 忽略當前jsp頁面中所有的el表達式,或者使用${表達式}:會忽略當前這個el表達式。

EL_表達式獲取域中的值

1.el表達式只能從域對象中獲取值

2.語法:

  1. ${域名稱.鍵名}:從指定域中獲取指定鍵的值
    • 有四種域
    • 1.pageScope 2.requestScope 3.sessionScope 4.applicationScope
  2. ${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值,知直到找到為止,如果域有多個同名的鍵,則從小范圍的域開始找起。
獲取對象,List集合,Map集合的值

對象格式:${域名稱.鍵名.屬性名}

List集合格式:${域名稱.鍵名[索引]}

Map集合格式:${域名稱.鍵名.key名稱}或者${域名稱.鍵名["key名稱"]}

package com.data.jsp;
import java.text.SimpleDateFormat;
import java.util.Date;

public class User {
    private String name;
    private int age;
    private Date birthday;
    //邏輯視圖
    //需要顯示年月日的日期格式需要創建一個方法
    public String getBirStr(){
        //格式化日期
        if(birthday !=null){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            //返回字符串
            return sdf.format(birthday);
        }else{
            return "";
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}
<%@ page import="com.data.jsp.User" %>
<%@ page import="java.util.*" %><%--
  Created by IntelliJ IDEA.
  User: Yuan
  Date: 2019/6/11
  Time: 18:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--給User設置值--%>
    <%
        User user = new User();
        user.setName("張三");
        user.setAge(23);
        user.setBirthday(new Date());
//        共享域
        request.setAttribute("u",user);
        //創建List集合
        List list = new ArrayList();
        list.add("云想衣裳花想容");
        list.add("春風扶檻露華濃");
//        添加對象進去看看
        list.add(user);
        request.setAttribute("list",list);

        //創建Map集合
        Map map = new HashMap();
        map.put("sname","李四");
        map.put("gender","男");
        //添加用戶進去看看
        map.put("user",user);
        request.setAttribute("map",map);
    %>
<h3>el獲取對象中的值</h3>
    <%--獲取對象的值需要通過對象的方法來獲取--%>
        <%--setter或getter方法,去掉set或get,在將剩余部分,首字母變小寫--%>
${requestScope.u.name}<br>
${requestScope.u.age}<br>
${requestScope.u.birthday}<br>
${requestScope.u.birStr}<br>
<h3>el獲取List集合中的值</h3>
${requestScope.list}<br><%--獲取的是整個集合--%>
${requestScope.list[0]}<br>
${requestScope.list[1]}<br>
${requestScope.list[2].name}<br>
${requestScope.list[2].age}<br>
<h3>el獲取Map集合中的值</h3>
${requestScope.map}<br>
${requestScope.map.sname}<br>
${requestScope.map.gender}<br>
${requestScope.map.user.name}<br>
</body>
</html>

技術分享圖片

空運算符:empty

功能:用于判斷字符串,集合,數組對象是否為null并且長度是否為0

格式:{empty list}

3.隱式對象:

el表達式中有11個隱式對象

pageContext:獲取jsp其他八個內置對象

${pageContext.request.contextPath}:動態獲取虛擬目錄

筆記-JavaWeb學習之旅13

標簽:cde   隨機   error   當前   美化   mov   row   dog   自動   

原文:https://www.cnblogs.com/train99999/p/11007053.html

(0)
(0)
   
舉報
評論 一句話評論(0
登錄后才能評論!
? 2014 bubuko.com 版權所有 魯ICP備09046678號-4
打開技術之扣,分享程序人生!
             

魯公網安備 37021202000002號

2014年一码中特 2018炸金花棋牌游戏 3d预测计划破解版 上海时时乐走势图连线 贵州十一选五开奖号 广西11选5开奖视频直播 正规炸金花棋牌平台 云南11选5走势图 中彩票14亿 重庆幸运农场是骗局吗 天津十一选五开奖