JavaWeb——JSP_03学习笔记

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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张同学_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值