0

Web アプリで問題が発生しています。コードを投稿し、コード部分で何をしているかを定義しています...

これは、ユーザータイプ(管理者、マネージャー、ユーザー)をチェックする私のフィルターです..そして、マークされた行でエラーが発生しています...

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {


    HttpServletRequest req = (HttpServletRequest) request;  
    HttpSession session = req.getSession();
    RequestDispatcher rd=null;

    Person user = (Person) session.getAttribute("usertype"); <------ **IM GETTING EXCEPTION HERE!**

    if (user != null && user.getType().equals(UserType.MANAGER.toString())) {

        String nextJSP = "/ManagerHome.jsp";
        rd = request.getRequestDispatcher(nextJSP);
        rd.forward(request, response);
    }

    else if (user != null && user.getType().equals(UserType.ADMIN.toString())) {

        String nextJSP = "/AdminHome.jsp";
        rd = request.getRequestDispatcher(nextJSP);
        rd.forward(request, response);

    }

    else if (user != null && user.getType().equals(UserType.USER.toString())) {

        String nextJSP = "/UserHome.jsp";
        rd = request.getRequestDispatcher(nextJSP);
        rd.forward(request, response);
    }   
    else {

        String nextJSP = "/Login.jsp";
        rd = request.getRequestDispatcher(nextJSP);
        rd.forward(request, response);
    }

    chain.doFilter(request, response);
}

そして、これは人のレコードを持つ私の Person クラスです

    @Table(name="\"Person\"")
    public class Person implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 2532993385565282772L;
@Id
@Column(name="id",nullable=false,updatable=false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;    
private String name;
private String surname;
private String sskno;
private String address;
private String telno;
private String type;

@OneToMany
private List<Leave> leaves;

public Person() {
}

     getters & setters....

そして、これは私の LoginServlet です... ここで、一時的に Pusername、Pname、Pusertype、および Pusername は、セッションの属性を設定するためのものです。そして、JSPであるこのページによると、ユーザータイプに依存します...(ユーザーがユーザーホームに移動した場合、マネージャーマネージャーがホームに移動した場合)...なぜこのエラーが発生するのかはわかりますが、それを回避する方法はわかりません。私は調査を行いましたが、何もうまくいきませんでした...ここで私を助けてください私のログインサーブレットです

     public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public LoginServlet() {
    super();
}

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    try {
        String pName;
        String pSurname;
        String pUserName;
        String pUserType;
        String query;
        String home="/Login.jsp";
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        RequestDispatcher rd = request.getRequestDispatcher(home);
        mysqlCon con = new mysqlCon();
        //HttpSession session = request.getSession();
        LoginService ls = new LoginService();

        Statement stmt = con.getConnection().createStatement();
        query = "SELECT name, surname, usertype, username FROM employee WHERE username='"
                + username + "' AND password='" + password + "';";
        stmt.executeQuery(query);
        ResultSet rs = stmt.getResultSet();


        if(rs.next()){

        pName = rs.getString(1);
        pSurname = rs.getString(2);
        pUserType = rs.getString(3);
        pUserName = rs.getString(4);


        if (ls.loginCheck(username, password) != false) {
            Person tmp = new Person();

            tmp.setName(pName);
            tmp.setSurname(pSurname);
            tmp.setType(pUserType);
            tmp.setUsername(pUserName); 

            HttpSession session = request.getSession();
            session.setAttribute("name", tmp.getName());
            session.setAttribute("surname", tmp.getSurname());
            session.setAttribute("usertype", tmp.getType());
            session.setAttribute("username", tmp.getUsername());

             if (pUserType.equals(UserType.MANAGER.toString())) {

                    String nextJSP = "home/ManagerHome.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);
                }

                else if (pUserType.equals(UserType.ADMIN.toString())) {

                    String nextJSP = "home/AdminHome.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);

                }

                else if (pUserType.equals(UserType.USER.toString())) {

                    String nextJSP = "home/UserHome.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);
                }   
                else {

                    String nextJSP = "/Login.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);
                }

        }
        }
        else {

            rd.forward(request, response);

        }

さらに情報を追加してほしい場合は、それを行うことができます。私の質問は、これを回避して機能させるにはどうすればよいかということです。

4

3 に答える 3

2

tmpタイプのオブジェクトですPerson。おそらく、クラスの属性を.getType()取得します。したがって、実際にはここでオブジェクトを設定しています:String type;PersonString

session.setAttribute("usertype", tmp.getType());

したがって、以下の行は次のようになりますClassCastException

Person user = (Person) session.getAttribute("usertype"); 

戻り値を にキャストする必要がありますString

String userType = (String) session.getAttribute("usertype");

Personより良いのは、オブジェクト全体を に設定できることですsession

HttpSession session = request.getSession();
session.setAttribute("person", tmp);

次に、そのプロパティを次のように取得できます。

Person user = (Person) session.getAttribute("person");
String personType = user.getType();
......................
于 2013-08-19T08:15:22.120 に答える
0

まあ、あなたは になるように設定usertypeしているのでtmp.getType()、それほど驚くべきことではありません. タイプが何であれ、tmp下に保存するusertypeかキャストする必要があります。usertypetmp.getType()

于 2013-08-19T08:14:09.697 に答える
-1

このエラーは、Java のドキュメントで確認できます。この1行は、それを理解して修正するのに役立ちます.

コードがオブジェクトをインスタンスではないサブクラスにキャストしようとしたことを示すためにスローされます。たとえば、次のコードは ClassCastException を生成します。

 Object x = new Integer(0);
 System.out.println((String)x);

logcat の出力を見て、自分でそれを理解することができます。また、LogCat 出力を投稿して、正確な問題の場所をお知らせください。

于 2013-08-19T08:13:31.693 に答える