1.正文
1. 使用jsp+dao完成注册。
2. 使用jsp+dao完成增删改查的操作。3. 完成登录(把用户信息保存到session会话中)--注册
4. 主页---显示所有部门信息 (如果没有登录不允许访问主页)
5. 删除 修改 添加功能.
6. 完成退出。
2.注册 (增加)
2.1流程
register.jsp
<%--
Created by IntelliJ IDEA.
User: 2240061397
Date: 2022/5/12
Time: 18:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册页面</title>
<style type="text/css">
.error{
color:red;
font-size:12px;
font-weight:bold;
}
</style>
<script>
function checkUserName(){
var username=document.getElementsByName("username")[0].value;
if (username==null ||username.trim()==""){
yhmError.innerHTML="用户名不能为空";
return false;
}
return true;
}
function checkPassword(){
//获取密码输入框的值
var password=document.getElementsByName("password")[0].value;
if(password==null || password.trim()==""){
pwdError.innerHTML="密码不能为空";
return false;
}
return true;
}
function checkRealname(){
var realname=document.getElementsByName("realname")[0].value;
if(realname==null || realname.trim()==""){
xmError.innerHTML="姓名不能为空";
return false;
}
return true;
}
function ck(){
if(checkUsername()&&checkPassword()&&checkRealname()){
return true;
}
return false;
}
</script>
</head>
<body>
<%--registerDo 后缀为Do的都是处理页面,就是再浏览器不显示该界面 他就像的一个过度。页面和dao之间的联系。--%>
<form action="registerDo.jsp" method="post">
用户名:
<input type="text" name='username' onblur="checkUsername()" placeholder="请输入用户名"><br>
<div id="yhmError" class="error"></div>
密码:
<input type="password" name='password' onblur="checkPassword()" placeholder="请输入密码"><br>
<div id="pwdError" class="error" ></div>
姓名:
<input type="text" name="realname" onblur="checkRealname()" placeholder="请输入姓名"><br>
<div id="xmError" class="error"></div>
<input type="submit" value="提交">
</form>
</body>
</html>
registerDo.jsp
<%@ page import="com.qy151.test.dao.UserDao" %>
<%@ page import="com.qy151.test.entity.User" %><%--
Created by IntelliJ IDEA.
User: 2240061397
Date: 2022/5/12
Time: 18:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//设置编码
request.setCharacterEncoding("utf-8");
//接受注册的信息
String username = request.getParameter("username");
String password = request.getParameter("password");
String realname = request.getParameter("realname");//""
//通过调用dao方法把接受的注册信息存入数据库表中。
UserDao userDao = new UserDao();
User user=new User(username,password,realname);
userDao.insert(user);
//跳转
response.sendRedirect("login.jsp");
%>
</body>
</html>
3. 查询所有的学生信息并展示到网页
3.1封装一个学生的实体类
public class Student {
private int id;
private String stuName;//字段名stu_name 那么我们java属性尽量符合驼峰命名
private String address;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3.2封装一个学生的操作类
//查询所有学生信息的方法
public List<Student> findAll(){
List<Student> list = new ArrayList<>();
try {
getConn();//不行因为closeAll关闭的是父类中的资源
String sql="select * from t_student";
ps = connection.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
Student student=new Student();
student.setId(rs.getInt("id"));
student.setStuName(rs.getString("stu_name"));
student.setAddress(rs.getString("address"));
student.setAge(rs.getInt("stu_age"));
list.add(student);
}
}catch (Exception e){
e.printStackTrace();
}finally {
closeAll();
}
return list;
}
3.3页面调用学生操作类中查询所有的方法。
<%@ page import="com.ysh.dao.StudentDao" %>
<%@ page import="com.ysh.entity.Student" %>
<%@ page import="java.util.List" %><%--
Created by IntelliJ IDEA.
User: ysh
Date: 2022/5/12
Time: 20:35
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
===============登录成功欢迎来到qy151的主场=========================
<table border="1" cellpadding="0" cellspacing="0" width="600" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>地址</th>
<th>操作</th>
</tr>
<%
StudentDao studentDao = new StudentDao();
List<Student> list = studentDao.findAll();
for (Student student : list) {
//插入html标签 out.print(); 这种拼接字符串麻烦
%>
<tr>
<td><%=student.getId()%></td>
<td><%=student.getStuName()%></td>
<td><%=student.getAge()%></td>
<td><%=student.getAddress()%></td>
<td>删除 修改</td>
</tr>
<%
}
%>
</table>
</body>
</html>
4.删除
4.1原理
deleteDo.jsp
<%@ page import="com.qy151.test.entity.Student" %>
<%@ page import="com.qy151.test.dao.StudentDao" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//接受传递的id值
String id = request.getParameter("id");
//调用studentDao中的删除方法把接受的id传递给该方法。
StudentDao studentDao=new StudentDao();
studentDao.delete(Integer.parseInt(id));//为什么报错- Integer.parseInt(id) 把数字字符串转换为整形
//跳转
response.sendRedirect("success.jsp");
%>
</body>
</html>
studentDao:
//根据id删除学员信息 测试该方法
public void delete(int id){
String sql="delete from t_student where id=?";
edit(sql,id);
}
1. 修改功能.
2. 完善我们的登录功能。
3. jsp中9个内置对象。
4. jsp中四大域对象的作用范围。
5.修改功能
update.jsp
<%@ page import="com.ysh.dao.StudentDao" %>
<%@ page import="com.ysh.entity.Student" %><%--
Created by IntelliJ IDEA.
User: ysh
Date: 2022/5/12
Time: 14:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改界面</title>
</head>
<body>
<%
String id = request.getParameter("id");
//根据id查询该id对应的学员信息---Dao
StudentDao studentDao = new StudentDao();
Student student = studentDao.findById(Integer.parseInt(id));
//由于修改需要按照id进行修改 所以我们应该把id传递过去
%>
<form action="updateDo.jsp" method="post">
<%--隐藏域就是再浏览器上看不见该输入框,但是该隐藏域也属于表单元素。会随着表单的提交而被提交--%>
<input type="hidden" value="<%=student.getId()%>" name="id"/>
<%-- 编号:<input type="text" value="<%=student.getId()%>" name="id" readonly/><br>--%>
账号:<input type="text" value="<%=student.getStuName()%>" name="stuName"/><br>
年龄:<input type="text" value="<%=student.getAge()%>" name="age"/><br>
账号:<input type="text" value="<%=student.getAddress()%>" name="address"/><br>
<%--整个按钮是表单提交按钮 表单提交只会提交表单元素的数据。--%>
<input type="submit" value="确认修改"/>
<%--这个按钮是普通按钮它不会让表单提交走。
<input type="button" value="迪纳基" onclick="location.href='a.jsp?'"/>
--%>
</form>
</body>
</html>
查询的Dao:
//根据id查询学员信息
public Student findById(int id){ //怀疑数据库中的类型为int. 可以使用string
Student student=null;
try {
getConn();//不行因为closeAll关闭的是父类中的资源
String sql = "select * from t_student where id=?";
ps = connection.prepareStatement(sql);
ps.setInt(1,id);
rs = ps.executeQuery();
while (rs.next()) {
student = new Student();
student.setId(rs.getInt("id"));
student.setStuName(rs.getString("stu_name"));
student.setAddress(rs.getString("address"));
student.setAge(rs.getInt("stu_age"));
}
}catch (Exception e){
e.printStackTrace();
}finally {
closeAll();
}
return student;
}
updateDo.jsp
<%@ page import="com.qy151.test.dao.DeptDao" %>
<%@ page import="com.qy151.test.entity.Dept" %><%--
Created by IntelliJ IDEA.
User: ysh
Date: 2022/5/12
Time: 19:47
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//编码设置
request.setCharacterEncoding("utf-8");
//接受修改后的学员信息
String id = request.getParameter("id");
String name = request.getParameter("stuName");
String age = request.getParameter("age");
String address = request.getParameter("address");
// 输出你接受的数据---目标防止有错误。
//把接受的信息放入数据库。---dao.
StudentDao studentDao=new StudentDao();
Student s=new Student(Integer.parseInt(id),name,address,Integer.parseInt(age));
studentDao.update(s);
//跳转
response.sendRedirect("success.jsp");
%>
</body>
</html>
修改的dao:
//修改学员信息---你必须测试该方法是否正确。
public void update(Student student){ //这里传递Student对象目的为后期框架做嫁衣
String sql = "update t_student set stu_name=?,stu_age=?,address=? where id=?"; edit(sql,student.getStuName(),student.getAge(),student.getAddress(),student.getId());
}
6.登录的完善
6.1登录失败后应该有提示
登录失败时跳转到登录页面携带一个参数
登录界面
6.2 登录成功后保存登录的信息。
把登录者的信息保存起来以供其他页面能够拿到当前登录者的信息。
把登录者的信息保存到哪里了? ----- session会话中。
什么是session会话? 浏览器与服务器进行会话的过程。当浏览器关闭那么表示会话结果。
session中保存的周期: 一次会话,如果会话结束那么保存到session中的数据也会丢失。
什么时候会话结束: (1)浏览器关闭 (2)服务器关闭。(3)超时 默认30分钟 如果30分钟浏览器没有刷新则超时,如果30分钟内刷新了则重新计时。
jsp中内置了一个session对象。
修改我们的登录方法:
//根据账号和密码查询数据库
public User findByNameAndPwd(String name,String pwd){
User user=null;
try{
connection= getConn();
String sql="select * from t_user where username=? and password=?";
ps=connection.prepareStatement(sql);
ps.setObject(1,name);
ps.setObject(2,pwd);
rs = ps.executeQuery();
while (rs.next()){//进入while表明根据账号和密码查询出结果了。
user=new User();//实例化对象。
user.setUsername(rs.getString("username"));
user.setRealname(rs.getString("realname"));
user.setPassword(rs.getString("password"));
user.setId(rs.getInt("id"));
}
}catch (Exception e){
e.printStackTrace();
}finally {
closeAll();
}
return user;
}
修改loginDo.jsp
session对象中常见的方法
1. setAttribute(key,value);key必须为String value是Object类型。
2. removeAttribute(key);移除session中指定的key
3. clear():清空session中所有的元素。
4. getAttribute(key);根据key获取session会话的数据
6.3session会话的使用。---保存登录者的信息
如果没有登录 无法访问其他页面。
根据session中是否有用户 的信息,如果有表示登录成功,如果没有则表示没有登录。
作用:
1. 完成登录(把用户信息保存到session会话中)--注册
2. 主页---显示所有部门信息 (如果没有登录不允许访问主页)
3. 删除 修改 添加功能.
4. 完成退出。
6.4session会话退出
editDo.jsp