# LoginPanel



## Gelöschtes Mitglied 5909 (10. Nov 2008)

Hallo Zusammen

ich möchte für eine Webapp ein Login Panel bauen, dass sozusagen auf jeder Seite oben steht.
Dafür habe ich eine userpanel.jsp und ein UserPanel Servlet.

Den User hole ich mir aus der Session, fals er vorhanden ist soll er angezeigt werden, falls nicht ein Login Formular.
beim Login wird der User über ejb und jpa aus der db geholt und anschließend in die Session gesetzt.
Zustäzlich gibt noch ein register wenn der user nicht eingeloggt ist und ein edit wenn er eingeloggt ist.

Aber wie forwarde ich in einem Link auf die Servlet actions? (bei register / edit)
Das Servlet dahinter soll dann zwar auch nur wieder forwarden, aber den forward auf die Richtige jsp sollte doch das Servlet übernehmen.
Wenn ich <jsp:forward ../> nehme wird ja immer geforwardet.

Wie baue ich links / forms die auf bestimmte actions des Servlet verweisen?

Wenn ich wie unten <input type="hidden" name="action" value="login" />
in der form habe, wird sicherlich immer action = login sein.


Folgendes hab ich bisher:



```
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="de.mas.ejb.persistence.User" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<% User user = (User) session.getAttribute("user"); %>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    
    <body>
        <c:if test="${user == null}">
            <form action="UserServlet" method="POST">
                <input type="hidden" name="action" value="login" />
                <table>
                    <tbody>
                        <tr>Username:      </tr>
                        <tr style="padding-left:5px"><input name="username" /></tr>
                        <tr style="padding-left:5px">Password:</tr>
                        <tr style="padding-left:5px"><input name="password" /></tr>
                        <tr style="padding-left:5px"><button>Login</button></tr>
                        <tr style="padding-left:5px"><jsp:forward page="UserServlet"><jsp:param name="action" value="login"/></jsp:forward></tr>
                    </tbody>
                </table>
            </form>
        </c:if>
        <c:if test="${user != null}">
            <form action="UserServlet" method="POST">
                <table>
                    <tbody>
                        <tr>Logged in as ${user.username}</tr>
                        <tr>Edit</tr>
                    </tbody>
                </table>
            </form>
        </c:if>
    </body>
</html>
```


```
import de.mas.ejb.session.UserManagerBean;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class UserServlet extends HttpServlet {
    
    @EJB
    UserManagerBean userManager;
    
    @Override
    public void init() throws ServletException {
        super.init();
    }
    
    
    
    
    /** 
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession(true);
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        try {
            String action = request.getParameter("action");
            if (action.equals("login")) {
                // do login
            } else if (action.equals("register")) {
                // forward register page
            } else if (action.equals("edit")) {
                // forward edit page
            }
        } finally { 
            out.close();
        }
    } 

    
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
```


----------



## Gelöschtes Mitglied 5909 (10. Nov 2008)

hab das jetzt so gemacht:


```
<td>[url="<%= request.getContextPath() %>/UserServlet?action=logout"]Logout[/url]</td>
```

geht das auch schöner?


----------



## Gast (11. Nov 2008)

Es empfiehlt sich ein Framework wie Tiles, nur mit Standard Forwards und Includes ist bald schicht im schacht, da diese wenig können und nie kontextfrei sind.


----------

