页面跳转
转发
对应request对象request对象用于响应客户请求并向客户端输出信息
request对象常用方法
request.getRequestDispatcher(String location).forward(request, response)
对应request对象
request对象用于客户端向服务器发送请求
request对象常用方法:
request.getRequestDispatcher(String location).forward(request, response);
重定向
对应response对象response对象用于响应客户请求并向客户端输出信息
response.sendRedirect(String location):将请求重新定位到一个不同的URL
转发与重定向的区别:
转发是服务器内部行为,客户端发送了一个请求,转发可以携带数据(request中的数据),而且,转发的界面路径不会发生改变
重定向是客户端行为,客户端发送了一个请求,重定向不能携带数据(request中的数据),重定向的路径会发生改变
数据库连接
JDBC
JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力:
JSP中连接数据库
基本步骤如下:
1.jar包,导入驱动包(sqlserver,oracle,mysql),一定要执行 build path
OracleDriver(alt+/)导包语句:oracle.jdbc.driver.OracleDriver
加载驱动:
Class.forName("oracle.jdbc.driver.OracleDriver");
2.编写连接语句
String URL="jdbc:oracle:thin:@localhost:1521:orcl";//orcl中的那一个数据库
3.获得连接
Connection con=DriverManager.getConnection(URL, "scott", "xyf123");
4.获得预编译对象(执行对象)
PreparedStatement ps=con.prepareStatement("select * from xx表 where xx=? ");
给占位符复制
ps.setString(1, xx);
ps.setString(2, xx);....
5.获得结果集
ResultSet rs=ps.executeQuery();
6.判断是否在数据库查到用户输入的数据[登陆验证 页面跳转]
7.关闭连接
注:
导入驱动包在lib下:
Build path
选择牛奶瓶后就会有:
获得预编译对象(执行对象)之前要在对应的数据库中建好表格:
JSP中连接数据库的完整的运用代码已经贴在下面的服务器doLogin中了
主界面main:
<%@ 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>我是首页</h1>
<h2>欢迎 <%=request.getParameter("username") %></h2>
</body>
</html>
登陆界面login:
<%@ 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="doLogin.jsp" method="get">
<p>
<input type="text" name="username" placeholder="请输入用户名">
</p>
<p>
<input type="password" name="password" placeholder="请输入密码">
</p>
<p>
<button>登录</button>
</p>
</form>
</body>
</html>
服务器doLogin:
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="org.apache.tomcat.dbcp.dbcp2.DriverManagerConnectionFactory"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="oracle.jdbc.driver.OracleDriver"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//获取用户提交的表单信息
String username=request.getParameter("username");//从请求中取表单数据,将前端的值发给后端
String password=request.getParameter("password");
//1.jar包,导入驱动包(sqlserver,oracle,mysql),一定要执行 build path
//OracleDriver(alt+/)导包语句oracle.jdbc.driver.OracleDriver
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.编写连接语句
String URL="jdbc:oracle:thin:@localhost:1521:orcl";//orcl中的那一个数据库
//3.获得连接
Connection con=DriverManager.getConnection(URL, "scott", "xyf123");
//4.获得预编译对象(执行对象)
PreparedStatement ps=con.prepareStatement("select * from user03 where uname=? and upwd=? ");
//给占位符复制
ps.setString(1, username);
ps.setString(2, password);
//5.获得结果集(结果)
ResultSet rs=ps.executeQuery();
//网络中的数据传输都是字节 文字会乱码
request.setCharacterEncoding("UTF-8");//将请求中的乱码设置为中文
//6.判断是否在数据库查到用户输入的数据[登陆验证 页面跳转]
//登录成功就跳转到主界面
if(rs.next()){//遍历数据库中的结果集
//登陆成功一定要使用转发跳到首页,才会有用户数据
//转发的界面路径不会发生改变:停留再doLogin路径
request.getRequestDispatcher("main.jsp").forward(request, response);
//2,重定向到首页
//response.sendRedirect("main.jsp");//用户数据为null
}else{
//登陆失败跳到登陆页面,不需要原来的用户填写的数据,重定向
response.sendRedirect("login.jsp");
}
//7.关闭连接
if(con!=null&&con.isClosed()){
con.close();
}
if(ps!=null){
ps.close();
}
if(rs!=null){
rs.close();
}
%>
%>
运用效果:
只有当用户名和密码都在数据库中能找到时才会跳转到主界面, 用户名或密码输入错误就会通过重定向又回到登陆界面
在登陆成功的情况下,doLogin中使用的是转发的跳转界面的方式,所以能够拿到客户端的数据,而且,转发的界面路径不会发生改变(即使跳转到了主界面main但是界面路径还是停留在doLogin界面),但如果在登陆成功的情况下,我在doLogin中使用的是重定向的跳转界面的方式,那么就不能够拿到客户端的数据,而且,转发的界面路径会发生改变