一·登录注册代码以及效果


先看注册页面,register.jsp 负责展示表单,让用户填写用户名、密码和备注信息。代码如下:
<%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>注册
doregister.jsp:注册信息弹框
表单提交后,doregister.jsp 处理注册逻辑:接收参数、连接Oracle数据库、自动生成用户编号(通过查最大编号+1),然后执行插入。根据结果弹出相应的提示框,并跳转到登录页或注册页。
<%@page import="ja va.sql.ResultSet"%><%@page import="ja va.sql.PreparedStatement"%><%@page import="ja va.sql.Connection"%><%@page import="ja va.sql.DriverManager"%><%@page import="oracle.jdbc.driver.OracleDriver"%><%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%//设置编码-设置请求对象的编号request.setCharacterEncoding("utf-8");//接收注册页面传递的数据String uname = request.getParameter("uname");String upwd = request.getParameter("upwd");String uinfo = request.getParameter("uinfo");//连接数据库Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1521:orcl";Connection con = DriverManager.getConnection(url, "scott", "tiger");/*查询到用户的最大编号最大编号+1,做为新添加的用户的编号*///这里的代码是用来 得到最新编号的int nextId=1;//做为新用户的编号PreparedStatement ps = con.prepareStatement("select max(uuid) from T277");//执行sql语句ResultSet rs= ps.executeQuery();if(rs.next()){//查询到最大的编号,加1,就是新数据的编号nextId = rs.getInt(1)+1;}//这里的代码 开始执行添加用户操作ps = con.prepareStatement("insert into T277 values(?,?,?,?)");ps.setInt(1, nextId);ps.setString(2, uname);ps.setString(3, upwd);ps.setString(4, uinfo);//执行sql语句int i = ps.executeUpdate();if(i>0){out.print("");}else{out.print("");}%>
login.jsp:登录
登录页面与注册类似,但多了跳转到注册页的按钮。表单提交到 dologin.jsp 进行验证。
<%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>登录
dologin.jsp:与数据库相连、存放登陆的用户
这个页面接收用户名和密码,查询数据库中的 T277 表。如果匹配则转发到主页面 index.jsp,否则弹出错误提示并返回登录页。
<%@page import="ja va.sql.ResultSet"%><%@page import="ja va.sql.PreparedStatement"%><%@page import="ja va.sql.DriverManager"%><%@page import="ja va.sql.Connection"%><%@page import="oracle.jdbc.driver.OracleDriver"%><%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%//接收login页面传递的数据String uname = request.getParameter("uname");String upwd = request.getParameter("upwd");//连接数据库//注册驱动类//OracleDriverClass.forName("oracle.jdbc.driver.OracleDriver");//连接数据库String url = "jdbc:oracle:thin:@localhost:1521:orcl";Connection con = DriverManager.getConnection(url, "scott", "tiger");//创建对象PreparedStatement ps = con.prepareStatement("select * from T277 where uname=? and upwd=?");//给占位符赋值ps.setString(1, uname);ps.setString(2, upwd);//执行sql语句ResultSet rs = ps.executeQuery();//处理结果if(rs.next()){//转发request.getRequestDispatcher("index.jsp").forward(request, response);}else{//失败out.print("");}//关闭连接%>
index.jsp:主界面
登录成功后进入主界面,这里展示所有用户列表,并提供了修改、详情、删除等操作链接。通过 JSP 脚本循环遍历结果集,动态生成表格行。
<%@page import="ja va.sql.ResultSet"%><%@page import="ja va.sql.PreparedStatement"%><%@page import="ja va.sql.DriverManager"%><%@page import="ja va.sql.Connection"%><%@page import="oracle.jdbc.driver.OracleDriver"%><%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>主页面
| 编号 | 用户名 | 密码 | 备注 | 操作 |
| <%=rs.getInt(1) %> | <%=rs.getString("uname") %> | <%=rs.getString("upwd") %> | <%=rs.getString(4) %> | 修改详情删除 |
update.jsp:修改
修改操作由 update.jsp 处理:接收修改表单提交的新数据,根据用户编号执行更新 SQL。更新成功或失败都会弹出提示并跳回主页面。
<%@page import="ja va.sql.PreparedStatement"%><%@page import="ja va.sql.DriverManager"%><%@page import="ja va.sql.Connection"%><%@page import="oracle.jdbc.driver.OracleDriver"%><%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%//设置编码-设置请求对象的编号request.setCharacterEncoding("utf-8");//接收修改页面传递的数据String uname = request.getParameter("uname");String upwd = request.getParameter("upwd");String uinfo = request.getParameter("uinfo");//获取要修改的用户编号String id = request.getParameter("uuid");//把字符串转换为整数编号int uuid = Integer.valueOf(id);//JDBC 删除 Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1521:orcl";Connection con = DriverManager.getConnection(url, "scott", "tiger");PreparedStatement ps = con.prepareStatement("update T277 set uname=?,upwd=?, uinfo=? where uuid="+uuid);ps.setString(1, uname);ps.setString(2, upwd);ps.setString(3, uinfo);int i = ps.executeUpdate();if(i>0){out.print("");}else{out.print("");}%>
doup.jsp:修改页面(帮助)
这是修改表单页,通过 URL 参数传递用户编号,将编号隐藏到表单的 action 中,供用户填写新数据后提交。
<%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here <%//获取要修改的用户编号String id = request.getParameter("uuid");//把字符串转换为整数编号int uuid = Integer.valueOf(id);%>
info.jsp:详情
详情页与修改表单类似,但数据是从数据库查询并填充到输入框中的,且只读展示(这里没有禁用,但可以理解为展示用途)。
<%@page import="ja va.sql.ResultSet"%><%@page import="ja va.sql.PreparedStatement"%><%@page import="ja va.sql.DriverManager"%><%@page import="ja va.sql.Connection"%><%@page import="oracle.jdbc.driver.OracleDriver"%><%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%//获取要修改的用户编号String id = request.getParameter("uuid");//把字符串转换为整数编号int uuid = Integer.valueOf(id);//JDBC 删除Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1521:orcl";Connection con = DriverManager.getConnection(url, "scott", "tiger");PreparedStatement ps = con.prepareStatement("select * from T277 where uuid="+uuid);ResultSet rs= ps.executeQuery();if(rs.next()){%><%} %>
dodel.jsp:删除界面
删除操作很简单:获取用户编号,执行 delete 语句,再根据结果弹出提示并跳转回主页面。
<%@page import="ja va.sql.PreparedStatement"%><%@page import="ja va.sql.DriverManager"%><%@page import="ja va.sql.Connection"%><%@page import="oracle.jdbc.driver.OracleDriver"%><%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%//获取要删除的用户编号String id = request.getParameter("uuid");//把字符串转换为整数编号int uuid = Integer.valueOf(id);//JDBC 删除Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@localhost:1521:orcl";Connection con = DriverManager.getConnection(url, "scott", "tiger");PreparedStatement ps = con.prepareStatement("delete T277 where uuid="+uuid);int i = ps.executeUpdate();if(i>0){out.print("");}else{out.print("");}%>
二·页面跳转的方式以及他们的区别
在 JSP 开发中,页面跳转是最常见的操作之一。这里用一个简单的登录验证例子来演示重定向和转发的用法及区别。
1、跳转路径并传递数据
假设用户名是 admin,密码是 123。登录成功时,我们有两种方式跳转到 success.jsp:重定向和转发。失败时则用 Ja vaScript 弹窗提示并返回登录页。
//假设法:假设我的用户名为admin 密码为123 if("admin".equals(name)&&"123".equals(pwd)){ //说明登录成功 跳转到success.jsp//1.重定向 将页面跳转 地址栏发生了改变 //不能将值传递到下一个界面 可以跳转到任意资源 在客户端发挥作用 response.sendRedirect("http://www.baidu.com");//2.转发 将页面跳转 可以将值传递到下一个界面 //但是地址栏不发生改变 而是停留在了之前的页面 只能转发到当前项目内资源 在服务器端发挥作用 //request.getRequestDispatcher("http://www.baidu.com").forward(request, response); } else{ //说明登录失败 提示用户并返回登录界面login.jsp js的跳转属于重定向 地址栏发生了改变 login-->dologin-->login out.print(""); }
2、页面跳转的两种方式和区别
下面用表格对比一下重定向和转发的核心差异:
重定向:地址栏发生改变 不能传值 可以跳转到任意资源 在客户端发挥作用
转发:地址栏不发生改变 能传值 只能跳转到当前项目内资源 在服务器端发挥作用
语法:
重定向:response.sendR()
转发:request.getreq .for(request,response)
三·其他
最后补充几个开发中经常用到的零散知识点,方便直接拿来用。
1、jdbc连接Oracle
连接字符串固定写法,注意替换本地监听端口和服务名:
URL:jdbc:oracle:thin:@localhost:1521:orcl
2、乱码
在接收请求参数前设置统一编码,避免中文乱码:
request.setCharacterEncoding("utf-8");
3、添加数据时,获取最新编号
自增编号的常用技巧:先查询当前最大编号,加1后作为新记录的主键。代码片段如下:
//这里的代码是用来 得到最新编号的 int nextId=1;//做为新用户的编号 PreparedStatement ps = con.prepareStatement("select max(uuid) from T277"); //执行sql语句 ResultSet rs= ps.executeQuery(); if(rs.next()){ //查询到最大的编号,加1,就是新数据的编号 nextId = rs.getInt(1)+1; }