【Javaweb项目实战】黑马旅游网

本次项目主要有以下几个重点导入项目、优化servlet、前后台勾连等。

如图片所示,这是一个常见的网站首页,包括登录、注册、查看相关信息的功能。

但要怎么实现呢?

除了准备好相应的图片文字信息,我们要怎么做才能让它拥有以上功能并展示在页面上呢?

抱着这样的疑惑,我们慢慢来一探究竟吧?

首先是基本准备(也可以使用maven直接导入半成品项目):

后端:

 还有要提前建立存放图片和文字资源的数据库。

这里我使用的是Navicat软件。

这是一款可视化建库软件,使用起来非常方便。

前端及资源文件:

看到pom.xml文件了吗?这表示 我是从maven导入的半成品项目,接下来我们来了解一下如何使用maven导入项目。

maven导入项目:

maven:Maven是一个跨平台的项目管理工具,是Apache组织中的一个颇为成功的开源项目。Maven主要服务基于java的项目构建,项目信息管理和依赖管理。

作用:
1.Maven可以创建项目。
2.Maven可以引入依赖的jar包。
在Maven中有一个核心的概念--仓库,分为本地仓库和远程仓库。远程仓库又分为中央仓库,私服和其他仓库。

首先是确保自己下载了maven的资源文件,并且IDE安装并启动了maven插件:

打开设置:

 以上准备操作没有问题就会在右侧导航栏出现以下内容:

 点击maven,出现以下内容:

 点击“+”号,导入项目。

 选择pom.xml文件,点击OK完成项目导入,初始化微微等待一会即可。

以下是pom.xml文件的内容,我们可以看到里面包含了诸多插件的信息,这是依赖管理:对jar包统一管理的过程

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.itcast</groupId>
  <artifactId>travel</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>


        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.26</version>
            <scope>compile</scope>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.9</version>
        </dependency>
        <!--jdbcTemplate-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.2.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.1.2.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.1.2.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.2.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
            <scope>compile</scope>
        </dependency>
        <!--beanUtils-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.2</version>
            <scope>compile</scope>
        </dependency>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.3.3</version>
        </dependency>


        <!--javaMail-->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.5.3</version>
        </dependency>
        <!--jedis-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.0</version>
        </dependency>

    </dependencies>


    <build>
        <!--maven插件-->
        <plugins>
            <!--jdk编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
            <!--tomcat插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <!-- tomcat7的插件, 不同tomcat版本这个也不一样 -->
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <!-- 通过maven tomcat7:run运行项目时,访问项目的端口号 -->
                    <port>80</port>
                    <!-- 项目访问路径  本例:localhost:9090,  如果配置的aa, 则访问路径为localhost:9090/aa-->
                    <path>/</path>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>

项目导入成功之后我们便要启动项目:

项目启动:

方式一:

 启动Tomcat7:run;的命令

方式二:配置maven快捷启动

 

 启动项目之后来分析一下每一层我们要做的事情:

技术选型:

    1. Web层
    1. Servlet:前端控制器
    2. html:视图
    3. Filter:过滤器
    4. BeanUtils:数据封装
    5. Jackson:json序列化工具
    1. Service层
    1. Javamail:java发送邮件工具
    2. Redis:nosql内存数据库
    3. Jedis:java的redis客户端
    1. Dao层
    1. Mysql:数据库
    2. Druid:数据库连接池
    3. JdbcTemplate:jdbc的工具

现在我们手里已经有了一个前端页面后端实体类已经写好的网页,接下来要让它具备登录注册的功能。

注册功能:

页面效果:

 

前台代码设计:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>注册</title>
        <link rel="stylesheet" type="text/css" href="css/common.css">
        <link rel="stylesheet" href="css/register.css">
		<!--导入jquery-->
		<script src="js/jquery-3.3.1.js"></script>

		<script>
			/*
				表单校验:
					1.用户名:单词字符,长度8到20位
					2.密码:单词字符,长度8到20位
					3.email:邮件格式
					4.姓名:非空
					5.手机号:手机号格式
					6.出生日期:非空
					7.验证码:非空
			 */

			//校验用户名
			//单词字符,长度4到20位
			function checkUsername() {
                //1.获取用户名值
				var username = $("#username").val();
				//2.定义正则
				var reg_username = /^\w{4,20}$/;
				
				//3.判断,给出提示信息
			    var flag = reg_username.test(username);
			    if(flag){
			        //用户名合法
                    $("#username").css("border","");
				}else{
			        //用户名非法,加一个红色边框
					$("#username").css("border","1px solid red");
				}
			    
                return flag;
            }

            //校验密码
            function checkPassword() {
                //1.获取密码值
                var password = $("#password").val();
                //2.定义正则
                var reg_password = /^\w{6,20}$/;

                //3.判断,给出提示信息
                var flag = reg_password.test(password);
                if(flag){
                    //密码合法
                    $("#password").css("border","");
                }else{
                    //密码非法,加一个红色边框
                    $("#password").css("border","1px solid red");
                }

                return flag;
            }

            //校验邮箱
			function checkEmail(){
			    //1.获取邮箱
				var email = $("#email").val();
				//2.定义正则		itcast@163.com
				var reg_email = /^\w+@\w+\.\w+$/;

				//3.判断
				var flag = reg_email.test(email);
				if(flag){
                    $("#email").css("border","");
				}else{
                    $("#email").css("border","1px solid red");
				}

				return flag;
			}
			//校验姓名
			//非空单词字符,长度1到10位
			function checkName() {
				//1.获取姓名
				var name = $("#name").val();
				//2.定义姓名正则
				var reg_name = /^\w{1,10}$/;

				//3.判断,给出提示信息
				var flag = reg_name.test(name);
				if (name!=null){
					if(flag){
						//姓名合法
						$("#name").css("border","");
					}

				}else{
					//姓名非法,加一个红色边框
					$("#name").css("border","1px solid red");
				}

				return flag;
			}
			//校验手机号
			//非空单词字符,长度11位
			function checkPhoneNumber() {
				//1.获取用号码
				var number = $("#number").val();
				//2.定义11位手机号码正则
				var reg_number = /^[1][3,4,5,7,8][0-9]{9}$/;

				//3.判断,给出提示信息
				var flag = reg_number.test(number);

				if(flag){
						//号码合法
						$("#number").css("border","");


				}else{
					//号码非法,加一个红色边框
					$("#number").css("border","1px solid red");
				}

				return flag;
			}
			//校验生日
			function checkBirthday() {
				//1.获取生日
				var birthday = $("#birthday").val();
				//2.定义日期正则
				var reg_birthday =/^((?:19[2-9]\d{1})|(?:20(?:(?:0[0-9])|(?:1[0-8]))))\-((?:0?[1-9])|(?:1[0-2]))\-((?:0?[1-9])|(?:[1-2][0-9])|30|31)$/;

				//3.判断,给出提示信息
				var flag = reg_birthday.test(birthday);

				if(flag){
					//生日合法
					$("#birthday").css("border","");


				}else{
					//生日非法,加一个红色边框
					$("#birthday").css("border","1px solid red");
				}

				return flag;
			}
			//校验4位验证码authCode
			function checkAuthCode() {
				//1.获取密码值
				var authCode = $("#authCode").val();
				//2.定义正则
				var reg_authCode = /^\w{4}$/;

				//3.判断,给出提示信息
				var flag = reg_authCode.test(authCode);
				if(flag){
					//密码合法
					$("#authCode").css("border","");
				}else{
					//密码非法,加一个红色边框
					$("#authCode").css("border","1px solid red");
				}

				return flag;
			}


			$(function () {
                //当表单提交时,调用所有的校验方法
				$("#registerForm").submit(function(){
					//1.发送数据到服务器
					if(checkUsername() && checkPassword() && checkEmail()){
					    //校验通过,发送ajax请求,提交表单的数据   username=zhangsan&password=123

						$.post("user/regist",$(this).serialize(),function(data){
							//处理服务器响应的数据  data  {flag:true,errorMsg:"注册失败"}

							if(data.flag){
							    //注册成功,跳转成功页面
								location.href="register_ok.html";
							}else{
							    //注册失败,给errorMsg添加提示信息
								$("#errorMsg").html(data.errorMsg);

							}
						});

					}
					//2.不让页面跳转
                    return false;
                    //如果这个方法没有返回值,或者返回为true,则表单提交,如果返回为false,则表单不提交
				});

                //当某一个组件失去焦点是,调用对应的校验方法
				$("#username").blur(checkUsername);
                $("#password").blur(checkPassword);
                $("#email").blur(checkEmail);
                $("#name").blur(checkName);
                $("#number").blur(checkPhoneNumber);
                $("#birthday").blur(checkBirthday);
                $("#authCode").blur(changeCheckCode);


            });


		</script>


    </head>
	<body>
	<!--引入头部-->
	<div id="header"></div>
        <!-- 头部 end -->
    	<div class="rg_layout">
    		<div class="rg_form clearfix">
    			<div class="rg_form_left">
    				<p>新用户注册</p>
    				<p>USER REGISTER</p>
    			</div>
    			<div class="rg_form_center">
					<div id="errorMsg" style="color:red;text-align: center"></div>
					<!--注册表单-->
    				<form id="registerForm" action="user">
						<!--提交处理请求的标识符-->
						<input type="hidden" name="action" value="register">
    					<table style="margin-top: 25px;">
    						<tr>
    							<td class="td_left">
    								<label for="username">用户名</label>
    							</td>
    							<td class="td_right">
    								<input type="text" id="username" name="username" placeholder="请输入4-20位账号">
    							</td>
    						</tr>
    						<tr>
    							<td class="td_left">
    								<label for="password">密码</label>
    							</td>
    							<td class="td_right">
    								<input type="text" id="password" name="password" placeholder="请输入6-10位密码">
    							</td>
    						</tr>
    						<tr>
    							<td class="td_left">
    								<label for="email">Email</label>
    							</td>
    							<td class="td_right">
    								<input type="text" id="email" name="email" placeholder="请输入Email">
    							</td>
    						</tr>
    						<tr>
    							<td class="td_left">
    								<label for="name">姓名</label>
    							</td>
    							<td class="td_right">
    								<input type="text" id="name" name="name" placeholder="请输入真实姓名">
    							</td>
    						</tr>
    						<tr>
    							<td class="td_left">
    								<label for="telephone">手机号</label>
    							</td>
    							<td class="td_right">
    								<input type="text" id="telephone" name="telephone" placeholder="请输入您的11位手机号">
    							</td>
    						</tr>
    						<tr>
    							<td class="td_left">
    								<label for="sex">性别</label>
    							</td>
    							<td class="td_right gender">
    								<input type="radio" id="sex" name="sex" value="男" checked> 男
    								<input type="radio" name="sex" value="女"> 女
    							</td>
    						</tr>
    						<tr>
  
  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值