课后作业(加分)
用户表:
id 主键 int
账号:username varchar(50)
密码:password varchar(50)项目启动,显示注册页面和登录页面。
实现注册功能和登录功能。
如果登录成功进入欢迎界面,显示用户的用户名。1.创建相关的数据库表并插入测试数据
2.创建一个Web项目并通过tomcat部署
3.搭建基本的项目模板:导入基本的jar包(mysql驱动包,servlet的包,jsp的包)
创建基本的package ---- entity dao servlet test util4.创建必备的类---- 和数据库相对应的实体类 和 JDBCUtil 并编写测试类测试
以上四个步骤:不管什么项目 都是固定的。
后续步骤就是根据题目需求 改变相关的写法,但是思路也是固定的。5.根据题目需求:
编写注册页面和登录页面 以及页面的调整。如何快速创建实体类:
老写法: 私有化声明属性: 提供无参,有参,set/get toString 至少需要1分钟、
有网的环境下(第一次有网即可(因为需要下载idea的插件))
第一次弄好之后,后续就随意有没有网了。所以该技术 只需要在自己的笔记本上执行即可。 这个技术 是未来即使工作了 都肯定会用。
如何使用:
1.有网的环境下下载插件 file - setting - plugins - Marketplace 搜索: Lombok 注意大小写
看到右侧有个红辣椒 即可 点击install安装即可。 重启idea2.使用相关的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>
JavaWeb 2
最新推荐文章于 2024-10-11 17:30:36 发布