jsp_03
一、回顾
1、表单提交的两种方式以及区别
get:不保密,信息显示在地址栏
post:保密,信息不显示在地址栏
2、request可以接收哪两种的值
request.getParameter() 获得String类型的值
request.getParameterValues() 获得String类型数组
3、为什么要设置request编码方式?怎么设置?
原因:防止乱码导致的数据验证失败。
//设置request编码方式 request.setCharacterEncoding("UTF-8");
4、jsp代码什么时候编译
用户在页面发送了http请求之后。
5、如何查看编译后的文件?
Tomcat目录下的work文件夹中
6、
//区别: <% int a=1; %> <%! int b=2; %> //在源码中a在方法中,b在类中 所以 a:局部变量 b:全局变量
7、form表单中必要的一定要加上name属性,request是根据name取值。
二、页面跳转的两种方式以及区别
1、重定向(response,客户端行为)
- 不能将值带到新的界面
- 地址栏发送了改变
- 可以跳转到任意界面
2、转发(request,是服务器行为)
- 能将值带到新界面
- 地址栏没有发送改变
- 不能跳转到任意界面
下面是未连接数据库的验证,用户名和密码都是默认的。目的演示两种跳转方式和区别,效果可以自己操作查看。
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="oracle.jdbc.driver.OracleDriver"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//设置编码
request.setCharacterEncoding("UTF-8");
//获取用户注册信息
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
if("admin".equals(name)&&"123".equals(pwd)){
//转发
request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
//重定向
// response.sendRedirect("http://www.baidu.com");
//使用js
// out.print("<script>alert('登录成功');location.href='ok.jsp'</script>");
}else{
out.print("<script>alert('登录失败');location.href='index.jsp'</script>");
}
%>
在浏览器中,地址栏的地址发送改变都是重定向。如何理解重定向和转发:
重定向:
- 客户端行为,A向B(服务器)提问,B不知道,要A去问C,于是A跳过B直接去问C。
- 该过程并未走过B这个流程。下图是使用重定向的效果,可以跳转过去,只是该电脑没有连接网络。
- 所以是客户端行为,就像用户直接访问百度网。(下面是谷歌浏览器。)
转发:
- 服务器行为,A向B(服务器)提问,B带着他的请求在服务器中解决,不能跳转到任意界面,
- 只能在自己创建的项目中的文件中跳转,我们的web项目是运行在我们的服务器上面的,该过程经过了Tomcat,
- 就是在Tomcat/webapps/web_xx中寻找。下图是使用转发的效果,并未找到路径。
3、转发的另外一个作用
//dozc.jsp中转发语句
request.getRequestDispatcher("/项目名/index.jsp").forward(request, response);
//后面传入了一个参数request
//我们在该界面能通过request取值,那么转发之后跳转的那个界面是否能够取到用户的请求信息呢?
//这里的传入参数request的作用很明显了,在dozc.jsp将该请求发送到了要跳转index.jsp那去了。可以试试跳转之后的界面是否能通过request取值成功!为什么要取值呢?
//答:我们登陆成功进入主页之后都会有自己的信息。
4、思考js属于转发还是重定向
可以自己尝试得出结果。
三、连接数据库
首先连接数据库我们需要一个jar包,直接将jar包放到我们项目的webapp/WEB-INF/lib中。
右键它找到build Path-->add build Path,就会在Referenced Libraries中看到一个奶瓶。
以下有加载数据库的代码。
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="oracle.jdbc.driver.OracleDriver"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//设置编码
request.setCharacterEncoding("UTF-8");
//获取用户注册信息
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
String sex=request.getParameter("usex");
String address=request.getParameter("uaddress");
String[] ahs=request.getParameterValues("uah");
String ah="";
for(String s:ahs){
ah+=s+",";
}
//使用OracleDriver导包,得到加载驱动的语句: oracle.jdbc.driver.OracleDriver
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//定义连接字符串
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//获得连接
Connection con=DriverManager.getConnection(url,"scott","1234");
//定义数据库语句
String sql="insert into TB_TUSERS values(?,?,?,?,?)";
//创建预编译对象
PreparedStatement ps=con.prepareStatement(sql);
//为占位符设值
ps.setString(1, name);
ps.setString(2, pwd);
ps.setString(3, sex);
ps.setString(4, address);
ps.setString(5, ah);
//执行SQL语句 增删改 返回int类型 查 返回结果集
int n=ps.executeUpdate();
if(n>0){
//转发
request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
//重定向
//response.sendRedirect("http://www.baidu.com");
}else{
//重定向
response.sendRedirect("zc.jsp");
}
%>
这里使用的是Oracle,如果你使用的是SQLserver或者是MySQL就使用不同的jar包和定义不同的连接字符串。
连接操作库的操作大家也都不陌生了!以上是注册操作,登录功能可以自己试着去实现。
点击注册之后成功之后数据库会出现该用户信息,
之前对jar包还不是非常的了解,用OracleDriver\SQLserveDriver 对象是java中里面的。它是jar包里面的。
查阅了相关资料,有很多都太深奥,目前我还不能吸收...
通俗易懂的理解,就是将一些类进行打包,然后将jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。
这里给大家补充一下,我在前面忘记将了
语法为<%@ ... %>的被叫做指令。指令具体什么意思不好讲,每次新建一个jsp文件最上面都会有该行指令:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
page language="java"——页面语言=“java”
contentType="text/html; charset=UTF-8" ——内容类型为HTML文本;字符集为"UTF-8"
pageEncoding="UTF-8"——网页编码为“UTF-8”
我们导包之后又会出现指令,指令就是声明的意思,声明一些指令。我们直接书写一个指令,它是否会立马执行呢?会!例如:<%@ int n=1 %>
问题:连接数据库这里会有一个错误:异常: The Network Adapter could not establish the connection(网络适配器无法建立连接)。
或者是该错误
The Connection descriptor used by client was:localhost:1251:orcl
客户端使用的连接描述符是:localhost:1251:orcl
解决方法:
- 确定自己代码没有错误时就不用再纠结了,仔细分析错误原因,遇见没见过的错误可以百度。这里是监听配置文件的问题。
- 通过路径C:\app\zjjt\product\11.2.0\dbhome_2\NETWORK\ADMIN\listener.ora找到listener.ora,
- dbhome_2中找不到就在dbhome_1中找。以记事本的方法打开,修改PORT和你的连接字符串url的端口号一致,
- 保存后一定要重启服务和监听。
总结:
页面跳转的两种方式区别,数据库的连接实现登录注册功能。
一个相对比较完整登录功能并不是这么简单一些验证,这主要是学习jsp。
关于登录方面推荐大家看看这篇:
https://coolshell.cn/articles/5353.html