一.页面跳转方式
1.1 JavaScript方式跳转
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
页面跳转的方式
1.通过HTML超链接的方式进行跳转
<a href = "路径">资源地址</a>
2.通过js的location对象进行页面跳转
window.location.href = "路径";
-->
<!-- 通过超链接跳转到index.jsp页面 -->
<button onclick = "add();">跳转到index.jsp</button>
<script type="text/javascript">
function add(){
/* 通过js的location对象进行页面跳转 */
location.href = "index.jsp?result=123";
}
</script>
</body>
</html>
<%@ page import="java.util.Scanner" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>欢迎来到我的主页</h2>
<%
request.setCharacterEncoding("utf-8");//设置编码
//获取超链接上携带的参数
String username = request.getParameter("username");
out.println("用户名为: "+username);
/* 获取jslocation对象.href中携带的参数 */
String result = request.getParameter("result");
out.println("<br/>result = "+result);
%>
</body>
</html>
1.2 Java方式跳转
① 转发
概述 : 由服务端进行的页面跳转
方式 :
(1)获取转发器====》RequestDispatcher rd = request.getRequestDispatcher("/跳转的地址")
(2)实现转发====》转发器对象.forward(request,response);
通常简写:request.getRequestDispatcher("/跳转的地址").forward(request,response);
特点 :
(1)地址栏不发生变化,显示的是上一个页面的地址
(2)请求次数:只有1次请求,因为转发是服务端行为。
(3)根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
(4)请求域中数据不会丢失
② 重定向
概述 : 由浏览器端进行的页面跳转
方法 : response.sendRedirect("要跳转的地址");
特点 :
(1)地址栏:显示新的地址
(2)请求次数:2次
(3)根目录:http://localhost:8080/ 没有项目的名字
(4)请求域中的数据会丢失,因为是2次请求
③ 注意事项
(1) 什么时候使用转发,什么时候使用重定向?
如果要保留请求域中的数据,使用转发,否则使用重定向。
以后访问数据库,增删改使用重定向,查询使用转发。
(2) 转发或重定向后续的代码是否还会运行?
无论转发或重定向后续的代码都会执行
④ 重定向和转发的区别
二.JDBC
1.1 主要功能
与数据库建立连接,执行SQL语句,处理结果
1.2 常用对象
① DriverManager
依据数据库的不同,管理JDBC驱动
② Connection
负责连接数据库并担任传送数据的任务
③ PreparedStatement
由 Connection 产生、负责执行SQL语句
④ ResultSet
负责保存Statement执行后所产生的查询结果
1.3 java通过jdbc连接Oracle数据库进行交互的步骤
① 加载JDBC驱动
Class.forName(JDBC驱动类);
② 与数据库建立连接
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","admin");
③ 发送SQL语句,并得到返回结果
④ 处理返回结果
⑤ 释放资源
三.案例
思路 : 注册页面如果输入数据库中定义的一模一样的数据时,我们就返回注册页面,重新注册,相反如果输入不一样的就注册成功.
//Oracle数据库
create table tb_user(
uuid number primary key,
uname varchar2(100),
upwd varchar2(100),
usex varchar2(2),
uhobby varchar2(100),
uaddress varchar2(100)
)
insert into tb_user values(1,'小哈','123','男','打游戏','湖南');
insert into tb_user values(2,'小席','123','女','打小哈','湖南');
insert into tb_user values(3,'小话','123','男','打小席','湖南');
commit;
select * from tb_user
//注册页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="doRegistered.jsp" method="post">
<table>
<h2>注册界面</h2>
<tr>
<td>用户名:</td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="upwd"></td>
</tr>
<tr>
<td>性别:</td>
<td><input type="text" name="usex"></td>
</tr>
<tr>
<td>爱好:</td>
<td><input type="text" name="uhobby"></td>
</tr>
<tr>
<td>地址:</td>
<td><input type="text" name="uaddress"></td>
</tr>
<tr>
<td rowspan="2"><input type="submit" value="注册"></td>
</tr>
</table>
</form>
</body>
</html>
//中转页面
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//设置编码
request.setCharacterEncoding("utf-8");
//获取数据
String uname=request.getParameter("uname");
String upwd=request.getParameter("upwd");
String usex = request.getParameter("usex");
String uhobby = request.getParameter("uhobby");
String uaddress=request.getParameter("uaddress");
//进行oracle数据库交互
//定义5个变量存储用户名,密码,性别,爱好,地址
String name="";
String pwd="";
String sex="";
String hobby="";
String address="";
//连接对象
Connection conn=null;
//执行对象
PreparedStatement ps=null;
//结果集对象
ResultSet rs=null;
try{
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//建立连接
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123");
//编写SQL语句
String sql="select * from tb_user where uname=? and upwd=? and usex=? and uhobby=? and uaddress=?";
//将SQL语句传入执行对象中并返回
ps=conn.prepareStatement(sql);
//占位符赋值
ps.setString(1, uname);
ps.setString(2, upwd);
ps.setString(3, usex);
ps.setString(4, uhobby);
ps.setString(5, uaddress);
//返回结果集对象
rs=ps.executeQuery();
//遍历或判断
if(rs.next()){
//有用户返回出来 用变量接收
name=rs.getString(3);
pwd=rs.getString(3);
sex=rs.getString(2);
hobby=rs.getString(3);
address=rs.getString(5);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(conn != null && !conn.isClosed()){
conn.close();
}
if(ps != null){
ps.close();
}
if(rs != null){
rs.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
//页面跳转
out.print(
"用户名:"+name+"<br>"
+"密码:"+pwd+"<br>"
+"性别:"+sex+"<br>"
+"爱好:"+hobby+"<br>"
+"地址:"+address
);
if(name != "" && pwd != "" && sex !="" && hobby != "" && address != ""){
out.println("<script>");
out.println("alert('该用户已被注册,请重新进行注册');");
out.println("location.href='Registered.jsp'");
out.println("</script>");
}else{
request.getRequestDispatcher("Registered1.jsp").forward(request, response);
}
%>
//主页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>欢迎<%= request.getParameter("uname") %> 注册成功</h1>
</body>
</html>