Categorías
Java

(Java) El expression y el caso «remember login user name»

1 Visión general básica de las expresiones de EL

Las expresiones EL (Express Lanuage) se pueden incrustar en páginas jsp para reducir la escritura de scripts jsp. El propósito de EL es reemplazar la escritura de scripts de salida <%= data%> en páginas jsp.

2 Formato y función de la expresión EL

El formato de la expresión EL:

${EL expression content}

El papel de la expresión EL:

  1. DeObjeto de dominioPara encontrar los datos especificados.
  2. Uso de objetos integrados de EL
  3. Operador de ejecución

3 Uso básico de expresiones EL (recuperar datos del dominio)

  • EL obtiene un cierto valor de cuatro dominios:${key}
    • Alcance de la acciónDe pequeño a grandeEs para obtener atributos del dominio pageContext, el dominio de solicitud, el dominio de sesión y el dominio de aplicación a su vez. Después de obtenerlo en un determinado dominio, no mirará hacia atrás.
    • Entre ellos, si solo desea obtener el valor en el campo pageContext:${pageScope.key}
    • Entre ellos, si solo desea obtener el valor en el campo de solicitud:${requestScope.key}
    • Entre ellos, si solo desea obtener el valor en el campo de sesión:${sessionScope.key}
    • Entre ellos, si solo desea obtener el valor en el dominio de aplicación:${applicatioScope.key}

3.1 Obtener datos ordinarios a través de expresiones EL

  • Formato:
${key}
  • De esta manera, EL busca la clave en el orden de menor a mayor de los cuatro dominios, y la genera si la encuentra, y no continúa buscándola. Consulte el siguiente ejemplo para obtener más información.

Demostración de código:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Get the data in the domain container</title>
</head>
<body>
    <%
        // 1 save the data in the domain container
        pageContext.setAttribute("city", "Beijing 1"); // page
        pageContext.setAttribute("city", "Beijing 2", PageContext.REQUEST_SCOPE); // request
        pageContext.setAttribute("city", "Beijing 3", PageContext.SESSION_SCOPE); // session
        pageContext.setAttribute("city", "Beijing 4", PageContext.APPLICATION_SCOPE); // servletContext

        // 2 delete the specified domain data
        /*
        pageContext.removeAttribute("city", PageContext.PAGE_SCOPE); // page
        pageContext.removeAttribute("city", PageContext.REQUEST_SCOPE); // request
        pageContext.removeAttribute("city", PageContext.SESSION_SCOPE); // session
        pageContext.removeAttribute("city", PageContext.APPLICATION_SCOPE); // servletContext
         */
        pageContext.removeAttribute("city"); // Delete data in all domains
    %>

    <h1>java</h1>
        <h3>retrieve data</h3>
        <%
            out.print(pageContext.getAttribute("city")!=null?pageContext.getAttribute("city"):""); // page
            out.print(pageContext.getAttribute("city", PageContext.REQUEST_SCOPE)); // request
            out.print(pageContext.getAttribute("city", PageContext.SESSION_SCOPE)); // session
            out.print(pageContext.getAttribute("city", PageContext.APPLICATION_SCOPE)); // servletContext
        %>

        <h3>Get data intelligently</h3>

        <%
            /*
                         pageContext.findAttribute(key) Get data from the four domain containers in turn according to the key, if it is obtained, the value ends; if it is not obtained, return null
             */
            out.print(pageContext.findAttribute("city"));
        %>

    <h1>EL</h1>
        <h3>retrieve data</h3>
        ${pageScope.city}
        ${requestScope.city}
        ${sessionScope.city}
        ${applicationScope.city}

    <h3>Get data intelligently</h3>  <%--The most commonly used is this--%>
        ${city} 
</body>
</html>

3.2 EL obtiene el valor del objeto javaBean

Formato:

${Object. Member Variable}

Suponiendo que User es un objeto javaBean:

public class User {
    private String username;
    private String password;
    private String nickname;
    //Omit construction method, get, set method
}

Demostración de código:

<%@ page import="cn.itcast.pojo.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        // EL gets the value of the javaBean object
        User user = new User();
        user.setUsername("zhangsan");
        user.setPassword("abc");
		// Placed in the request field, because the EL expression can only get the data in the field
        request.setAttribute("user", user);  
    %>
	
	<%--The most general java statement, generally not used--%>
    <h1>java</h1>
    username = <%=((User)pageContext.findAttribute("user")).getUsername()%> <br/>
    password = <%=((User)pageContext.findAttribute("user")).getPassword()%> <br/>
    nickname = <%=((User)pageContext.findAttribute("user")).getNickname()%>

    <hr/>

	<%--ELSentence acquisition, the most commonly used, and the simplest--%>
    <h1>EL</h1>
        username === ${user.username} <br/>
        password === ${user.password} <br/>
        nickname === ${user.nickname} <br/>
