网站数据分析
一: 语言与环境
- java hadoop
- 环境要求: eclipse / 虚拟机 / linux / hadoop(hive,hdfs,mysql) / myeclipse(可选)
二: 功能要求
- 利用MapReduce对日志文件进行离线分析,将分析后的数据通过ssm可视化展示
三: 日志内容 (customer.txt)
13726230503,00-FD-07-A4-72-B8:CMCC,192.168.33.3,http://www.imooc.cn/stu,2017-08-04 15:30:20
13826544101,5C-0E-8B-C7-F1-E0:CMCC,192.168.33.3,http://www.edu360.cn/teach,2017-08-04 15:35:20
13926435656,20-10-7A-28-CC-0A:CMCC,192.168.33.4,http://www.csdn.cn/stu,2017-08-04 15:30:20
13926251106,5C-0E-8B-8B-B1-50:CMCC,192.168.33.4,http://www.edu360.cn/job,2017-08-04 16:30:20
18211575961,94-71-AC-CD-E6-18:CMCC-EASY,192.168.33.5,http://www.imooc.cn/job,2017-08-04 15:40:20
13560439658,C4-17-FE-BA-DE-D9:CMCC,192.168.33.3,http://www.edu360.cn/stu,2017-08-05 15:30:20
15920133257,5C-0E-8B-C7-BA-20:CMCC,192.168.44.3,http://www.edu360.cn/teach,2017-08-05 15:35:20
13719199419,68-A1-B7-03-07-B1:CMCC-EASY,192.168.33.44,http://www.edu360.cn/stu,2017-08-05 15:30:20
15013685858,5C-0E-8B-C7-F7-90:CMCC,192.168.33.46,http://www.edu360.cn/job,2017-08-05 16:30:20
15989002119,E8-99-C4-4E-93-E0:CMCC-EASY,192.168.33.55,http://www.edu360.cn/job,2017-08-05 15:40:20
13560439658,C4-17-FE-BA-DE-D9:CMCC,192.168.133.3,http://www.csdn.cn/register,2017-08-06 15:30:20
13480253104,5C-0E-8B-C7-FC-80:CMCC-EASY,192.168.111.3,http://www.edu360.cn/register,2017-08-06 15:35:20
13602846565,5C-0E-8B-8B-B6-00:CMCC,192.168.34.44,http://www.imooc.cn/pay,2017-08-06 15:30:20
13922314466,00-FD-07-A2-EC-BA:CMCC,192.168.33.46,http://www.imooc0.cn/excersize,2017-08-06 16:30:20
13502468823,5C-0A-5B-6A-0B-D4:CMCC-EASY,192.168.33.55,http://www.csdn.cn/job,2017-08-06 15:40:20
13726230503,84-25-DB-4F-10-1A:CMCC-EASY,192.168.33.46,http://www.edu360.cn/excersize,2017-08-06 16:30:20
13925057413,00-1F-64-E1-E6-9A:CMCC,192.168.33.25,http://www.edu360.cn/job,2017-08-06 15:40:20
13760778710,00-FD-07-A4-7B-08:CMCC,192.168.33.36,http://www.csdn.cn/excersize,2017-08-06 16:30:20
13726230503,C4-17-FE-BA-DE-D9:CMCC,192.168.33.55,http://www.imooc.cn/job,2017-08-06 15:40:20
解题思路:
- 第一步: 开启虚拟机,运行hadoop集群,将要解析的日志文件(customer.txt)加载到hdfs上
- 第二步: 打开 eclipse 导入 lib支持包 , 编写MapReduce 对日志文件解析
- 第三步: 拿到解析后的数据存入hive数据仓库,根据题目要求对hive进行查询存入新hive表
- 第四步: 将hive表数据通过 sqoop 工具 导出数据给 mysql(这里的mysql一定是linux中的mysql)
- 第五步: 通过SSM对linux中的mysql数据进行数据可视化
细节说明:
- 我们拿到数据进行展示要通过用户登录的方式进行数据的全查
- 那么 我们就要提供对应的user进行用户登录审核
- 我们除了需要在linux中的mysql拿到hive导入过来的数据表之外,还需要新建一张user仅供用户的登陆
思路明确,开始编码
一: 对 日志文件 通过 MapReduce 技术清洗
-
运行linux,打开 hadoop 集群
-
[root@master ~]# bash ~/app/hadoop-2.6.0-cdh5.14.0/sbin/start-all.sh [root@master ~]# jps 1360 NameNode 2274 Jps 1448 DataNode 1896 NodeManager 1804 ResourceManager 1630 SecondaryNameNode
-
-
将 日志文件 上传到 hdsf系统
-
通过 filezilla 或者 xftp 将 windows日志文件传入到linux中,再运行命令将linux中的日志文件上传到hdfs
[root@master MP]# hadoop fs -mkdir /mpfile -- 新建一个hdfs文件夹用于存放 日志文件 [root@master MP]# hadoop fs -put customer.txt /mpfile -- 将 日志文件传入到 hdfs 平台
-
-
编写 MapReduce 代码
自行导入 lib 支持jar包 mapper类 package com.hp.a; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class CustomerMapper extends Mapper<LongWritable, Text, Text, NullWritable>{ @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, NullWritable>.Context context) throws IOException, InterruptedException { //拿到 一行 数据, 通过逗号分隔截取出每个元素存放到 字符串类型的 linus 数组中 String lines[] = value.toString().split(","); //对 lines 数组筛选出题目要求对应的下标元素 通过 上下文对象context传入到下一个阶段 context.write(new Text(lines[0]+" "+lines[3]+" "+lines[4]), NullWritable.get()); } } 不需要写reduce代码 进行提交 package com.hp.a; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class CustomerSubmitter { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); if(fs.exists(new Path(args[1]))) { fs.delete(new Path(args[1]),true); } Job job = Job.getInstance(); job.setJarByClass(CustomerSubmitter.class); job.setMapperClass(CustomerMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(NullWritable.class); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.waitForCompletion(true); } }
-
通过 eclipse 导出 MapReduce 代码jar包,上传到linux平台 进行执行
[root@master MP]# hadoop jar 0521kaoshi.jar /mpfile/customer.txt /0604 这个命令一共有几个参数: hadoop: 代表hadoop平台 jar: 我们要执行jar文件 0521kaoshi.jar: eclipse导出的执行jar /mpfile/customer.txt: hdfs上面的日志文件 /0604: 输出清洗后数据存放的目录 -- 到时候我们要通过hive解析的数据就是在这里
二: 打开 hive 创建 库 表 存放 MapReduce清洗的数据
-
配置 hive 结构
创建hive库 create database kaoshi; 使用hive库 use kaoshi; 创建hive表 CREATE TABLE `cum_backup`( `phonenum` string, `url` string, `time` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
-
加载hdfs数据给hive
load data inpath '/0604/part-r-00000' into table cum_backup;
-
使用 sqoop 将该表内容导入到 mysql 数据库
先创建 mysql 数据库 和 表 进行存放 创建mysql库 create database kaoshi; 使用mysql表 use kaoshi; 创建mysql表 create table cum_backup( phonenum varchar(32), url varchar(32), time varchar(32) ); bin/sqoop export --connect jdbc:mysql://localhost:3306/kaoshi --username root --password mysql --table cum_backup --export-dir /user/hive/warehouse/kaoshi.db/cum_backup --input-fields-terminated-by " "; 注意点: 这里所要注意的是 mysql和hive库名 账号密码 都要使用自己环境上面的
-
在 linux 中 进入mysql 进行全查,确保数据都进来了
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | kaoshi | | metastore | | mysql | | performance_schema | | test | +--------------------+ mysql> use kaoshi; Database changed mysql> show tables; +------------------+ | Tables_in_kaoshi | +------------------+ | access_new | | cum_backup | | goods_new | | user | +------------------+ 4 rows in set (0.00 sec) mysql> select phonenum,url,time from cum_backup; +-------------+--------------------------------+---------------------+ | phonenum | url | time | +-------------+--------------------------------+---------------------+ | 13826544101 | http://www.edu360.cn/teach | 2017-08-04 15:35:20 | | 15013685858 | http://www.edu360.cn/job | 2017-08-05 16:30:20 | | 13922314466 | http://www.imooc0.cn/excersize | 2017-08-06 16:30:20 | | 15920133257 | http://www.edu360.cn/teach | 2017-08-05 15:35:20 | | 15989002119 | http://www.edu360.cn/job | 2017-08-05 15:40:20 | | 18211575961 | http://www.imooc.cn/job | 2017-08-04 15:40:20 | | 13480253104 | http://www.edu360.cn/register | 2017-08-06 15:35:20 | | 13502468823 | http://www.csdn.cn/job | 2017-08-06 15:40:20 | | 13560439658 | http://www.csdn.cn/register | 2017-08-06 15:30:20 | | 13560439658 | http://www.edu360.cn/stu | 2017-08-05 15:30:20 | | 13602846565 | http://www.imooc.cn/pay | 2017-08-06 15:30:20 | | 13719199419 | http://www.edu360.cn/stu | 2017-08-05 15:30:20 | | 13726230503 | http://www.imooc.cn/job | 2017-08-06 15:40:20 | | 13726230503 | http://www.imooc.cn/stu | 2017-08-04 15:30:20 | | 13726230503 | http://www.edu360.cn/excersize | 2017-08-06 16:30:20 | | 13760778710 | http://www.csdn.cn/excersize | 2017-08-06 16:30:20 | | 13925057413 | http://www.edu360.cn/job | 2017-08-06 15:40:20 | | 13926251106 | http://www.edu360.cn/job | 2017-08-04 16:30:20 | | 13926435656 | http://www.csdn.cn/stu | 2017-08-04 15:30:20 | +-------------+--------------------------------+---------------------+ 创建 user 表 create table user(username varchar(32),password varchar(32)); 插入 数据 用于登陆 insert into user values("hello","ssm");
-
完成了数据的清洗和存储,接下来就是ssm进行数据展示了
三: 编写 SSM
-
导入 依赖 jar 存放到 WEB-INF 下面的lib 添加到环境(Build Path)
-
编写四个配置文件(1. applicationContext.xml 2. mvc-servlet.xml 3. web.xml 4. jdbc.properties)
-
- applicationContext.xml --(放在 WEB-INF 目录下)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 告知spring在哪一个包下面使用了注解 --> <context:component-scan base-package="com.hp"></context:component-scan> <!-- 读取小配置文件 jdbc.properties --> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> <!-- 配置连接数据库的相关参数 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 构建SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- sqlsession离不开数据源 注入数据源 --> <property name="dataSource" ref="dataSource"></property> <!-- 给实体类起别名 --> <property name="typeAliasesPackage"> <value>com.hp.entity</value> </property> <!-- 注册mapper --> <property name="mapperLocations"> <list> <value>classpath:com/hp/dao/*Mapper.xml</value> </list> </property> </bean> <!-- 创建dao实现类对象 --> <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 告知spring给哪一个包下的接口创建实现类对象 --> <property name="basePackage"> <value>com.hp.dao</value> </property> </bean> <!-- 引入控制事务 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 控制事务需要数据源 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 激活事务的注解 --> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> </beans> <!-- <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 告知spring在哪一个包下面使用了注解 <context:component-scan base-package="com.hp"></context:component-scan> 读取小配置文件 jdbc.properties <context:property-placeholder location="classpath:jdbc.properties" /> 配置连接数据库的相关参数 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> 构建sqlSessionFactory <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> sqlsession离不开数据源, 注入数据源 <property name="dataSource" ref="dataSource"></property> 给实体类起别名 <property name="typeAliasesPackage"> <value>com.hp.entity</value> </property> 注册mapper <property name="mapperLocations"> <list> <value>classpath:com/hp/dao/*Mapper.xml</value> </list> </property> </bean> 引入控制事务 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 控制事务需要数据源 <property name="dataSource" ref="dataSource"></property> </bean> 激活事务的注解 <tx:annotation-driven transaction-manager="transactionManager"/> </beans> -->
-
2.mvc-servlet.xml --(放在 WEB-INF 目录下)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-- 指定SpringMVC控制器所在的包 --> <context:component-scan base-package="com.hp"></context:component-scan> <!-- 开启springmvc的注解功能 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 配置springmvc针对页面的视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置一个对静态资源处理的处理器:防止静态资源无法访问 --> <mvc:default-servlet-handler/> </beans>
-
3.web.xml --(放在 WEB-INF 目录下)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>kaoshiB</display-name> <!-- 编码格式 --> <filter> <filter-name>encode</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encode</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 启动web容器时,自动装配ApplicationContext.xml的配置信息 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 编写springmvc的核心入口 Servlet --> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 初始化 --> <load-on-startup>0</load-on-startup> </servlet> <!-- 客户端所有请求都经过入口Servlet处理 --> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
-
4.jdbc.properties(放在 src目录下)
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.65.110:3306/kaoshi jdbc.username=root jdbc.password=mysql 注意点: ip写你的linux的ip,通过ifconfig可以查看 /kaoshi: 这个是 linux中mysql数据库名字
-
三: 编写 后台核心代码
-
创建 com.hp.entity --(用于映射数据库中表字段)
-
创建 com.hp.dao --(用于数据访问)
-
创建 com.hp.service --(事务控制 服务层)
-
创建 com.hp.controller --(控制层 控制页面基本跳转)
-
后台核心代码如下
-
编写 com.hp.entity层
Backup 实体类 属性和 package com.hp.entity; /* 这个类 字段尽量要和 数据表字段名称相同 */ public class Backup { private String phonenum; private String url; private String time; public String getPhonenum() { return phonenum; } public void setPhonenum(String phonenum) { this.phonenum = phonenum; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } @Override public String toString() { return "Backup [phonenum=" + phonenum + ", url=" + url + ", time=" + time + "]"; } public Backup(String phonenum, String url, String time) { super(); this.phonenum = phonenum; this.url = url; this.time = time; } public Backup() { super(); } } 创建user 表 package com.hp.entity; public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } 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 User(int id, String username, String password) { super(); this.id = id; this.username = username; this.password = password; } public User() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + "]"; } }
-
编写 com.hp.dao 层
BackupDao 类 package com.hp.dao; import java.util.ArrayList; import com.hp.entity.Backup; public interface BackupDao { //全查 ArrayList<Backup> findAll(); }
BackupDaoMapper.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.hp.dao.BackupDao"> <select id="findAll" resultType="Backup"> select * from cum_backup </select> <insert id="insertBackup"> insert into cum_backup values(phonenum,sex,url,time,age); </insert> </mapper>
UserDao类 package com.hp.dao; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.hp.entity.User; @Repository public interface UserDao { // 登 陆 User login(String username); //插入 void insertUser(@Param("id")int id,@Param("username")String username,@Param("password")String password); }
UserDaoMapper.xml文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.hp.dao.UserDao"> <select id="login" resultType="User"> select id,username,password from user where username=#{username} </select> <insert id="insertUser"> insert into user(id,username,password) values(#{id},#{username},#{password}) </insert> </mapper>
-
编写 com.hp.service 层
package com.hp.service; import java.util.ArrayList; import com.hp.entity.Backup; public interface BackupService { ArrayList<Backup> findAll(); }
package com.hp.service; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.hp.dao.BackupDao; import com.hp.entity.Backup; @Service public class BackupServiceImpl implements BackupService { @Autowired private BackupDao backupdao; public ArrayList<Backup> findAll() { return backupdao.findAll(); } } ``` ``` package com.hp.service; import com.hp.entity.User; public interface UserService { //登陆 User login(String username); //插入 void insertUser(int id,String username,String password); } ``` ``` package com.hp.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.hp.dao.UserDao; import com.hp.entity.User; @Service @Transactional //控制事务 public class UserServiceImpl implements UserService { @Autowired private UserDao userdao; @Override public User login(String username) { User login = userdao.login(username); return login; } @Override public void insertUser(int id, String username, String password) { userdao.insertUser(id,username,password); } } ```
-
编写 com.hp.Controller 层
package com.hp.controller; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.hp.entity.User; import com.hp.service.UserService; /*用于用户登录注册的跳转*/ @Controller @RequestMapping(value="/login") public class UserController { @Autowired private UserService userservice; //登陆 @RequestMapping("/user") public String login(String username,String password,HttpSession session){ System.out.println("Jsp"+" "+"用户名:"+username+" 密码"+password); User user = userservice.login(username); if(user != null){ if(user.getPassword().equals(password)){ session.setAttribute("admin", user); System.out.println("登陆成功"); return "forward:/back/findall"; }else{ System.out.println("密码错误"); return "login"; } }else{ System.out.println("用户不存在"); return "login"; } } //插入 @RequestMapping(value="/insertUser") public String insertUser(String id,String username,String password,HttpSession session){ userservice.insertUser(Integer.parseInt(id),username,password); session.setAttribute("msg", username); return "registersuccess"; } }
package com.hp.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.hp.entity.Backup; import com.hp.service.BackupService; /*用于用户全查的跳转*/ @Controller @RequestMapping("/back") public class BackupController { @Autowired private BackupService backupservice; @RequestMapping("/findall") public String findall(Model model){ List<Backup> findall = backupservice.findAll(); System.out.println(findall); model.addAttribute("findall",findall); return "forwad:/findall.jsp"; } }
-
前台 展示 代码
-
login.jsp 用户登录首页
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <title>用户登录</title> </head> <body> <form action="/kaoshi/login/user" method="post"> <h2>用户登录</h2> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> <input type="submit" value="登陆"> <a href="/kaoshi/register.jsp"><input type="button" value="注册"></a> </form> </body> </html>
-
用户注册页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <title>用户注册</title> </head> <body> <form action="${pageContext.request.contextPath}/login/insertUser" method="post"> <h2>用户注册</h2> ID:<input type="text" name="id"><br/> 用户名:<input type="text" name="username"><br/> 密码:<input type="text" name="password"><br/> <input type="submit" value="注册"> </form> </body> </html>
-
findall.jsp 全查显示页面
<%@page contentType="text/html;charSet=UTF-8" isELIgnored="false" language="java" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:set value="${pageContext.request.contextPath}" var="path" /> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>全查界面</title> </head> <body> <center> <h3>展示全查</h3> <table border="1"> <tr> <td>手机号</td> <td>网址</td> <td>访问时间</td> </tr> <c:forEach items="${requestScope.findall}" var="person"> <tr> <td>${person.phonenum}</td> <td>${person.url}</td> <td>${person.time}</td> </tr> </c:forEach> </table> </center> </body> </html>
-
注册 成功页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> <title>用户注册成功</title> </head> <body> 用户${username}注册成功 <a href="/kaoshi/login.jsp">点击传送登陆页面</a> </body> </html>
-