简体   繁体   English

当我登录时,jsp表单不操作servlet

[英]when i was login , jsp form doesn't action servlet

I am trying to create a web app with java servlets and jsp. 我正在尝试使用Java Servlet和JSP创建Web应用程序。 I am facing a problem when i login as a admin and trying to execute a servlet from a jsp form which only a admin can see. 当我以管理员身份登录并尝试从仅管理员可以看到的jsp表单执行servlet时,我遇到了一个问题。

my login form: 我的登录表格:

<script type="text/javascript" src="./js/login_validation.js"></script>
<form name="loginform" onsubmit="return validationlogin();"method="post"action="Login">
<table><tr>
<td><input type="text" name="username"/></td>
<td><input type="password" name="password"/></td>
<td><input type="submit" name="login" value="login" /></td>
</tr></table></form>

my login java servlet: 我的登录Java Servlet:

public class Login extends HttpServlet {
Connection connection;
PreparedStatement ps;
ResultSet rs;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException{
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost/psd";
        String uid = "root";
        String psw = "root";
        String sql = "SELECT name,password,role FROM users where username='"+username+"'";

        try {
            Class.forName(driver);
            connection=DriverManager.getConnection(url,uid,psw);
            ps = connection.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                String name= rs.getString(1);
                String pass= rs.getString(2);
                String role= rs.getString(3);
                if(password.equals(pass)){
                    HttpSession user = request.getSession(true);
                    user.setAttribute("user", name);
                    HttpSession login = request.getSession(true);
                    login.setAttribute("login", "true");
                    if(role.equals("a")){
                        HttpSession r = request.getSession(true);
                        r.setAttribute("role", "admin");
                    }
                    else if(role.equals("p")){
                        HttpSession r = request.getSession(true);
                        r.setAttribute("role", "pro");
                    }
                    else{
                        HttpSession r = request.getSession(true);
                        r.setAttribute("role", "student");
                    }
                }
            }
            connection.close();
            response.sendRedirect("index.jsp");
        }
        catch(SQLException sx){
        } 
        catch (ClassNotFoundException ex) {
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

And now when i login as admin i want to create a new user. 现在,当我以管理员身份登录时,我想创建一个新用户。

my create user form: 我的创建用户表单:

<script type="text/javascript" src="./js/register_validation.js"></script>
<form name="createuser" onsubmit="return validationregister();"
method="post" action="Admincreateuser">
<table>
<tr><td>name</td><td>:</td><td width="210px"><input type="text" name="name"/></td></tr>
<tr><td>surname</td><td>:</td><td><input type="text" name="surname"/></td></tr>
<tr><td>username</td><td>:</td><td width="210px"><input type="text" name="username"/>
</td></tr>
<tr><td>e-mail</td><td>:</td><td width="210px"><input type="email" name="email"/>
    </td></tr>
<tr><td>password</td><td>:</td><td width="210px"><input type="password" name="pass1"/>
    </td></tr>
<tr><td>repeat password</td><td>:</td><td width="210px"><input type="password" 
    name="pass2"/></td></tr>
<tr><td>role</td><td>:</td><td width="210px">
    <select name="role">
    <option value="s">student</option>
    <option value="p">professor</option>
    <option value="a">administrator</option>
    </select>
</td></tr>
<tr><td><td></td></td><td align="left">
    <input type="reset" value="clean" onclick="cleanregister();"/>
    <input type="submit" name="createuser" value="create user"/>
</td><td></td></tr>
</table>
</form>

my create user java servlet: 我的创建用户Java Servlet:

public class Admincreateuser extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String name=request.getParameter("name");
        String surname=request.getParameter("surname");
        String email=request.getParameter("email");
        String username=request.getParameter("username");
        String password=request.getParameter("pass1");
        String role=request.getParameter("role");
        if(name==null || surname==null || email==null || username==null || 
            password==null){
            response.sendRedirect("index.jsp?cuser");
        }
        else{
            Connection connection;
            PreparedStatement ps;

            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost/psd";
            String uid = "root";
            String psw = "root";
            String sql = "INSERT INTO users 
            (name,surname,email,username,password,role) VALUES ('"+name+"', 
            '"+surname+"', '"+email+"', '"+username+"', '"+password+"','"+role+"');";
            try {
                Class.forName(driver);
                connection=DriverManager.getConnection(url,uid,psw);
                ps = connection.prepareStatement(sql);
                ps.executeUpdate();
                connection.close();
            }
            catch(SQLException sx){
            } 
            catch (ClassNotFoundException ex) {
            }
        }
    }
}