</body>
</html>

3.3 Adquisición de ELList<String>Valor de

Formato:

${List collection object[index]}

Demo de código

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
    ELExpression role one(Get data from the domain): ELGet List<String>  Value of

         format: ${  List collection object[index] }
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--1.Create List<String>set,  Store in the Request field --%>
    <%
        List<String> list = new ArrayList<String>();
        list.add("Reba");
        list.add("Naza");
        request.setAttribute("list",list);
    %>

    <%--2.byELexpression,  Get List<String>Data in the collection--%>
    <%--Obtained by jsp, not recommended--%>
    <%
        List<String> names = (List<String>) request.getAttribute("list");
        out.print( names.get(0) +" === "+ names.get(1) );
    %>
    <%--ELWay to get--%>
    ${list[0]} == ${list[1]}

</body>
</html>

[External link image transfer failed. The origin site may have an anti-leech link mechanism. It is recommended to save the image and upload it directly (img-eEgMw0t8-1606008306083)(day08_jsp&filter&listener.assets/1568520799607.png)]

  LeetCode - Triángulo de Pascal II (Java)

3.4 Adquisición de ELList<User>Valor de

Formato:

${List collection object[index]. member variable}

Demo de código

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.itheima.pojo.User" %><%--
    ELExpression role one(Get data from the domain): ELGet List<User>  Value of

         format: ${  List collection object[index].Member variables  }
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--1.Create List<User>set,  Store in the Request field --%>
    <%
        List<User> list = new ArrayList<User>();
        list.add(new User("Reba","123456"));
        list.add(new User("Naza","abcdef"));
        request.setAttribute("list",list);
    %>

    <%--2.byELexpression,  Get List<User>Data in the collection--%>
    <%--Jsp method to obtain--%>
    <%
        List<User> users = (List<User>) request.getAttribute("list");
        out.print( users.get(0).getUsername() +"=="+ users.get(0).getPassword() );
        out.print( users.get(1).getUsername() +"=="+ users.get(1).getPassword() );
    %>
    <br/>
    <%--ELWay to get--%>
    ${list[0].username} == ${list[0].password}
    ${list[1].username} == ${list[1].password}

</body>
</html>

Salida:

3.5 EL obtiene el valor de Mapa<Cadena,Usuario>

Formato:

${Map collection object.key. member variable}
 Or
 ${Map collection object['key']. member variable}

Demo de código

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="com.itheima.pojo.User" %>
<%@ page import="java.util.Map" %><%--
    ELExpression role one(Get data from the domain): ELGet Map<String, User>  Value of

         format:
        ${Map collection object.key.Member variables  }
                 Or
        ${Map collection object['key'].Member variables}
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--1.Create Map<String, User>set,  Store in the Request field --%>
    <%
        Map<String, User> userMap = new HashMap<String, User>();
        userMap.put("user1", new User("Reba","123456"));
        userMap.put("user2", new User("Naza","abcdef"));
        request.setAttribute("userMap",userMap);
    %>

    <%--2.byELexpression,  Get Map<String, User>Data in the collection--%>
    <%--Jsp method is not recommended--%>
    <%
        Map<String, User> map = (Map<String, User>) request.getAttribute("userMap");
        out.print( map.get("user1").getUsername() +"=="+ map.get("user1").getPassword());
        out.print( map.get("user2").getUsername() +"=="+ map.get("user2").getPassword());
    %>
    <br/>
    <%--ELWay to obtain, generally use the first way--%>
    ${userMap.user1.username} == ${userMap.user1.password}
    ${userMap.user2.username} == ${userMap.user2.password}
    <br/>
    ${userMap['user1'].username} == ${userMap['user1'].password}
    ${userMap['user2'].username} == ${userMap['user2'].password}

</body>
</html>

4 Página de objetos integrada de ELContext

  • pageContext: El objeto de contexto de la página en el desarrollo web.
  LeetCode - Agregar binario (Java)

