JavaWeb程序设计学习笔记整理(4)

B/S架构

在这里插入图片描述

创建一个Servlet

方法一:

第一步:

新建一个包(com.bzxy.emp),右击选择Servlet

在这里插入图片描述

第二步:

显示没有,故选择Other…
在这里插入图片描述

第三步:

搜索servlet
在这里插入图片描述

方法二:

不需要选择Other…而能够直接选择Servlet

第一步:

选择红框
在这里插入图片描述
右击close
在这里插入图片描述
显示效果为:
在这里插入图片描述

第二步:

用MyEclipse Java Enterprise(default)窗口好处,可显示处Servlet
在这里插入图片描述
最终效果为:在这里插入图片描述
把该关闭的关闭,保留自己需要的Console和Servers
在这里插入图片描述
在这里插入图片描述

第三步:

新建一个包(com.bzxy.emp),右击选择Servlet

在这里插入图片描述
在这里插入图片描述

修改Servlet属性

第一步:

如图默认显示为:
在这里插入图片描述
添加名字为EmpListServlet
注意:类名每一个单词首字母大写
在这里插入图片描述

扫描二维码关注公众号,回复: 10578153 查看本文章

第二步:

只勾选doGet(),点击Next
在这里插入图片描述

第三步:

勾选红框内容
在这里插入图片描述

第四步:

Servlet/JSP Name相当于<servlet-name>见名知意即可
默认是类名
在这里插入图片描述
Servlet/JSP Mapping URL相当于<url-pattern>
/ 必须有
在这里插入图片描述
描述性的东西,删了即可
在这里插入图片描述
最终效果如图所示,点击Finish创建完成
在这里插入图片描述

优点及测试代码:

自动的继承HttpServlet和生成web.html

EmpListServlet.java

默认效果为:
在这里插入图片描述
在这里插入图片描述
修改下代码:
解释:doGet只能接收get请求方式,不能接收post请求方式
service接收get和post请求方式,两种方式都可

在这里插入图片描述

package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("测试...");
	}

}

web.html

默认格式所有的servlet写在一起,所有的servlet-mapping写在一起,效果为:
在这里插入图片描述
修改下代码:
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<!-- 对com.bzxy.test包下的HelloServlet进行配置 -->
	<servlet>
		<servlet-name>hello</servlet-name> <!-- 对要配置的Servlet起别名 -->
		<servlet-class>com.bzxy.test.HelloServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
		<url-pattern>/ho</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
	</servlet-mapping>

	<!-- 对com.bzxy.test包下的RegisteServlet进行配置 -->
	<servlet>
		<servlet-name>RegisteServlet</servlet-name> <!-- 对要配置的Servlet起别名 -->
		<servlet-class>com.bzxy.test.RegisteServlet</servlet-class> <!-- 配置的Servlet的位置,写所在的包名+类名即可 -->
	</servlet>
	<!-- 对com.bzxy.emp包下的EmpListServlet进行配置 -->
	<servlet>
		<servlet-name>EmpListServlet</servlet-name>
		<servlet-class>com.bzxy.emp.EmpListServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>RegisteServlet</servlet-name> <!-- 要和上面的servlet-name的内容保持一致 -->
		<url-pattern>/registe</url-pattern> <!-- 浏览器访问服务器端servlet的url地址 -->
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>EmpListServlet</servlet-name>
		<url-pattern>/list</url-pattern>
	</servlet-mapping>
</web-app>

注意:修改完这些操作需要重新部署一下

效果图:

  • 浏览器端:
    若在浏览器中输入http://localhost:8080/servlettest/list,则如图下显示:
    在这里插入图片描述
    空白
    在这里插入图片描述
  • 控制台:
    控制台输出测试...,故测试成功
    在这里插入图片描述

通过servlet技术将mysql数据库中的数据获取到

导入jar包

直接把已经下载好的jar包复制到WebRoot,WEB-INF中的lib里面
自动生成Referenced Libraries
如何在Java项目中导入jar包可点击本处
在这里插入图片描述

servlet技术使用步骤

第一步:注册加载驱动

照着写,Class.forName("com.mysql.jdbc.Driver");
在这里插入图片描述
报错,捕获异常
在这里插入图片描述
在这里插入图片描述
修改代码:
Exception:是所有异常的父类
在这里插入图片描述

第二步:获得数据库mysql的连接

