前情回顾

文章目录

  • 前情回顾
    • 1.什么是API:
    • 2.JavaSE和JavaEE:
    • 3.B/S架构和C/S架构:
  • Servlet
    • 1.准备工作
      • 配置环境变量:
      • Tomcat:
    • 2.开发过程
      • (1)文本文件开发流程:
      • (2)Servlet接口:
      • (3)Servlet对象的生命周期:
      • (4)HttpServletResponse接口:
      • (5)HttpServletRequest接口:
      • (6)互联网通信详解(B/S架构):
      • (7)项目实战----考试信息管理系统
        • <1>.项目架构:
        • <2>注册功能实现:
          • a.前端网页代码(user_Add.html):
          • b.在UserDao类中书写插入数据的JDBC代码(dao包下):
          • c.书写doGet(...)方法(模拟互联网通信流程):
          • 结果展示:
          • 改进方案(书写jdbc工具类):
        • <3>查询注册信息实现:
          • a.创建出类UserFindServlet:(controller包下)
          • b.配置xml文件:(web.xml)
          • c.实现findAll()方法:()(dao包下)
          • d.补充UserFindServlet类:(controller包下)
        • (4)浏览界面的实现:
          • 网页实现效果:
          • 查询注册结果演示:
        • (5)删除数据功能实现
          • a.创建出UserDeleteServlet类:(controller包下)
          • b.配置xml文件:(web.xml文件下)
          • c.实现delete()方法:(dao包下)
          • d.补全UserDeleteServlet类:(controller包下)
          • 删除功能结果演示:
        • (6)登录功能实现:
          • a.制作登录界面和登录失败界面:(web包下)
          • b.创建LoginServlet类:(controller包下)
          • c.配置xml文件:(web.xml文件下)
          • d.实现login方法:(dao包下)
          • e.补充LoginServlet类:(controller包下)
          • 登录成果展示:
        • (7)修改密码功能实现:
          • a.修改密码界面:(updatePassword.html)
          • b.在主页面添加修改密码界面:(left.html)
          • 3.建立实体类updatePassword类:(cotroller包下)
          • 4.在xml文件中配置updatePassword类的服务器:(web.xml)
          • 5.在dao文件中实现updatePassword方法:(dao包下)
          • 6.补充updatePassword类即可:
          • 修改密码结果演示:

1.什么是API:

①API是应用程序编程接口(Application Programming Interface);
②其包括源码,字节码和帮助文档(注意版本号一致)。

2.JavaSE和JavaEE:

① JavaSE:
<1>javaSE是java的标准版本,有一套基本类库;
<2>源码储存在JAVA_HOME\src.zip下;
<3>字节码储存在JRE_HOME\lib\rt.jar下;
②JavaEE:
<1>javaEE是java的企业版本,有一套企业项目类库;

3.B/S架构和C/S架构:

C/S架构:

<1>C/S架构是Client/Server(客户端/服务器);(APP)
<2>C/S架构优缺点:
优点:
①速度快,用户体验好;
②大部分数据继承到客户端,相对安全;
缺点:
①升级时升级部分较多;
②需要安装特定的软件,才能访问服务器。

B/S架构:

<1>B/S架构是Browser/Server(浏览器/服务器);(网页);
<2>B/S架构优缺点:
优点:
①无需安装,有浏览器就行;
②升级仅需要升级服务器端;
缺点:
①所有数据继承在服务器端,相对不安全;
②速度慢,用户体验差;

Servlet

"serv"代表服务器端,“let”代表小程序;
本机IP地址为:127.0.0.1或者localhost;

1.准备工作

配置环境变量:

①新建JAVA_HOME变量,值为jdk安装路径;
②将①加入到path中;
③新建CATALINA_HOME变量,值为Tomcat安装路径;
④将③加入到path中。

Tomcat:

①Tomcat 服务器是一个免费的开放源代码的Web 应用服务器;
②Tomcat的开启和关闭:
开启:TomcatX/bin/startup.bat(windows),startup.sh(linux);
关闭:TomcatX/bin/shutdown.bat(windows),shutdown(linux);

2.开发过程

(1)文本文件开发流程:

搭架:

①在任意处建立文件夹;
②在文件夹内可建立html等前端文件夹存放前端文件;
③在文件夹内建立WEB-INF文件夹(必须);
WEB-INF中必须包含:
<1>classes文件夹:用于存放字节码文件;
<2>lib文件夹:用于存放jar包;
<3>web.xml文件:存放“书写规范”;

web.xml文件书写规范:

<servlet><servlet-name>(实现类变量)</servlet-name><servlet-class>(实现类路径)</servlet-class>
</servlet>
<servlet-mapping><servlet-name>(实现类变量)</servlet-name><url-pattern>(/+别名)</url-pattern>
</servlet-mapping>

部署:

将总文件夹拷贝到TomcatX/webapps包下;

访问:

<1>startup操作运行tomcat;
<2>访问localhost:8080/(文件夹名+路径名)。

(2)Servlet接口:

Servlet接口:(javax.servlet.Servlet)

①Tomcat服务器下的lib文件有一个jar包存放Servlet接口;
②Http服务器只能调用【动态资源文件】,即Servlet的实现类;

HttpServlet抽象类:

①HttpServlet是一个抽象类,是Servlet的子类;
②与Servlet的对比:
<1>Servlet是一个接口,调用需实现内部的五个抽象方法;
<2>HttpServlet是一个抽象类,调用它仅需重写内部的service()方法;
<3>HttpServlet相比Servlet的好处:降低接口中实现类的难度;
其同时也是抽象类相比接口的好处。

(3)Servlet对象的生命周期:

概述:

①其实现类实例对象仅能由Http服务器创建;
②默认情况下,Http服务器收到Servlet第一个请求时创建实例对象;
③Http运行时,一个Servlet仅能创建一个实例对象(进程),不同用户访问是多线程;
④Http关闭时,自动将所有的Servlet对象销毁。

修改创建实例对象时机为网页开启执行:

<servlet>...<load-on-startup>(大于0的整数)</load-on-startup>
</servlet>

(4)HttpServletResponse接口:

HttpServletResponse概述:

①该接口来自于Servlet接口中;
②该接口实现类由Http服务器负责提供;
③负责将doGet或doPost等方法写入响应体并交给浏览器。

HttpServletResponse功能:

①将相应结果以二进制写入响应体:
print和write的对比:
<1>write()方法会把传入的int类型数据转换为ASCII码对应字符;
<2>print()方法会正常输出传入的int类型数据。

protected void doGet(HttpServletResponse response,HttpServletRequest){//执行结果String result = "...";    //拿到输出流PrintWriter pw = response.getWriter();  //用write(...)将执行结果打印到浏览器pw.write(result);//用print(...)将执行结果打印到浏览器pw.print(result);
}

②修改输出到浏览器的编译模式:
在拿到输出流前:

//可以在浏览器上打印html语句
response.setContentType("text/html");//可以在浏览器上打印中文
response.setContentType("text;charset=utf-8");

③控制浏览器向指定服务器发送请求:

response.sendRedirect("(网址路径)");

(5)HttpServletRequest接口:

HttpServletRequest概述:

①来自Servlet接口中;
②该接口的实现类由Http负责提供;
③该接口负责在doGet()或者doPost()方法运行时读取Http协议包中的信息。

HttpServletRequest功能:

①读取Http协议包中【请求行】信息;

//读取URL信息
String url = request.getRequestURL().toString();
//读取method信息
String method = request.getMethod();
//读取URI信息(URL的字符串截取)
String uri = request.getRequestURI();

②读取请求对象获得【请求头】中请求参数和名称;

//获得所有参数名称(返回枚举类)
Enumeration paramNames = request.getParameterNames();
//遍历枚举类(类似迭代器遍历集合)
while(paramNames.hasMoreElements()){String paramName = (String)paramNames.nextElement();//获取请求参数值String value = request.getParameter(paramName);
}

③从【请求体】中获取参数信息:(doPost()方式)

