【JavaWeb开发-Servlet】day03-URL参数传递与MySQL数据库连接

news2024/9/9 6:04:35

目录

1、登录示例,谁用url传递参数

 (1)创建一个Servlet类,名字叫做loginServlet

 (2)保留需要的部分

 (3)删除多余代码

 (4)编写loginServlet.class

 (5)编写web.xml

 (6)输入带有参数的网址,进行测试

 2、JAVA 链接Mysql数据库 JDBC

         (1)创建一个数据库

         (2) 导入数据库驱动包

         (3) 加载驱动

         (4) 创建数据表使用java代码实现查询功能

(5) 使用Prep执行sql语句

(6) 查询数据库内的全部信息并显示在网页上


1、登录示例,谁用url传递参数

(1)创建一个Servlet类,名字叫做loginServlet

 (2)保留需要的部分

 (3)删除多余代码

package firsttest;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class loginServlet extends HttpServlet {
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

}

(4)编写loginServlet.class

package firsttest;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class loginServlet extends HttpServlet {
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取前端 发送用用户名和密码
		//获取前端传递到服务器的参数值
		//reqeust中getParameter方法可以通过传递数据的参数名获取与之对应的参数只
		String name=request.getParameter("name");
		String pwd=request.getParameter("pwd");
				
		//将浏览器传递过来的用户名和密码进行比对  如果正确返回登录成功 如果错误 返回登录失败
		response.setContentType("text/html");
		PrintWriter out=response.getWriter();
		if(name.equals("zs")&&pwd.equals("1234")){
			out.println("zhengque");
		}else{
			out.println("cuowu");
		}
		out.close();
	}

}

(5)编写web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>firsttest.testServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
	
		<servlet>
		<servlet-name>login</servlet-name>
		<servlet-class>firsttest.loginServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/login</url-pattern>
	</servlet-mapping>
</web-app>

(6)输入带有参数的网址,进行测试

http://127.0.0.1:8080/firsttest/login?name=zs&pwd=1234

 http://127.0.0.1:8080/firsttest/login?name=zs&pwd=123

 2、JAVA 链接Mysql数据库 JDBC

(1)创建一个数据库

        首先在电脑上安装5.0版本的MySQL数据库

      安装包链接

        在安装一个数据库可视化管理工具:

     NavicatForMySQL链接

       

(2) 导入数据库驱动包

下载mysql数据库连接驱动

        链接请稍等……

将下载好的驱动包(此处的驱动必须和mysql版本相对应)拖入WEB-INF的lib文件夹

 此时就可以在Web App Library中看到驱动(自动生成)说明导入成功了。


(3) 加载驱动

         使用Navicat创建一个数据库test:

        编写一个数据库连接类:

package firsttest;

import java.sql.Connection;
import java.sql.DriverManager;

//数据库工具类 提供java 链接数据库的操作代码
public class DBUtil {

