练习是: 编写一个使用不带属性的定制标记的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;
}
}