//获取参数值
String value = request.getParameter(paramName);

④修改请求体的解码方式为utf-8:

request.setCharacterEncoding("utf-8");

Response和Request生命周期:

①在Http服务器接收到浏览器发送到“请求协议包”时,自动生成一个【请求对象】和一个【响应对象】;
②在Http调用do…()方法时。负责将【请求对象】和【响应对象】作为实参传入方法中;
③在do…()方法后,Tomcat服务器负责将其二者销毁。

(6)互联网通信详解(B/S架构):

B/S架构简图

互联网通信图

(7)项目实战----考试信息管理系统

<1>.项目架构:

任务:
在线考试管理吸系统----用户信息管理模块
分支任务:
> 用户信息注册
>用户信息查询
> 用户信息删除
> 用户信息更新
文件架构:

准备工作:
1.创建用户信息表 t_users.frm

 drop table if exists t_users;create table t_users(userId int primary key auto_increment,       #用户编号(自增操作)userName varchar(255),        #用户名称password varchar(255),        #用户密码sex      varchar(10),             #用户性别email    varchar(255)         #用户邮箱)

2.插入用户信息

insert into t_users(userName,password,sex,email)values('shawn','666','man','shawn@126.com');...

3.新建一个实体类Users(entity包下)。

public class Users {//用户实体类的属性private Integer userId;private String userName;private String password;private String sex;private String email;//构造方法(无参)public Users(){}//构造方法(有参)public Users(Integer userId,String userName,String password,String sex,String email){this.userId = userId;this.userName = userName;this.password = password;this.sex = sex;this.email = email;}//set方法和get方法public void setUserId(Integer userId){this.userId = userId;}public Integer getUserId(){return userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

4.web下WEB-INF目录下,创建lib文件夹,存放mysql提供的JDBC实现jar包。

<2>注册功能实现:

a.前端网页代码(user_Add.html):
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>UserTestInformationManage_System</title>
</head>
<body><center><form action="/myWeb/user/add" method="get"><table border="2"><tr><td>用户姓名</td><td><input type="text" name="userName"/></td></tr><tr><td>用户密码</td><td><input type="password" name="password"/> </td></tr><tr><td>用户性别</td><td><input type="radio" name="sex" value="男"/>男<input type="radio" name="sex" value="女"/>女</td></tr><tr><td>用户邮箱</td><td><input type="text" name="email"/> </td></tr><tr><td><input type="submit" value="用户注册"/> </td><td><input type="reset" name="重置"/> </td></tr></table></form></center>
</body>
</html>

效果:

b.在UserDao类中书写插入数据的JDBC代码(dao包下):
package com.shawnWeb.dao;import com.shawnWeb.entity.Users;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class UserDao2 {public UserDao2(){}public int add(Users users){Connection conn = null;PreparedStatement ps = null;int result = 0;String url = "jdbc:mysql://localhost:3306/bjpowernode";String user = "root";String password = "123456";//注册驱动try {Class.forName("com.mysql.jdbc.Driver");//获取数据库连接conn = DriverManager.getConnection(url,user,password);//获取数据库操作对象String sql = "insert into t_users(userName,password,sex,email)"+" values(?,?,?,?)";ps = conn.prepareStatement(sql);//给?传值ps.setString(1,users.getUserName());ps.setString(2,users.getPassword());ps.setString(3,users.getSex());ps.setString(4,users.getEmail());//执行sql语句result = ps.executeUpdate();//} catch (Exception e) {e.printStackTrace();}finally{if (ps != null){try {ps.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}return result;}}
}
c.书写doGet(…)方法(模拟互联网通信流程):
package com.shawnWeb.controller;import com.shawnWeb.dao.UserDao2;
import com.shawnWeb.entity.Users;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class UserAddServlet2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String userName,password,sex,email;//创建User对象,用于存储从浏览器传送过来的用户信息Users user = null;//创建Dao对象,用于下述调用注册方法UserDao2 dao2 = new UserDao2();//插入数据的返回值int result = 0;//创建输出流,便于将结果打印到浏览器中PrintWriter out = null;//1.调用请求对象读取请求头参数信息,得到用户的信息userName = request.getParameter("userName");password = request.getParameter("password");sex = request.getParameter("sex");email = request.getParameter("email");//2.使用JDBC将用户信息填充到MySQL数据库//将用户信息存储到user中user = new Users(null,userName,password,sex,email);result = dao2.add(user);//3.调用响应对象将处理结果以二进制形式传入响应体中//更该浏览器的编码方式,以便能编译其html和中文response.setContentType("text/html;charset=utf-8");//拿到响应器的输出流out = response.getWriter();if (result == 1){out.print("<font style='color:red;font-size:40'>用户信息注册成功</font>");}else{out.print("<font style='color:red;fond-size:40'>用户信息注册失败</font>");}}//doGet结束后,Tomcat负责销毁请求对象和响应对象//tomcat负责将HTTP协议包推送到发起请求的浏览器上//浏览器根据响应头content-type指定编译器对响应体二进制内容编辑//浏览器将编辑后的结果在窗口中展示给用户  【互联网通信结束】
}
结果展示:

Ⅰ.在输入框输入注册数据:

Ⅱ.点击用户注册按钮,弹出注册成功:

Ⅲ.打开数据库中的t_users表,验证数据插入:

Ⅳ.插入数据成功,插入功能实现完毕!

改进方案(书写jdbc工具类):

jdbc工具类JDBC_Util:(util包下)

package com.shawnWeb.util;import java.sql.*;public class JDBC_Util {/*工具类中的构造方法都是私有化的,目的是为了防止new对象,因为工具中的方法都是静态的,不需要new对象,为了方便起见。*/private JDBC_Util(){}//注册驱动(在一个没有结束的程序中,静态代码块内容只执行一次)static {try{Class.forName("com.mysql.jdbc.Driver");}catch(Exception e){e.printStackTrace();}}//获取数据库连接public static Connection createConnection() throws SQLException{String url = "jdbc:mysql://localhost:3306/bjpowernode";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url,user,password);return conn;}public static void close(Connection conn, Statement stmt, ResultSet rs){if (rs != null){try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (stmt != null){try {stmt.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}
}

JDBC_Util类的使用:(dao包下)

package com.shawnWeb.dao;import com.shawnWeb.entity.Users;
import com.shawnWeb.util.JDBC_Util;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class UserDao {//构造方法public UserDao(){}//用户注册方法public int add(Users user){Connection conn = null;PreparedStatement ps = null;int result = 0;try {//getConnection方法执行时,注册驱动和获取数据库连接操作都已完成;conn = JDBC_Util.createConnection();//3.获取数据库操作对象String sql = "insert into t_users(userName,password,sex,email) values(?,?,?,?)";ps = conn.prepareStatement(sql);//给?处传值ps.setString(1,user.getUserName());ps.setString(2,user.getPassword());ps.setString(3,user.getSex());ps.setString(4,user.getEmail());//4.执行SQL语句result = ps.executeUpdate();//5.处理结果集(由于是增添操作,无需处理结果集)}catch(SQLException e){e.printStackTrace();}finally{//6.关闭释放资源JDBC_Util.close(conn,ps,null);}return result;}
}

<3>查询注册信息实现:

a.创建出类UserFindServlet:(controller包下)
b.配置xml文件:(web.xml)
<servlet><servlet-name>UserFindServlet</servlet-name><servlet-class>com.shawnWeb.controller.UserFindServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserFindServlet</servlet-name><url-pattern>/user/find</url-pattern></servlet-mapping>
c.实现findAll()方法:()(dao包下)
//查询所有用户信息方法public List findAll(){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;//创建一个List集合返回所有用户信息List<Users> usersList = new ArrayList <>();try {//注册驱动和获取数据库连接conn = JDBC_Util.createConnection();//获取数据库操作对象String sql = "select * from t_users";ps = conn.prepareStatement(sql);//执行SQL语句rs = ps.executeQuery();//处理结果集while(rs.next()){Integer userId = rs.getInt("userId");String userName = rs.getString("userName");String password = rs.getString("password");String sex = rs.getString("sex");String email = rs.getString("email");//将以上数据存入实体类Users users = new Users(userId,userName,password,sex,email);//将所有users传入List集合中usersList.add(users);}} catch (SQLException throwables) {throwables.printStackTrace();}finally {JDBC_Util.close(conn,ps,rs);}return usersList;}
d.补充UserFindServlet类:(controller包下)
package com.shawnWeb.controller;import com.shawnWeb.dao.UserDao;
import com.shawnWeb.entity.Users;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;public class UserFindServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//初始化变量区UserDao dao = new UserDao();PrintWriter out = null;//[调用DAO]将查询命令推送到数据库服务器上,得到所有用户信息【List】List<Users> usersList = dao.findAll();//【调用响应对象】将用户信息结合<table>标签以二进制写入响应体response.setContentType("text/html;charset=utf-8");out = response.getWriter();out.print("<table border='2' align='center'>");out.print("<tr>");out.print("<td>用户编号</td>");out.print("<td>用户姓名</td>");out.print("<td>用户密码</td>");out.print("<td>用户性别</td>");out.print("<td>用户邮箱</td>");out.print("<td>删除操作</td>");out.print("<td>修改数据</td>");out.print("</tr>");for (Users users:usersList){out.print("<tr>");out.print("<td>"+users.getUserId()+"</td>");out.print("<td>"+users.getUserName()+"</td>");out.print("<td>******</td>");out.print("<td>"+users.getSex()+"</td>");out.print("<td>"+users.getEmail()+"</td>");out.print("<td><a href='/myWeb/user/delete?userId="+users.getUserId()+"'>删除用户</a></td>");}out.print("</table>");}
}

查询注册信息功能完毕!

(4)浏览界面的实现:

Ⅰ.制作标题:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body style="background-color:green">
<center><font style="color: red;font-size: 40px">在线考试管理系统</font>
</center>
</body>
</html>

Ⅱ.制作索引页:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><ul><li>用户信息管理<ol><li><a href="/myWeb/user_Add.html" target="right">用户信息注册</a></li><li><a href="/myWeb/user/find" target="right">用户信息查询</a></li></ol></li><li>试题信息管理</li><li>在线考试管理</li></ul>
</body>
</html>

Ⅲ.主页面书写:


<html >
<head><meta charset="UTF-8"><title>Title</title>
</head>
<frameset rows="15%,85%"><frame name="top" src="/myWeb/top.html"/><frameset cols="15%,85%"><frame name="left" src="/myWeb/left.html"/><frame name="right"></frameset>
</frameset>
</html>
网页实现效果:

查询注册结果演示:

(5)删除数据功能实现

a.创建出UserDeleteServlet类:(controller包下)
b.配置xml文件:(web.xml文件下)
<servlet><servlet-name>UserDeleteServlet</servlet-name><servlet-class>com.shawnWeb.controller.UserDeleteServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserDeleteServlet</servlet-name><url-pattern>/user/delete</url-pattern></servlet-mapping><servlet>
c.实现delete()方法:(dao包下)
//删除选定编号的用户信息方法public int delete(String userId){//初始化参数Connection conn = null;PreparedStatement ps = null;int result = 0;try {//注册驱动+获取数据库连接conn = JDBC_Util.createConnection();//获取数据库操作对象String sql = "delete from t_users where userId=?";ps = conn.prepareStatement(sql);//给?处传值ps.setString(1,userId);//执行SQL语句result = ps.executeUpdate();//无需处理结果集} catch (SQLException throwables) {throwables.printStackTrace();}finally{//释放资源JDBC_Util.close(conn,ps,null);}return result;}
d.补全UserDeleteServlet类:(controller包下)
package com.shawnWeb.controller;import com.shawnWeb.dao.UserDao;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class UserDeleteServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String userId = null;PrintWriter out = null;UserDao dao = new UserDao();int result = 0;//调用请求对象,读取请求头中的”用户编号“参数userId = request.getParameter("userId");//调用【DAO】将用户编号填充到delete命令并发送到数据库服务器result = dao.delete(userId);//【调用响应对象】将处理结果以二进制写入响应体,交给浏览器response.setContentType("text/html;charset=utf-8");out = response.getWriter();if (result == 1){out.print("<font style='color:red;font-size:40'>用户信息删除成功</font>");}else{out.print("<font style='color:red;font-size:40'>用户信息删除失败</font>");}}
}
删除功能结果演示:

Ⅰ.查询注册用户信息操作页面

Ⅱ.点击Adam后面的删除:

Ⅲ.删除后查询结果演示:

删除功能实现完毕!

(6)登录功能实现:

a.制作登录界面和登录失败界面:(web包下)

登陆界面:(login.html)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<center><form action="/myWeb/login" method="post"><table border="2"><tr><td>登录名称</td><td><input type="text" name="userName"/></td></tr><tr><td>密码</td><td><input type="password" name="password"/></td></tr><tr><td><input type="submit" name="登录"/></td><td><input type="reset" name="重置"/></td></tr></table></form>
</center>
</body>
</html>

登录失败界面:(login_error.html)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<center><font style="color:red;font-size: 30px">登录信息有误,请重新登陆</font><form action="/myWeb/login" method="post"><table border="2"><tr><td>登录名称</td><td><input type="text" name="userName"/></td></tr><tr><td>密码</td><td><input type="password" name="password"/></td></tr><tr><td><input type="submit" name="登录"/></td><td><input type="reset" name="重置"/></td></tr></table></form>
</center>
</body>
</html>
b.创建LoginServlet类:(controller包下)
c.配置xml文件:(web.xml文件下)
<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.shawnWeb.controller.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>
d.实现login方法:(dao包下)
//登陆验证方法public int login(String userName,String password){//准备参数Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;int result = 0;String sql = "select count(*) from t_users where userName=? and password=?";try {//注册驱动+获取数据库连接conn = JDBC_Util.createConnection();//获取数据库操作对象ps = conn.prepareStatement(sql);//给?处传值ps.setString(1,userName);ps.setString(2,password);//执行SQL语句rs = ps.executeQuery();//处理结果集while(rs.next()){result = rs.getInt("count(*)");}} catch (SQLException throwables) {throwables.printStackTrace();}finally{//释放资源JDBC_Util.close(conn,ps,rs);}return result;}
e.补充LoginServlet类:(controller包下)
package com.shawnWeb.controller;import com.shawnWeb.dao.UserDao;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//准备变量String userName,password;UserDao dao = new UserDao();int result = 0;//调用请求对象对请求体使用utf-8字符集进行重新编辑request.setCharacterEncoding("utf-8");//调用请求信息读取请求体参数信息userName = request.getParameter("userName");password = request.getParameter("password");//调用dao将查询验证信息推送到数据库服务器上result = dao.login(userName,password);//调用响应对象,根据验证结果将不同资源文件地址写入响应头中,交给浏览器if (result == 1){response.sendRedirect("/myWeb/index.html");}else{response.sendRedirect("/myWeb/login_error.html");}}
}
登录成果展示:

Ⅰ.登录界面:

Ⅱ.输入已注册的账号密码:

Ⅲ.点击提交,跳转至初始界面:
Ⅳ.输入未注册的账号密码:
Ⅴ.跳转到login_error.html页面:

登录功能实现完毕!

(7)修改密码功能实现:

a.修改密码界面:(updatePassword.html)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>updatePassword_Page</title>
</head>
<body>
<center><form action="/myWeb/updatePassword" method="get"><table border="2"><tr><td>用户名</td><td><input type="text" name="userName"/></td></tr><tr><td>用户密码</td><td><input type="password" name="oldPassword"/> </td></tr><tr><td>新密码</td><td><input type="password" name="newPassword"/> </td></tr><tr><td><input type="submit" value="修改密码(●'◡'●)"/> </td><td><input type="reset" name="重置"/> </td></tr></table></form>
</center>
</body>
</html>
b.在主页面添加修改密码界面:(left.html)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><ul><li>账号安全管理<ol><li><a href="login.html" target="right">登录</a></li><li><a href="updatePassword.html" target="right">修改密码</a></li></ol></li><li>用户信息管理<ol><li><a href="/myWeb/user_Add.html" target="right">用户信息注册</a></li><li><a href="/myWeb/user/find" target="right">用户信息查询</a></li></ol></li><li>试题信息管理</li><li>在线考试管理</li></ul></body>
</html>
3.建立实体类updatePassword类:(cotroller包下)
4.在xml文件中配置updatePassword类的服务器:(web.xml)
<servlet><servlet-name>updatePassword</servlet-name><servlet-class>com.shawnWeb.controller.updatePassword</servlet-class></servlet><servlet-mapping><servlet-name>updatePassword</servlet-name><url-pattern>/updatePassword</url-pattern></servlet-mapping>
5.在dao文件中实现updatePassword方法:(dao包下)
//修改密码方法public int updatePassword(String userName,String oldPassword,String newPassword){//初始化变量区Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;//储存账号密码验证信息int result1 = 0;//存储账号密码验证信息int result2 = 0;//存储更新密码的返回值String isLoginSQL = "select count(*) from t_users where userName=? and password=?";String sql = "update t_users set password=? where userName=?";try {//注册驱动+获得数据库连接conn = JDBC_Util.createConnection();//获取数据库操作对象ps = conn.prepareStatement(isLoginSQL);//给?处传值ps.setString(1,userName);ps.setString(2,oldPassword);//执行SQL语句rs = ps.executeQuery();//处理结果集while(rs.next()){result1 = rs.getInt("count(*)");}//当result1返回1时,证明登录成功,即获得改密码权限if (result1 == 1){//再次获得数据库操作对象ps = conn.prepareStatement(sql);//给?处传值ps.setString(1,newPassword);ps.setString(2,userName);//执行SQL语句result2 = ps.executeUpdate();//无需处理结果集}else{//登录失败result2 = 0;}} catch (SQLException throwables) {throwables.printStackTrace();}finally{JDBC_Util.close(conn,ps,rs);}return result2;}
6.补充updatePassword类即可:
package com.shawnWeb.controller;import com.shawnWeb.dao.UserDao;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class updatePassword extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//初始化变量区String userName,oldPassword,newPassword;int result;UserDao dao = new UserDao();PrintWriter out = null;//通过【请求头】拿到所需要的数据:用户名,旧密码,新密码userName = request.getParameter("userName");oldPassword = request.getParameter("oldPassword");newPassword = request.getParameter("newPassword");//调用【dao】类的updatePassword方法,拿到结果;result = dao.updatePassword(userName,oldPassword,newPassword);//通过【响应头】在页面中显示修改密码成功response.setContentType("text/html;charset=utf-8");out = response.getWriter();if (result == 1){out.print("<font style='color:red;font-size:40'>用户密码修改成功</font>");}else{out.print("<font style='color:red;font-size:40'>输入信息有误,用户信息修改失败</font>");}}
}
修改密码结果演示:

进入修改密码页面:

填写相关信息
错误情况

正确情况

修改密码功能实现完毕!

Servlet(互联网通信基础及实例)(上)相关推荐

  1. Servlet笔记十(文件上传和下载)

    本栏博客目录 Serlvet笔记一(Servlet基础) Servlet笔记二(请求和响应) Servlet笔记三(会话及其会话技术) Servlet笔记四(JSP技术) Servlet笔记五(EL表 ...

  2. aws 删除ec2实例_如何在AWS EC2实例上部署Spring Boot应用程序

    aws 删除ec2实例 你好朋友, 在本教程中,我们将看到如何在AWS EC2实例上部署Spring Boot应用程序. 这是我们将要执行的步骤. 1.使用Spring Boot Initialise ...

  3. 如何在AWS EC2实例上部署Spring Boot应用程序

    你好朋友, 在本教程中,我们将看到如何在AWS EC2实例上部署Spring Boot应用程序. 这是我们将要执行的步骤. 1.使用Spring Boot Initialiser创建一个Spring ...

  4. 亚马逊ec2 实例删除_亚马逊免费使用套餐:在EC2 Linux实例上安装Tomcat 7

    亚马逊ec2 实例删除 Amazon Web Services提供了12个月的免费使用期限,使开发人员可以在云中运行任何他们想要的东西. 免费层包括14个服务,其中Web开发人员最关注EC2服务. E ...

  5. 亚马逊免费使用套餐:在EC2 Linux实例上安装Tomcat 7

    Amazon Web Services提供了12个月的免费使用期限,使开发人员可以在云中运行任何他们想要的东西. 免费层包括14个服务,其中Web开发人员最关注EC2服务. EC2是一项服务,通过停止 ...

  6. HttpContext.Current.Session ,出现未将对象引用设置到实例上

    HttpContext.Current.Session ,出现未将对象引用设置到实例上  using System.Web.SessionState; public class xx: IHttpHa ...

  7. 本篇文档介绍如何手动在ECS实例上部署Java web项目

    本篇文档介绍如何手动在ECS实例上部署Java web项目.适用于刚开始使用阿里云进行建站的个人用户. 项目配置 { .section} 本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软 ...

  8. serv-u 数据备份_如何使用用户数据脚本在EC2实例上安装Apache Web Server

    serv-u 数据备份 你好朋友, 在本教程中,我们将看到如何使用用户数据脚本在EC2实例上安装Apache Web Server. 在我以前的教程之一中,我已经解释了如何使用AWS控制台启动EC2实 ...

  9. 如何使用用户数据脚本在EC2实例上安装Apache Web Server

    你好朋友, 在本教程中,我们将看到如何使用用户数据脚本在EC2实例上安装Apache Web Server. 在我以前的教程之一中,我已经解释了如何使用AWS控制台启动EC2实例.如果您还没有完成该操 ...

  10. linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡

    本文在介绍将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡的基础上,重点探讨了其具体步骤,本文内容很紧凑,希望大家耐心学习. 配置 ECS 实例的弹性网卡 如果您的实例使用以下几种镜像,您不需要手 ...

最新文章

  1. 推荐10个小众简约,但是实用的软件和网站
  2. numpy一维数组的反转/倒序
  3. 最优化——线性规划中最大规划和最小规划之间的转换
  4. Java 序列化 之 单例模式
  5. python 创建子类_python创建子类的方法分析
  6. Qt界面UI之QML初见(学习笔记四)
  7. layout里添加xml文件没有在R.java里生成ID
  8. ASP.NET【1】
  9. xgboost三种特征重要性选择方法
  10. LRC软件测试自学,LRC滚动歌词制作编辑器
  11. c语言逻辑推理题大全,C语言逻辑推理例题(附答案)
  12. C#程序设计基础试题(一)
  13. oracle 删除索引报错ORA-01418:sepecified index does not exist
  14. Gallery 简易图片浏览
  15. Redis 惰性删除
  16. 爆笑!让你捧腹大笑的标语
  17. 带头结点的单链表删除操作 (10 分)
  18. Linux Top 详细介绍,包含task排序
  19. 采购项目管理:定义和流程
  20. 【 云原生 | kubernetes 】- Argo CD Gitlab身份验证及SSO单点登录

热门文章

  1. java程序员待遇怎么样_现在的java程序员薪资待遇怎么样?
  2. 使用Github搭建一个属于自己的网站
  3. Linux和Windows双系统下,找回丢失Windows启动项
  4. 实验操作:ELK日志分析系统--------------------------未完待续
  5. 荣耀电视鸿蒙安装第三方软件,荣耀电视如何安装第三方应用?当贝市场几招搞定!...
  6. java opts配置_JAVA_OPTS设置参数
  7. Maven配置MAVEN_OPTS
  8. 前端promise、async重点总结
  9. 计算机上打印机删除不了怎么办,打印任务无法删除怎么办?
  10. Java微信授权登陆