	//定义一个java与数据库的链接类型  返回值是链接数据库的对象
	//5.0版本链接
	public static Connection getConnection(){
		Connection con=null;
		try {
			//加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//获取mysql数据的链接对象
			String url="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8";
			String name="root";
			String pwd="123456";
			con=DriverManager.getConnection(url,name,pwd);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
}

        编写一个测试连接类:

package firsttest;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;



public class DBUtilTest {

	public static void main(String[] args) {
		System.out.println(DBUtil.getConnection());
	}

}

        输出:

         说明已连接成功。

(4) 创建数据表使用java代码实现查询功能

        打开Navicat使用可视化功能在test数据库中创建一个表students:

 在里面手动添加几个数据

写代码:

连接数据库类:

package firsttest;

import java.sql.Connection;
import java.sql.DriverManager;

//数据库工具类 提供java 链接数据库的操作代码
public class DBUtil {

	//定义一个java与数据库的链接类型  返回值是链接数据库的对象
	//5.0版本链接
	public static Connection getConnection(){
		Connection con=null;
		try {
			//加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//获取mysql数据的链接对象
			String url="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8";
			String name="root";
			String pwd="123456";
			con=DriverManager.getConnection(url,name,pwd);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
}

 测试数据库类:

package firsttest;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;



public class DBUtilTest {

	public static void main(String[] args) {
		//System.out.println(DBUtil.getConnection());
		Scanner sc=new Scanner(System.in);
		//获取学生姓名
		String name=sc.nextLine();
		//获取学生学号
		String num=sc.nextLine();
		System.out.println(name+":"+num);
		//获取数据库链接
		Connection conn=DBUtil.getConnection();
		try {
			//获取数据库语句操作对象
			Statement state=conn.createStatement();
			//定义sql语句
			String sql="select * from students where name='"+name+"' and number='"+num+"'";
			//让Statment对象向数据库发送上面的sql语句 并获取查询语句 查询的结果集对象
			ResultSet rs=state.executeQuery(sql);
			//从结果及中查询出对应的数据信息
			//判断是否查询到了结果
			while(rs.next()){
				System.out.println("学生存在");
			}	
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}







 测试结果

 (5) 使用Prep执行sql语句

package firsttest;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;



public class DBUtilTest {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		//获取用户名
		String name=sc.nextLine();
		//获取用户密码
		String num=sc.nextLine();
		//System.out.println(name+":"+num);
		//获取数据库链接
		Connection conn=DBUtil.getConnection();
		
		//定义sql语句
		String sql="select * from students where name=? and number=?";
		//获取数据库语句操作对象PreparedStatment
		try {
			PreparedStatement prep=conn.prepareStatement(sql);
			//为两个占位符传递参数
			prep.setString(1, name);
			prep.setString(2, num);
			//PreparedStatement 向数据库发送sql语句并执行  获取返回的结果集对象
			ResultSet rs=prep.executeQuery();
			while(rs.next()){
				System.out.println("学生存在");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}






(6) 查询数据库内的全部信息并显示在网页上

创建一个Servlet类:findAllServlet.class

package firsttest;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class findAllServlet extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection con=DBUtil.getConnection();
		String sql="select * from students";
		PreparedStatement prep;
		try {
			prep = con.prepareStatement(sql);
			ResultSet rs=prep.executeQuery();
			response.setContentType("text/html;charset=utf-8");
			PrintWriter out=response.getWriter();
			out.println("<table width='500px' border='5px' >");
			out.println("<tr><td>id</td><td>name</td><td>number</td></tr>");
			
			
			while(rs.next()){
				//获取数据中查询出的数据
				String num=rs.getString("number");
				String name=rs.getString("name");
				double math=rs.getDouble("math");
				out.println("<tr><td>"+num+"</td><td>"+name+"</td><td>"+math+"</td></tr>");
			}
			out.println("</table>");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
		
	}

}

修改web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>firsttest.testServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
	
		<servlet>
		<servlet-name>login</servlet-name>
		<servlet-class>firsttest.loginServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/login</url-pattern>
	</servlet-mapping>
	
	<servlet>
    	<servlet-name>find</servlet-name>
    	<servlet-class>firsttest.findAllServlet</servlet-class>
  	</servlet>
  	<servlet-mapping>
    	<servlet-name>find</servlet-name>
    	<url-pattern>/findAll</url-pattern>
  	</servlet-mapping>
</web-app>

输入网址http://127.0.0.1:8080/firsttest/findAll查看结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICV:2022年中国车载摄像头市场规模有望突破50亿美元大关

全球前沿科技咨询机构ICV近期发布了全球车载摄像头的市场分析报告。ICV在报告中指出&#xff0c;车载摄像头市场随着乘用车自动驾驶的发展呈现出快速增长的趋势&#xff0c;2022年中国市场在全球范围内仍保持“市场领跑者”的地位&#xff0c;并有望突破50亿美元市场规模的大关…

Win10如何安装JDK1.8,最快最详细教程

JDK全称为Java Development Kit&#xff0c;顾名思义是java开发工具包&#xff0c;是程序员使用java语言编写java程序所需的开发工具包。 JRE全称为Java Runtime Environment&#xff0c;顾名思义是java运行时的环境&#xff0c;包含了java虚拟机&#xff0c;java基础类库&…

ABAP-SAP-整合事务码,整合平台,运维工具箱

PROCESS BEFORE OUTPUT. MODULE status_0100. * PROCESS AFTER INPUT. MODULE user_command_0100. MODULE exit_command_0100 AT EXIT-COMMAND. 源码&#xff1a; **Project Name : SAP Implementation Project **Program Name : ZTOOL **Description : 运维工具箱 **Date/Aut…

比羊了个羊还火的ChatGPT,玩法全攻略讲解

大家好&#xff0c;我是洋子&#xff0c;昨天听闻了ChatGPT&#xff0c;真的非常强大&#xff0c;赶紧给大家安利一波 ChatGPT是一种由OpenAI开发的通用聊天机器人模型 该模型是基于GPT-3&#xff08;一种大型语言模型&#xff09;构建的&#xff0c;旨在提供与人类更加自然的…

Pig4Cloud之登陆验证(二)发放token

上一篇介绍了客户端认证处理&#xff0c;那是令牌颁发的前提。这篇开始&#xff0c;我们就来研究下令牌颁发。 令牌颁发 授权服务器提供令牌颁发接口&#xff08;/oauth2/token&#xff09;&#xff0c;由客户端发起请求&#xff0c;授权服务器生成访问令牌&#xff08;acces…

常见的并发线程面试题

常见的并发面试题 一.进程与线程的区别? 进程是操作系统进行资源分配的最小单元&#xff0c;线程是操作系统进行运算调度的最小单元。进程中包含了线程&#xff0c;线程属于进程。进程的内存和资源是该进程下的线程所共享的。 二.创建线程的方式以及区别? 继承Thread类&am…

vue源码中的nextTick是怎样实现的

一、Vue.nextTick 内部逻辑 在执行 initGlobalAPI(Vue) 初始化 Vue 全局 API 中&#xff0c;这么定义 Vue.nextTick。 function initGlobalAPI(Vue) {//...Vue.nextTick nextTick; }可以看出是直接把 nextTick 函数赋值给 Vue.nextTick&#xff0c;就可以了&#xff0c;非常…

leetcode-每日一题-二进制表示中质数个计算置位(简单,popcount算法)

从这道题了解到了一个时间复杂度为o(1)的一个计算一个数转换为二进制时1存在的个数问题&#xff0c;很巧妙运用了二分来求解&#xff0c;代码如下 unsigned popcount (unsigned u) {u (u & 0x55555555) ((u >> 1) & 0x55555555);u (u & 0x33333333) ((u…

API接口使用方法(封装好的电商平台)

为了进行此平台API的调用&#xff0c;首先我们需要做下面几件事情。 1、 获取一个KEY。 点击获取 2、 参考API文档里的接入方式和示例。 3、查看测试工具是否有需要的接口&#xff0c;响应实例的返回字段是否符合参数要求。 4、利用平台的文档中心和API测试工具&#xff0c…

自定义网页中被选中文本的样式 CSS selection

文章目录两张图自定义被选中文本的样式::selection 选择器的可填属性::selection 选择器支持的CSS属性 完整版 demo浏览器兼容官网文档两张图 对于选中的文本(准确地说应该是被选中的DOM元素)&#xff0c;浏览器的默认样式&#xff1a;淡青色的背景色。 2. 自定义样式&#xf…

[说明] Doris使用培训

参考文献 apache doris在蜀海供应链数仓建设中的实践 应用实践 | 数仓体系效率全面提升&#xff01;同程数科基于 Apache Doris 的数据仓库建设 一、doris的背景介绍 doris的使用场景 实时/离线一体的数仓 借用一句话&#xff1a; Uniq 模型拳打KUDU、HUDI&#xff0c;Agg…

[LeetCode 1775]通过最少操作数使数组的和相等

题目描述 题目链接&#xff1a;[LeetCode 1775]通过最少操作数使数组的和相等 给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间&#xff08;包含 1 和 6&#xff09;。 每次操作中&#xff0c;你可以选择 任意 数组中的任意一个整数&a…

openEuler kubesphere kubekey 安装 ceph csi 及使用实例

按照官方文档,很轻松就可以进行安装, 安装过程中遇到一些疑问, 在安装后也得到清晰的理解 1. /root/ceph-csi-rbd.yaml 这里面的clusterId 按理说应该是ceph的clusterId, 不过官方文档并没有首重强调修改,暂时保持默认 下面6789端口就是我们在物理机上安装的ceph mon的主机i…

PCB设计指南:安规、布局布线、EMC、热设计、工艺

文章目录Part 1 安规距离要求部分一、爬电距离和电气间隙距离要求&#xff1a;Part 2 抗干扰、EMC部分一、长线路抗干扰二、小信号走线尽量远离大电流走线&#xff0c;忌平行&#xff0c;D>2.0mm。三、小信号线处理&#xff1a;电路板布线尽量集中&#xff0c;减少布板面积提…

广州蓝景分享—实用的CSS技巧,助你成为更好的开发者

Hello~~各位小伙伴&#xff0c;相信在前端开发项目中&#xff0c;CSS实现如修改输入占位符样式&#xff0c;多行文本溢出&#xff0c;隐藏滚动条&#xff0c;修改光标颜色&#xff0c;水平和垂直居中等等&#xff0c;这些都是我们非常熟悉的开发场景&#xff01;前端开发者几乎…

HashMap部分源码解析

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Java数据结构 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 目录 前言 常量字段 构造方法 put方法 确定初始容量 为何我们的数组的大小要是2的n次幂 hash为何要异或其高位 扩容机制 前言 我们在前…

极客时间Kafka - 04 Kafka生产者和消费者拦截器

文章目录1. 什么是拦截器&#xff1f;2. Kafka 拦截器3. 典型使用场景4. 案例分享1. 什么是拦截器&#xff1f; 如果你用过 Spring Interceptor 或是 Apache Flume&#xff0c;那么应该不会对拦截器这个概念感到陌生&#xff0c;其基本思想就是允许应用程序在不修改逻辑的情况…

无人机边缘计算中的计算卸载——Stackelberg博弈方法论文复现附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

不会还有人不会热修复吧?

Class流派原理 基本原理:加载类的时候是找element&#xff0c;每个element对于一个dex。我要把我修复的那个类单独放到dex插入dexlist前面&#xff0c;在你做类加载从前往后找优先从你的dex加载加载的就是你修复后的class.这就是 实现代码 通过context拿到pathClassLoader&am…

Qt跨平台截图工具

Qt跨平台截图工具 文章目录Qt跨平台截图工具1、概述2、实现效果3、软件构成4、关键代码5、源代码更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;Qt自定义模块、工具&#x1f448; 1、概述 Qt版本&#xff1a;V5.12.5兼容系统&#xff1a; Windows&…