在自定义标签中将JavaBean与作用域会话一起使用

时间:2019-06-17 15:58:27

标签: java jsp session servlets javabeans

练习是: 编写一个使用不带属性的定制标记的JSP页面,该页面允许根据发出请求的用户的特权(您假设已通过身份验证的用户由会话Bean表示,该用户已通过身份验证获得用户的权限)有条件地显示您的正文。标签的方法)。

我创建了一个scope =“ session”的bean,但是我不明白的是如何将bean传递到Handler标签中? 我只是使用session.setAttribute(“ ...”)将属性传递到标签处理程序中,但是这种方式我没有传递Bean。你能帮我吗?

JSP代码:

<html>
  <head>

    <title> </title>
  </head>
  <body>
    <%@ page import="java.util.*"%>
    <%@ taglib uri="WEB-INF/tlds/mialib.tld" prefix="tag"%>
    <%! HashMap<String,String> luser = new HashMap();%> <!-- Contiene la lista di tutti gli utenti registrati -->
    <%! ArrayList<String> ladmin = new ArrayList<String>(); %> <!-- Contiene la lista di tutti gli utenti che sono admin -->
    <%! String username; %>
    <%! String password; %>
    <%! String admin; %>
    <jsp:useBean id="au" scope="session" class="beans.Autenticazione"/>

    <%
      //creo la lista con tutti username/password degli utenti registrati
      luser.put("andrea","andreag");
      luser.put("erica","ericae");
      luser.put("filippo","filippob");
      luser.put("alessia","alessiar");
      //creo la lista con gli username degli admin
      ladmin.add("andrea");
      ladmin.add("filippo");
      username=request.getParameter("usern"); //prendo da login.html l'username
      password=request.getParameter("passw"); //prendo da login.html la password

      if(luser.containsKey(username) && (password.equals(luser.get(username)))){ //controllo se se username e password coincidono con quelli dell'HashMap
        if(ladmin.contains(username)){ //controllo se l'username è presente nella lista degli admin
          admin="true";
          %>
          <jsp:setProperty name="au" property="username" param="usern"/>
          <jsp:setProperty name="au" property="password" param="passw"/>
          <jsp:setProperty name="au" property="admin" value="<%=admin%>"/>
          <%

            session.setAttribute("admin",admin);
            session.setAttribute("username",username);
          %>
          <tag:panel/>
          <%
        }else{ //NON è admin l'utente autenticato
          admin="false";
          %>
          <jsp:setProperty name="au" property="username" param="usern"/>
          <jsp:setProperty name="au" property="admin" value='<%=admin%>'/>
          <%
            session.setAttribute("admin",admin);
            session.setAttribute("username",username);
            session.setAttribute("password",password);
          %>
          <tag:panel/>
          <%
        }
      }else{ //username o password NON corretti
        out.println("Login errato. Clicca <a href ='login.html'> qui </a> per riprovare");
      }

    %>
  </body>
</html>

标签处理程序代码:

package miei_tag;


import java.io.*;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class Admin extends TagSupport{ //NON ho il body con TagSupport
  public int doStartTag() throws JspException{
    try{
      String prova=Autenticazione.getUsername();
      HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
      HttpSession session = request.getSession();
      String ammi=(String) session.getAttribute("admin");
      String usern = (String) session.getAttribute("username");
      String passwd = (String) session.getAttribute("password");
      JspWriter out = pageContext.getOut();
      out.println(" "+passwd);
      if(ammi.equals("false")){
        out.println(usern + " NON SEI ADMIN, NON HAI UN PANNELLO");
      }else{
        if(ammi.equals("true")){
          out.println("<h3>CIAO " + usern + " PANNELLO DI CONTROLLO PER UTENTI ADMIN</h3>");
        }
      }
    }catch(IOException ioException){
      throw new JspException(ioException.getMessage());
    }
    return SKIP_BODY;
  }
}

0 个答案:

没有答案