合工大路强java实验四思考题

实验 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文件

安装教程:

Tomcat安装及配置教程 - 全栈开发者社区 - 博客园

我选用的是Eclipse IDE for java developers,想在里面创建web项目需要先下载对应的插件,教程:

Eclipse下找不到“新建Web项目”_tangju7086的博客-CSDN博客_eclipse没有web

数据库选用的是MySQL 8.0.25版本,安装教程:

超详细MySQL安装及基本使用教程_bobo553443的博客-CSDN博客_mysql安装教程

这里不建议大家使用命令行操作数据库,可以选择下载Mysql Workbench,安装教程:

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配置文件读取教程:

Java Properties 类 | 菜鸟教程

配置文件的话,应该长这样:

 登录界面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  密码:随便  性别:女

很明显又重名了,所以失败——

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值