测试数据库mysql是否连接成功
代码如下:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
		try {
			//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
			//!Java项目不需要,Web项目
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库mysql的连接
			//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
			String url = "jdbc:mysql://localhost:3306/test1";
			String username = "root";
			String pwd = "";
			Connection con = DriverManager.getConnection(url, username, pwd);
			System.out.println("连接为:" + con);
			//③ 预编译sql语句
			//④ 执行sql语句,获得结果集
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//2)在该Servlet中将获取的数据显示在页面中
	}

}

控制台显示为这种格式的,说明连接成功
在这里插入图片描述

第三步:预编译sql语句

第四步:执行sql语句,获得结果集

代码部分:

package com.bzxy.emp;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EmpListServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
		ResultSet rs = null;
		try {
			//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
			//!Java项目不需要,Web项目
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库mysql的连接
			//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
			String url = "jdbc:mysql://localhost:3306/test1";
			String username = "root";
			String pwd = "";
			Connection con = DriverManager.getConnection(url, username, pwd);
			System.out.println("连接为:" + con);
			//③ 预编译sql语句
			String sql = "select * from emp";
			PreparedStatement prep = con.prepareStatement(sql);
			//④ 执行sql语句,获得结果集
			rs = prep.executeQuery();
			//先将结果集rs中数据输出在控制台上测试一下
			/*
			while (rs.next()) {
				System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
				 		+ rs.getDouble("salary") + "," + rs.getDate("birthday"));
			}
			 */
		} catch (Exception e) {
			e.printStackTrace();
		}

		//2)在该Servlet中将获取的数据显示在页面中
	}

}

效果图:

在这里插入图片描述
关于使用JDBC连接Oracle的使用步骤,可点击本处

通过servlet技术将获得mysql中的数据显示在页面端

rs问题

rs报错
在这里插入图片描述
原因:作用域问题
在这里插入图片描述
解决方法:
try外面声明ResultSet rs = null;,从而放大它的作用域
在这里插入图片描述
显然,仍需要异常处理
在这里插入图片描述
在这里插入图片描述

页面端显示内容 1.0

代码部分:

package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
		ResultSet rs = null;
		try {
			//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
			//!Java项目不需要,Web项目
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库mysql的连接
			//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
			String url = "jdbc:mysql://localhost:3306/test1";
			String username = "root";
			String pwd = "";
			Connection con = DriverManager.getConnection(url, username, pwd);
			System.out.println("连接为:" + con);
			//③ 预编译sql语句
			String sql = "select * from emp";
			PreparedStatement prep = con.prepareStatement(sql);
			//④ 执行sql语句,获得结果集
			rs = prep.executeQuery();
			//先将结果集rs中数据输出在控制台上测试一下
			/*
			while (rs.next()) {
				System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
						 + rs.getDouble("salary") + "," + rs.getDate("birthday"));
			}
			*/
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//2)在该Servlet中将获取的数据显示在页面中
		response.setContentType("text/html;charset=utf-8");
		try {
			//获得PrintWriter,向页面端写内容
			PrintWriter pw = response.getWriter();
			while (rs.next()) {
				pw.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
						 + rs.getDouble("salary") + "," + rs.getDate("birthday") + "<br/>");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

效果图:

若在浏览器中输入http://localhost:8080/servlettest/list,则如图下显示:
在这里插入图片描述

页面端显示内容 2.0

在这里插入图片描述
查看html中的表格属性可点击本处

代码部分:

package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
		ResultSet rs = null;
		try {
			//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
			//!Java项目不需要,Web项目
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库mysql的连接
			//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
			String url = "jdbc:mysql://localhost:3306/test1";
			String username = "root";
			String pwd = "";
			Connection con = DriverManager.getConnection(url, username, pwd);
			System.out.println("连接为:" + con);
			//③ 预编译sql语句
			String sql = "select * from emp";
			PreparedStatement prep = con.prepareStatement(sql);
			//④ 执行sql语句,获得结果集
			rs = prep.executeQuery();
			//先将结果集rs中数据输出在控制台上测试一下
			/*
			while (rs.next()) {
				System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
						 + rs.getDouble("salary") + "," + rs.getDate("birthday"));
			}
			*/
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//2)在该Servlet中将获取的数据显示在页面中
		response.setContentType("text/html;charset=utf-8");
		try {
			//获得PrintWriter,向页面端写内容
			PrintWriter pw = response.getWriter();
			//使用pw向页面输出一个表格
			pw.println("<table border='1' cellspacing='0' width='600' align='center'>");
			//表格的标题
			pw.println("<caption>员工信息表</caption>");
			//表格的第一行 编号、姓名、密码、工资、
			pw.println("<tr align='center'><td>编号</td><td>姓名</td><td>密码</td><td>工资</td><td>生日</td></tr>");
			//表格的第二行到第N行
			while (rs.next()) {
				//pw.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
						 //+ rs.getDouble("salary") + "," + rs.getDate("birthday") + "<br/>");
				pw.println("<tr align='center'><td>" + rs.getInt("id")+ "</td><td>" + rs.getString("name") + "</td><td>"
						+ rs.getString("pwd") + "</td><td>" + rs.getDouble("salary") + "</td><td>"
						+ rs.getDate("birthday") + "</td></tr>");
			}
			pw.println("</table>");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

效果图:

若在浏览器中输入http://localhost:8080/servlettest/list,则如图下显示:
在这里插入图片描述
直接在mysql中添加数据
在这里插入图片描述
直接刷新页面,效果为:
在这里插入图片描述

页面端显示内容 3.0

在这里插入图片描述
查看html中的表格属性可点击本处

代码部分:

package com.bzxy.emp;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//服务器端的Servlet
public class EmpListServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1)在该servlet中要将mysql数据库中的数据获取到(jdbc)
		ResultSet rs = null;
		try {
			//① 注册加载驱动 (需要在Web项目中,引入的mysqlxx.jar包需要注册加载后才能正常使用)
			//!Java项目不需要,Web项目
			Class.forName("com.mysql.jdbc.Driver");
			//② 获得数据库mysql的连接
			//jdbc、mysql、localhost(本地地址)、3306(端口号)、test1(库名)
			String url = "jdbc:mysql://localhost:3306/test1";
			String username = "root";
			String pwd = "";
			Connection con = DriverManager.getConnection(url, username, pwd);
			System.out.println("连接为:" + con);
			//③ 预编译sql语句
			String sql = "select * from emp";
			PreparedStatement prep = con.prepareStatement(sql);
			//④ 执行sql语句,获得结果集
			rs = prep.executeQuery();
			//先将结果集rs中数据输出在控制台上测试一下
			/*
			while (rs.next()) {
				System.out.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
						 + rs.getDouble("salary") + "," + rs.getDate("birthday"));
			}
			*/
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//2)在该Servlet中将获取的数据显示在页面中
		response.setContentType("text/html;charset=utf-8");
		try {
			//获得PrintWriter,向页面端写内容
			PrintWriter pw = response.getWriter();
			//使用pw向页面输出一个表格
			pw.println("<table border='1' cellspacing='0' width='600' align='center'>");
			//表格的标题
			pw.println("<caption>员工信息表</caption>");
			//表格的第一行 编号、姓名、密码、工资、
			pw.println("<tr align='center'><td>编号</td><td>姓名</td><td>密码</td><td>工资</td><td>生日</td><td>操作</td></tr>");
			//表格的第二行到第N行
			while (rs.next()) {
				//pw.println(rs.getInt("id") + "," + rs.getString("name") + "," + rs.getString("pwd")+ ","
						 //+ rs.getDouble("salary") + "," + rs.getDate("birthday") + "<br/>");
				pw.println("<tr align='center'><td>" + rs.getInt("id")+ "</td><td>" + rs.getString("name") + "</td><td>"
						+ rs.getString("pwd") + "</td><td>" + rs.getDouble("salary") + "</td><td>"
						+ rs.getDate("birthday") + "</td><td>删除" +"</td></tr>");
			}
			//表格的最后一行
			pw.println("<td colspan='6'><a href='http://www.baidu.com'>点我添加员工信息</a></td>");
			pw.println("</table>");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

效果图:

在这里插入图片描述

bug解决:

引入jar包是否正确

具体引入步骤,可往上查看

手动启动服务

oracle是安装版本的,服务已经开机电脑就启动了
mysql是免安装版本的,需要手动启动服务
故,准备操作必备的是打开启动数据库
具体步骤可点击本处

import导入选择java.sql

在这里插入图片描述

pwd

String pwd = "";
本身启动mysql时候时是没有密码的,不可在""填写内容

test1

String url = "jdbc:mysql://localhost:3306/test1";
选择正确的库,按实际需要而定
在这里插入图片描述

emp

emp表中的数据如图所示:
在这里插入图片描述

tips:

看到控制台中一大堆爆红,读懂错误,才能改错误

发布了251 篇原创文章 · 获赞 117 · 访问量 8521

猜你喜欢

转载自blog.csdn.net/qq_44458489/article/details/105360172
今日推荐