JavaWeb 2

课后作业(加分)

用户表:
id 主键  int
账号:username   varchar(50)
密码:password    varchar(50)

项目启动,显示注册页面和登录页面。

实现注册功能和登录功能。
如果登录成功进入欢迎界面,显示用户的用户名。

1.创建相关的数据库表并插入测试数据

2.创建一个Web项目并通过tomcat部署

3.搭建基本的项目模板:导入基本的jar包(mysql驱动包,servlet的包,jsp的包)
创建基本的package    ----   entity   dao   servlet   test   util

4.创建必备的类----    和数据库相对应的实体类    和  JDBCUtil    并编写测试类测试

以上四个步骤:不管什么项目 都是固定的。
后续步骤就是根据题目需求 改变相关的写法,但是思路也是固定的。

5.根据题目需求:
编写注册页面和登录页面 以及页面的调整。

如何快速创建实体类:
老写法:  私有化声明属性:  提供无参,有参,set/get  toString   至少需要1分钟、


有网的环境下(第一次有网即可(因为需要下载idea的插件))
第一次弄好之后,后续就随意有没有网了。

所以该技术  只需要在自己的笔记本上执行即可。  这个技术 是未来即使工作了  都肯定会用。 

如何使用:
1.有网的环境下下载插件  file - setting  - plugins  - Marketplace  搜索: Lombok  注意大小写
看到右侧有个红辣椒 即可  点击install安装即可。 重启idea

2.使用相关的jar包。


凡是如果需要jar包:去网上找的缺点: 鱼龙混杂,大部分都是广告,就算提供了下载地址 也给你捆包了很多垃圾软件。
版本也可能不是你想要的。
所以应该去这个,应有尽有:https://mvnrepository.com/

搜索相关名字 点击jar超链接 下载。然后导入项目内部。

然后只需要在实体类的上方 加上
@Data
@AllArgsConstructor
@NoArgsConstructor
即可。
表示生成: 无参和全参 和set/get 和toString
如果你想使用 部分参数的构造方法 就需要自己去生成了


如果想要精美前台页面:
提供一个免费的下载网址:https://www.jq22.com/


自动登录的原理:

用户或网站  在第一次登录的时候 将你的账号和密码保存在你的客户端---cookie中
当你下次访问,直接取出第一次登录的时候保存的账号密码进行直接登录  来实现自动登录的效果
问题:非法用户 可以根据浏览器保存的账号密码进行 获取   解决方式:加密
过滤器讲解:
    全称:Servlet过滤器   Servlet就是Servlet    Servlet过滤器就是Servlet过滤器

    翻译:Filter

    功能:客户端发请求给服务端。 服务端回响应给客户端   进行代码的处理。

    用处: 最常见的编码过滤器   登录校验过滤器   等等

    如何实现:一般放在filter包下

    如何创建一个Filter
        1.创建一个类
        2.实现Filter接口 注意是Servlet下的Filter接口
        3.重写该接口下的所有方法分别是init(初始化) destory(消亡)  doFilter(过滤的相关代码)
        4.添加注解 @WebFilter("/Xxx")   Xxx表示我要过滤哪些请求或响应  一般来说都写/*  表示过滤所有请求
        5.写相关代码。
        6.根据条件进行放行。通过方法内部提供的参数:filterChain 进行放行


    客串知识点:
        过滤器又称拦截器   如果过滤器中没有写  “放行”  相关代码  项目将显示一个空白页面。
        所以正确的写法:  如果过滤成功就放行。  如果过滤失败就跳转到指定页面

    客串知识点2:
        一个项目中可以存在多个过滤器   那么就存在一个过滤器的优先级问题
        优先级的原则 也很简单:根据类名的首字母

   客串知识点3:
            过滤器内部提供的request和response 是ServletRequest   ServletResponse

            但是Servlet提供的request和response 是HttpServletRequest   HttpServletResponse

            然后HttpServletRequest的request和HttpServletResponse的response的功能 是远多于:
            ServletRequest和ServletResponse的request和response

            所以如果该过滤器只需要实现低级功能 就无须转换。
            如果该过滤器需要实现高级功能就需要在方法的内部进行强转
             HttpServletRequest req = (HttpServletRequest)servletRequest;


             利用过滤器实现 登录校验:
                凡是没经过登录校验    无法访问到 后台页面的。

                传统思路:  在每个页面都加上登录校验 如果有1000个隐私页面 我就要1000个校验

                正常思路:  创建一个Filter过滤器 实现登录校验。

<div align="center">
    <h3>登录表单</h3>
    <h5> ${info} </h5>
    <form action="LoginServlet" method="post">
        账号:<input type="text" name="username"> <br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录">
        <hr>
        <a href="reg.jsp">没有账号?转去注册</a>
    </form>
</div>
<div align="center">
    <h3>注册表单</h3>
    <h6>${info}</h6>
    <form action="RegServlet" method="post">
        账号:<input type="text" name="username"> <br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="注册">
        <hr>
        <a href="login.jsp">已有账号?转去登录</a>
    </form>
</div>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!--
    如果容器中的数据是简单的单个对象 就使用EL表达式  直接通过 \${xxx}来渲染即可
   如果容器中的数据是复杂的集合对象 就使用JSTL表达式
    步骤1:1.引入  2.通过foreach标签便利
-->

<html>
<head>
    <title>Title</title>
    <style>
        td{
            width: 200px;
        }
    </style>
    <link href="css/bootstrap.css" rel="stylesheet">
</head>
<body>
<div align="center">
    欢迎登录成功~~~  ${info}  用户名为:${username}
    <br>
    查询页面
    <table  class="table table-striped table-hover">
        <Tr>
            <td>编号</td>
            <td>账号</td>
            <td>密码</td>
            <td>删除</td>
            <td>修改</td>
        </Tr>

        <!--后面的tr td都要从数据库中查询数据,然后渲染 -->
        <c:forEach items="${list}"  var="aaa" >
            <Tr>
                <td>${aaa.id}</td>
                <td>${aaa.username}</td>
                <td>${aaa.password}</td>
                <td><button id="${aaa.id}" class="btn btn-outline-danger">删除</button> </td>
                <td><button class="btn btn-outline-warning"><a href="update.jsp?id=${aaa.id}&username=${aaa.username}&password=${aaa.password}">修改</a></button></td>
            </Tr>
        </c:forEach>


    </table>


</div>


<script src="js/bootstrap.js" ></script>
<script>
    var btn = document.getElementsByClassName("btn-outline-danger");

    for(let i = 0;i<btn.length;i++){
        btn[i].onclick = function (){
            let b = confirm("是否删除?");
            if (b){
                //获取当前按钮的id属性
                let id = this.getAttribute("id");
                location.href = "/DelServlet?id=" + id;

            }
        }
    }

</script>

</body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值