Función: se puede utilizar para obtener datos en los cuatro dominios de JSP (pageScope, requestScope, sessionScope, applicationScope)

  • Por ejemplo, en Servlet, desea obtener el nombre de la aplicación web:request.getContextPath();
  • A continuación, en la página jsp, quiero obtener el nombre de la aplicación web:${pageContext.request.contextPath}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Get the name of the WEB application project</title>
</head>
<body>
    <h3>Get the name of the WEB application project</h3>
         <%--Get by JSP--%>
    <%= request.getContextPath()%>
         <%--Get by EL method--%>
    ${pageContext.request.contextPath}
</body>
</html>

5 Operador de ejecución EL (entender)

  1. Operadores aritméticos +,-, *, /,%
  2. Operadores lógicos &&, ||,!
  3. Operadores de comparación>, <, >=, <=, ==, !=
  4. Operador nulo vacío
  5. Operador ternario

Demostración de código:

<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ELExecution operator</title>
</head>
<body>
    ${3+4} <br>
    ${3-4} <br>
    ${true&&true} <br>
    ${false&& true} <br>
    ${3>4} <br>
    ${3<4 || 5>4} <br>

    <%--Save data to the domain,  Used to demonstrate empty--%>
    <%
        String str = null;
        request.setAttribute("str", str);
        request.setAttribute("array", new String[1] );
        request.setAttribute("list", new ArrayList<String>());
    %>
    ${empty str} <br>
    ${empty array} <br>
    ${empty list} <br>

    ${str == null?"Data is empty":str} <br>

</body>
</html>

Salida:

6 Caso Registre el nombre de usuario utilizado para el último inicio de sesión

  1. Descripción del problema
    En la interfaz de inicio de sesión, si se introduce el nombre de usuario y la contraseña, y recuerda que el nombre de usuario está marcado, después de hacer clic en iniciar sesión, el nombre de usuario se rellenará automáticamente cuando se abra la página de inicio de sesión la próxima vez.
  2. Análisis de pasos:
    (1) Obtener el nombre de usuario y la contraseña enviados
    (2) Obtenga si desea «recordar el nombre de usuario»
    (3) Determinar si el nombre de usuario y la contraseña coinciden con la base de datos: si coinciden, redirigir a la página de inicio; si no coinciden, reenvíe de nuevo a la página de inicio de sesión, solicitando que el nombre de usuario o contraseña sea incorrecto; al mismo tiempo, siempre y cuando se compruebe el nombre de usuario remember, la cookie El valor del nombre de usuario. Se muestra en la página
  3. Implementación:
    (1) La dirección de envío del formulario de inicio de sesión es Servlet
    (2) En el Servlet, después de obtener el nombre de usuario y la contraseña, compare con los datos de la base de datos y vaya a la página correspondiente para el éxito o el error
    (3) Determine si el botón recordar nombre de usuario está marcado en el formulario extraído. Si es así, almacene el nombre de usuario en una cookie, consigalo y muénstrelo en la página de inicio de sesión.
  4. La racionalidad de poner el nombre de usuario en la cookie:
    Si se colocan en el servidor, los datos no se pueden obtener cuando se actualiza o se repara el servidor.
  • Mire la interfaz de inicio de sesión primerologin.jspCódigo:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>log in</title>
</head>
<body>
<%--Note here, the way to get the submission path--%>
<form action="${pageContext.request.contextPath}/login" method="post">
    <table>
        <tr>
            <td>username</td>
            <%--Pay attention here-How to get the input value-%>
            <td><input type="text" name="username" value="${cookie.user.value}"/></td>
        </tr>
        <tr>
            <td>password</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="checkbox" name="rem" value="remUsername">  Remember Account Name</td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="submit"></td>
        </tr>
    </table>
</form>
</body>
</html>

  • Echemos un vistazo al código Servlet procesado
package servlet;

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

/**
   * Handle the operation of remembering the user name
   * 1. Authentication of user name and password
   * 2. Record the user name
 */
@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. Get username and password
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 2. Judgment
        if (username.equals("tom") && password.equals("1234")){
            //login successful
            response.getWriter().write("login success");

        }else {
            // Login failed
            request.setAttribute("message","Login failed! Username or password is wrong, please re-enter");
            // forward to the login page
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }

        // Get whether remember user name is checked in the form, if checked, the user name will be stored in the cookie
        String rem = request.getParameter("rem");
        if (rem != null){
            // Checked Remember username
            Cookie cookie = new Cookie("user",username);
            cookie.setMaxAge(60*10*24*10); //Remember for 10 days
            cookie.setPath(request.getContextPath());
            response.addCookie(cookie);
        }

    }

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

.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *