Servlet(互联网通信基础及实例)(上)
前情回顾
文章目录
- 前情回顾
- 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(互联网通信基础及实例)(上)相关推荐
- Servlet笔记十(文件上传和下载)
本栏博客目录 Serlvet笔记一(Servlet基础) Servlet笔记二(请求和响应) Servlet笔记三(会话及其会话技术) Servlet笔记四(JSP技术) Servlet笔记五(EL表 ...
- aws 删除ec2实例_如何在AWS EC2实例上部署Spring Boot应用程序
aws 删除ec2实例 你好朋友, 在本教程中,我们将看到如何在AWS EC2实例上部署Spring Boot应用程序. 这是我们将要执行的步骤. 1.使用Spring Boot Initialise ...
- 如何在AWS EC2实例上部署Spring Boot应用程序
你好朋友, 在本教程中,我们将看到如何在AWS EC2实例上部署Spring Boot应用程序. 这是我们将要执行的步骤. 1.使用Spring Boot Initialiser创建一个Spring ...
- 亚马逊ec2 实例删除_亚马逊免费使用套餐:在EC2 Linux实例上安装Tomcat 7
亚马逊ec2 实例删除 Amazon Web Services提供了12个月的免费使用期限,使开发人员可以在云中运行任何他们想要的东西. 免费层包括14个服务,其中Web开发人员最关注EC2服务. E ...
- 亚马逊免费使用套餐:在EC2 Linux实例上安装Tomcat 7
Amazon Web Services提供了12个月的免费使用期限,使开发人员可以在云中运行任何他们想要的东西. 免费层包括14个服务,其中Web开发人员最关注EC2服务. EC2是一项服务,通过停止 ...
- HttpContext.Current.Session ,出现未将对象引用设置到实例上
HttpContext.Current.Session ,出现未将对象引用设置到实例上 using System.Web.SessionState; public class xx: IHttpHa ...
- 本篇文档介绍如何手动在ECS实例上部署Java web项目
本篇文档介绍如何手动在ECS实例上部署Java web项目.适用于刚开始使用阿里云进行建站的个人用户. 项目配置 { .section} 本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软 ...
- serv-u 数据备份_如何使用用户数据脚本在EC2实例上安装Apache Web Server
serv-u 数据备份 你好朋友, 在本教程中,我们将看到如何使用用户数据脚本在EC2实例上安装Apache Web Server. 在我以前的教程之一中,我已经解释了如何使用AWS控制台启动EC2实 ...
- 如何使用用户数据脚本在EC2实例上安装Apache Web Server
你好朋友, 在本教程中,我们将看到如何使用用户数据脚本在EC2实例上安装Apache Web Server. 在我以前的教程之一中,我已经解释了如何使用AWS控制台启动EC2实例.如果您还没有完成该操 ...
- linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡
本文在介绍将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡的基础上,重点探讨了其具体步骤,本文内容很紧凑,希望大家耐心学习. 配置 ECS 实例的弹性网卡 如果您的实例使用以下几种镜像,您不需要手 ...
最新文章
- 推荐10个小众简约,但是实用的软件和网站
- numpy一维数组的反转/倒序
- 最优化——线性规划中最大规划和最小规划之间的转换
- Java 序列化 之 单例模式
- python 创建子类_python创建子类的方法分析
- Qt界面UI之QML初见(学习笔记四)
- layout里添加xml文件没有在R.java里生成ID
- ASP.NET【1】
- xgboost三种特征重要性选择方法
- LRC软件测试自学,LRC滚动歌词制作编辑器
- c语言逻辑推理题大全,C语言逻辑推理例题(附答案)
- C#程序设计基础试题(一)
- oracle 删除索引报错ORA-01418:sepecified index does not exist
- Gallery 简易图片浏览
- Redis 惰性删除
- 爆笑!让你捧腹大笑的标语
- 带头结点的单链表删除操作 (10 分)
- Linux Top 详细介绍,包含task排序
- 采购项目管理:定义和流程
- 【 云原生 | kubernetes 】- Argo CD Gitlab身份验证及SSO单点登录
热门文章
- java程序员待遇怎么样_现在的java程序员薪资待遇怎么样?
- 使用Github搭建一个属于自己的网站
- Linux和Windows双系统下,找回丢失Windows启动项
- 实验操作:ELK日志分析系统--------------------------未完待续
- 荣耀电视鸿蒙安装第三方软件,荣耀电视如何安装第三方应用?当贝市场几招搞定!...
- java opts配置_JAVA_OPTS设置参数
- Maven配置MAVEN_OPTS
- 前端promise、async重点总结
- 计算机上打印机删除不了怎么办,打印任务无法删除怎么办?
- Java微信授权登陆