实验四 Java Web编程
一.实验目的
1.掌握Java Web服务器Tomcat的安装、配置。
2.学会简单的HTML表单设计,表单提交。
3.掌握JSP中的request对象、session对象的使用。
二.实验内容
1.下载安装Tomcat8,对其进行配置。启动Tomcat服务器,在浏览器输入 http://127.0.0.1:8080/,查看浏览器输出界面;
2. 定制配置:
(1)修改Tomcat的服务端口为88(默认安装为8080);
(2)修改HTTP GET方式的字符编码为UTF-8(默认为ISO-8859-1);
3.编写一个用户注册模块,功能如下:
(1)设计用户注册表单页面register.jsp,包含:用户名(文本框)、密码(密码框)、性别(下拉框);
(2)设计用户注册数据保存页面doRegister.jsp,用以保存用户数据至user.txt文件。
user.txt中每行保存一个用户,格式为:“用户名,密码,性别”;
(3)如果user.txt已包含同名的用户,提示用户已存在;否则提示注册成功。
4.编写用户登录模块,功能如下:
(1)设计用户登录表单页面login.jsp,包含:用户名(文本框)、密码(密码框);
(2)设计登录验证文件doLogin.jsp,获取客户端提交的用户名、密码,然后从user.txt中验证是否存在该用户,登录密码是否正确;
(3)将登录验证结果反馈给用户。
三.思考题(本文章讲的)
1. 对整个实验进行总结,写出实验心得;
2. 学有余力的同学,将实验中注册、登录功能的数据源user.txt换成数据库的user表(自行设计字段),采用JDBC访问数据库;
前期工作
首先安装Apache Tomcat 8以上的版本并启动本地服务器
当然jsp页面不一定要Eclipse那些IDE才可以启动,其实可以记事本启动的
具体的应该是http://localhost:配置文件里的端口,一般是8080/需要访问的jsp的目录+名字
比如说http://localhost:88/test/1.jsp,指的是tomcat中test文件夹下的1.jsp文件
安装教程:
我选用的是Eclipse IDE for java developers,想在里面创建web项目需要先下载对应的插件,教程:
Eclipse下找不到“新建Web项目”_tangju7086的博客-CSDN博客_eclipse没有web
数据库选用的是MySQL 8.0.25版本,安装教程:
超详细MySQL安装及基本使用教程_bobo553443的博客-CSDN博客_mysql安装教程
这里不建议大家使用命令行操作数据库,可以选择下载Mysql Workbench,安装教程:
注意:如果想要在web项目中使用MySQL,那么一定不要忘了把mysql的驱动jar包重新放置在Tomcat的lib目录下面,否则会疯狂报错;
还有,现在版本的mysql驱动名字已经变成了“com.mysql.cj.jdbc.Driver”,不是以前的“com.mysql.jdbc.Driver”,这里尤其要注意!
mysql-connector-java各种版本下载地址_Bruce_Json的博客-CSDN博客_mysql-connector-java
随后在mysql中创建名为user1的数据库,包含一个user表:
使用MySQL Workbench建立数据库,建立新的表,向表中添加数据 - 星朝 - 博客园
java配置文件读取教程:
配置文件的话,应该长这样:
登录界面jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--这里可以添加引用--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>mysql的登录界面</title>
</head>
<body>
<form action="./logincheck1.jsp" method="post">
<%--form语句——提交表单时,发送数据,这里产生了链接关系---%>
<div align="center"><h1><b>用户登录</b></h1>
<p>
<strong><font size="5">登录id:</font></strong>
<input type="text" name="userid" style="width:300px;height:20px;font:6px"/>
<%--type应该是标签的类型,name则随便【捂脸】,好像还可以指定初始值value=--%>
</p>
<p>
<strong><font size="5">密码:</font></strong>
<input type="password" name="password" style="width:300px;height:20px;font:6px"/></p>
<input type="submit" value="确定" style="width:100px;height:25px"/>
<input type="reset" value="取消" style="width:100px;height:25px"/>
<select name="sex" style="width:100px;height:25px";font="6px">
<option value="女">女</option>
<option value="男">男</option>
</select>
<input type = "button" value = "注册" onclick = "window.location.href = './doRegister.jsp'">
</div></form>
</body>
</html>
登录检测界面
<%@page import="java.io.FileInputStream"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.servlet.*" %>
<%@ page import="java.io.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Server Page Depend !</title>
</head>
<body>
<h3>Which Pae will be depend by the user's message!</h3>
<%
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("userid");//获取name的参数值
String password=request.getParameter("password");//获取password的参数值
String sex=request.getParameter("sex");//获取性别的参数值
%>
<%!
public static Connection conn;
private static Properties prop1;
public static String Driver1;
public static String url1;
public static String user1;
public static String password1;
public static PreparedStatement stmt;
public ResultSet rs;
%>
<% try{
prop1=new Properties();
prop1.load(new FileInputStream(new File("c:/java5/mysqlinfo.properties")));
//这里应该是你电脑上配置文件的位置
Driver1=prop1.getProperty("driver");
url1=prop1.getProperty("url");
user1=prop1.getProperty("user");
password1=prop1.getProperty("pass");
Class.forName(Driver1);//加载mysql驱动
conn=DriverManager.getConnection(url1,user1,password1);
//localhost是本机地址,3306是端口号,最后是用户名和密码
stmt=conn.prepareStatement("SELECT * from user where username='"+name+"' and password='"+password+"' and sex='"+sex+"'");//实例化Statement对象
rs=stmt.executeQuery();//执行数据库查询操作并获取结果集
boolean flag=false;//初始化flag
if(rs.next()){//判断结果,如果超过一条,证明这个用户-密码对是存在的
flag=true;
session.setAttribute("UserName", name);//将name的内容赋值给UserName
}else{
flag=false;
}
%>
<%
if(flag){
%>
<jsp:forward page="./login_success.jsp">
<jsp:param name="uname" value="<%=name%>"/>
</jsp:forward>
<%
}else{
%>
<jsp:forward page="./login_failure.jsp">
<jsp:param name="uname" value="<%=name%>"/>
</jsp:forward>
<%
}
}catch(Exception excp1){excp1.printStackTrace();}
finally{
//关闭上面的几个对象,注意关闭顺序,最后使用的先关闭
rs.close();
stmt.close();
conn.close();
}
%>
</body>
</html>
登录/注册成功界面jsp
<%@page import="java.util.Date"%>
<%@page import="javax.swing.Timer"%>
<%@page import="java.lang.*" %>
<%@page import="java.text.*" %>
<%@page import="java.lang.Exception" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录/注册成功</title>
</head>
<body><div align="center">
<p>
<h1><strong>用户登录/注册成功!!!</strong></h1>
<h2>当前时间:<strong>
<%out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));%>
</strong></h2>
<h3><a href="./doRegister.jsp">跳转至注册界面</a></h3>
</div></body>
</html>
登录失败界面jsp
<%@page import="java.util.Date"%>
<%@page import="javax.swing.Timer"%>
<%@page import="java.lang.*" %>
<%@page import="java.text.*" %>
<%@page import="java.lang.Exception" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录失败</title>
</head>
<body><div align="center">
<p>
<h1><strong>用户注册/登录失败!</strong></h1>
<h2>当前时间:<strong><%
out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
%></strong></h2>
<h3><a href="./register31.jsp">跳转至登录界面</a></h3>
<h3><a href="./doRegister.jsp">跳转至注册界面</a></h3>
</div></body>
</h
注册界面jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--这里可以添加引用--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>mysql用户注册界面</title>
</head>
<body>
<form action="./conduct register.jsp" method="post">
<%--form语句——提交表单时,发送数据,这里产生了链接关系---%>
<div align="center"><h1><b>用户注册</b></h1>
<p>
<strong><font size="5">用户id:</font></strong>
<input type="text" name="userid" style="width:300px;height:20px;font:6px"/>
<%--type应该是指定的输入类型,name则随便【捂脸】,好像还可以指定初始值value=--%>
</p>
<p>
<strong><font size="5">用户密码:</font></strong>
<input type="password" name="password" style="width:300px;height:20px;font:6px"/></p>
<input type="submit" value="确定" style="width:100px;height:25px"/>
<input type="reset" value="取消" style="width:100px;height:25px"/>
<select name="sex" style="width:100px;height:25px";font="6px">
<option value="女">女</option>
<option value="男">男</option>
</select>
</div></form>
</body>
</html>
注册检测(是否注册重复的用户名)界面jsp
<%@page import="java.io.FileInputStream"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.servlet.*" %>
<%@ page import="java.io.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Server Page Depend !</title>
</head>
<body>
<h3>Which Pae will be depend by the user's message!</h3>
<%
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("userid");//获取name的参数值
String password=request.getParameter("password");//获取password的参数值
String sex=request.getParameter("sex");
%>
<%!
public static Connection conn;
private static Properties prop1;
public static String Driver1;
public static String url1;
public static String user1;
public static String password1;
public static PreparedStatement stmt,stmt1;
public ResultSet rs,rs1;
%>
<% try{
prop1=new Properties();//读取配置文件,初始化数据库连接信息
prop1.load(new FileInputStream(new File("c:/java5/mysqlinfo.properties")));
Driver1=prop1.getProperty("driver");
url1=prop1.getProperty("url");
user1=prop1.getProperty("user");
password1=prop1.getProperty("pass");
Class.forName(Driver1);//加载mysql驱动,记住一定要把驱动的jar放在tomcat的lib目录下面
conn=DriverManager.getConnection(url1,user1,password1);
stmt1=conn.prepareStatement("SELECT * FROM user WHERE username='"+name+"'");
stmt=conn.prepareStatement("INSERT INTO user(username, password,sex) VALUES ('"+name+"', '"+password+"', '"+sex+"')");//实例化PreparedStatement对象
rs1=stmt1.executeQuery();
if(rs1.next()){//先行判断是否重名
%>
<jsp:forward page="./register_failure.jsp"></jsp:forward>
<!--标签里面没有元素时不能换行【捂脸】,这里不会继续执行了-->
<% }else{
stmt.executeUpdate();//执行数据库插入操作
%>
<jsp:forward page="./login_success.jsp"></jsp:forward>
<% }
}catch(Exception excp1){excp1.printStackTrace();}
finally{//关闭上面的几个对象,注意关闭顺序,最后使用的先关闭
stmt1.close();
stmt.close();
conn.close();
}
%>
</body>
</html>
注册失败(用户名重复)界面jsp
<%@page import="java.util.Date"%>
<%@page import="javax.swing.Timer"%>
<%@page import="java.lang.*" %>
<%@page import="java.text.*" %>
<%@page import="java.lang.Exception" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册失败</title>
</head>
<body><div align="center">
<p>
<h1><strong>用户名重复,请重新注册!</strong></h1>
<h2>当前时间:<strong><%
out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
%></strong></h2>
<h3><a href="./register31.jsp">跳转至登录界面</a></h3>
<h3><a href="./doRegister.jsp">跳转至注册界面</a></h3>
</div></body>
</html>
示范
登录示范
输入用户名:hhh,密码:123456,性别:女
数据库中的信息:
结果:
注册示范
用户名:hhhy6 密码:123abc 性别:女
注册完成后,数据库信息:
注册失败示范:
再注册一个用户名:hhhy6 密码:随便 性别:女
很明显又重名了,所以失败——