my logout java servlet: 我的注销Java Servlet:

public class Logout extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //request.getSession(false).setAttribute("login", null);
        //request.getSession(false).setAttribute("role", null);
        request.getSession(false).invalidate();
        response.sendRedirect("index.jsp");
   }
}

my web.xml: 我的web.xml:

<servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>log.Login</servlet-class>
</servlet>
<servlet>
    <servlet-name>Logout</servlet-name>
    <servlet-class>log.Logout</servlet-class>
</servlet>
<servlet>
    <servlet-name>Admincreateuser</servlet-name>
    <servlet-class>admin.Admincreateuser</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Logout</servlet-name>
    <url-pattern>/Logout</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Admincreateuser</servlet-name>
    <url-pattern>/Admincreateuser</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

And here is my problem. 这是我的问题。 I login as admin go to createuser form fill the spaces and when i click submit ... the Admincreateuser servlet doesn't start and the site redirecting me to home page and i logout. 我以管理员身份登录,进入createuser表单,填写空格,然后单击提交... Admincreateuser servlet无法启动,该站点将我重定向到主页,然后注销。

one more thing , i delete my create user form and i put only a submit button which doesn't have any action and method. 还有一件事,我删除了创建用户表单,只放了一个提交按钮,它没有任何操作和方法。 When i click it same results log me out and home page. 当我单击它时,相同的结果将我注销并返回主页。

when i write on the url index.jsp?cuser and i am not login fill the form and submit my servlet works and i can create a user. 当我在url index.jsp?cuser上写并且我没有登录时,填写表格并提交我的servlet工程,然后我可以创建一个用户。 But when i am login for some reason the servlet doesn't action 但是当我出于某种原因登录时,servlet不起作用

if this help more my index.jsp: 如果这有助于我的index.jsp:

<%@page contentType="text/html;charset=UTF-8"%>
    <jsp:include page="includes/head.jsp"/>
<%
    if(session.getAttribute("login")==null){
%>
    <jsp:include page="includes/loginform.jsp"/>
<%
    }
    else{
%>    
    <jsp:include page="includes/logoutform.jsp"/>
<%
    }
%>
    <jsp:include page="includes/head2.jsp"/>
<%
    if(session.getAttribute("role")=="admin"){
%>
        <jsp:include page="includes/navbaradmin.jsp"/>
<%
    }
    else if(session.getAttribute("role")=="pro"){
%>
        <jsp:include page="includes/navbarpro.jsp"/>
<%
    }
    else if(session.getAttribute("role")=="student"){
%>
        <jsp:include page="includes/navbarstudent.jsp"/>
<%
    }
    else {
%>
         <jsp:include page="includes/navbar.jsp"/>
<%
    }
%>
<%
    if(request.getParameter("register")!=null)
    {
        if(session.getAttribute("login")==null){
%>
            <jsp:include page="includes/register.jsp"/>
<%      }
        else{
%>
            <jsp:include page="includes/home.jsp"/>
<%
        }
    }
    else if(request.getParameter("welcome")!=null){
        if(session.getAttribute("login")==null){
%>
            <jsp:include page="includes/welcome.jsp"/>
<%      }
        else{
%>
            <jsp:include page="includes/home.jsp"/>
<%      }
    }
    else if(request.getParameter("cuser")!=null){
        if(session.getAttribute("role")=="admin"){
%>
            <jsp:include page="includes/cuser.jsp"/>
<%      }
        else{
%>
            <jsp:include page="includes/home.jsp"/>
<%      }
    }else{
%>
        <jsp:include page="includes/home.jsp"/>
<%
    }
%>
<jsp:include page="includes/footer.jsp"/>

sorry about the a lot of codes 对很多代码感到抱歉

I am new in the jsp and servlets and i appreciate any help. 我是jsp和servlet的新手,感谢您的帮助。 Thank you 谢谢

I guess your directory listing is wrong , 我想您的目录列表有误,

try , 尝试一下

<form name="createuser" onsubmit="return validationregister();"
method="post" action="./Admincreateuser">

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM