JSP&Servlet完成登录页面

JSP&Servlet完成登录页面

先给出项目文件结构,方面理解后面路径的写法
在这里插入图片描述
1.web.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>servlet.LoginServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/servlet/LoginServlet</url-pattern>
<!--        注意:这里servlet文件的地址前要加上  / 号!!!-->
    </servlet-mapping>

<!--    更改默认的首页地址,用welcome-file-list-->
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

2.login.js代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login Page</title>
</head>
<body>
<%--    注意:jsp跳转到servlet时,servlet文件的地址要和web.xml中的url-pattern地址相同--%>
<%--         但是前面没有 /--%>
    <form action="servlet/LoginServlet" method="post">
        <table>
            <tr>
                <td>Username:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="login"></td>
            </tr>
        </table>
    </form>
</body>
</html>

3.LoginServlet.java代码
(这里用户名和密码都直接写死在servlet中了)

package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        if("Tom".equals(username)&&"12345678".equals(password)){
            request.getRequestDispatcher("/LoginSucc.jsp").forward(request,response);
        }
        else{
            request.getRequestDispatcher("/LoginFailed.jsp").forward(request,response);
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

4.LoginSucc.jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login successfully</title>
</head>
<body>
<%
    String username = request.getParameter("username");
%>
    <div>
        <p>Login successfully! Welcome back,<%=username%>.</p>
    </div>
</body>
</html>

5.LoginFailed.jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login failed</title>
</head>
<body>
    <p>Login failed! Please check your username or password and try again.</p>
    <a href="../login.jsp">login page</a>
<%--   法一: 注意,这里地址最好回到上一级目录,再找login.jsp。--%>
<%--         因为该页面是由LoginServlet.java跳转过来的,所以当前目录是在servlet下面,但是jsp文件不在servlet下面,所以要返回上一级才找的到jsp--%>
<%--   法二: <a href="/login.jsp">login page</a>--%>
<%--         直接根目录下找login.jsp--%>
</body>
</html>

上面的代码是由纯jsp完成登录改过来的
具体有几点改动以及写代码思路如下
1.总体思路:
写首页login.jsp——>写LoginServlet.java处理首页发过的数据,并且根据不同情况跳转到登录成功、失败页面——>写LoginSucc.jsp,提示登录成功,并且显示当前用户的用户名——>写LoginFailed.jsp,直接提示登录错误,并且给一个首页链接返回

2.将dologin.jsp中的代码直接放到LoginServlet中,就不再用jsp脚本的方式了

3.增加了登录成功页面中,显示用户名的部分。采用jsp脚本获取LoginServlet.java传过来的数据,再使用jsp表达式显示用户名信息

4.利用welcome-file-lis将默认的首页index.jsp,改为了login.jsp

5.一定要注意各文件间跳转路径的不同书写方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章