jfinal框架之登录注册

登录注册的实现流程

本节课,讲的是如何用jfinal实现简单的登录注册模块。先说一下,我这里的bug,同一个用户同密码可以注册多次,就是数据库会出现多条主键userid不同,但账号密码相同的记录;正常的数据库不是这样的,而且前端是会显示该用户已注册的。由于时间关系,我就没有把demo完善。
我的登录注册的逻辑如下:
页面分为三种:
A:登录页面;B:登录以后跳转到固定的页面;C:非A和B的其他页面。
实现这个项目的步骤:
1、想清楚自己实现什么功能,我的前端页面是什么样的,需要建立什么表,需要写什么方法。前端–>数据库–>Java后台。
2、有了思路后,先建表,再建立maven项目,进行基本的配置。
3、想清楚后台需要给前端哪些接口?把后台的接口写完。
4、写前端页面。(小编这里的前端页面是抄的,可能有点丑。)

建表,再建立maven项目,进行基本的配置

数据库配置文件:jdbc.properties

jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/hello?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
jdbc_username=root
jdbc_password=
devMode=true

建立hello数据库,打开Navicat for MySQL的命令行,使用这个数据库,然后建表。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

建立maven项目及所需要的包、Java文件
这里写图片描述

配置之前的jdbc.properties
配置configuration.java

package com.hello.config;

import com.hello.Interceptor.ExceptionIntoLogInterceptor;
import com.hello.Model._MappingKit;
import com.hello.Route.WebRoute;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.json.JacksonFactory;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.log.Log4jLogFactory;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;

public class configuration extends JFinalConfig {

    @Override
    public void configConstant(Constants me) {
        // PropKit 读取工具,use方法可以获取到指定文件
        PropKit.use("com/hello/config/jdbc.properties");
        // 是否开启开发者模式
        me.setDevMode(PropKit.getBoolean("devMode"));
        // 设置字符集
        me.setEncoding("UTF-8");
        // 设置Json格式
        me.setJsonFactory(new JacksonFactory());
        me.setJsonDatePattern("yyyy-MM-dd");
        // 设置上传下载的默认路径
        me.setBaseUploadPath(PathKit.getWebRootPath() + "/upload");
        // 这个是设置日志工厂
        me.setLogFactory(new Log4jLogFactory());

    }

    // 路由分包
    public void configRoute(Routes me) {
        me.add(new WebRoute());
    }

    // 配置前端模板引擎
    public void configEngine(Engine me) {
        me.addSharedFunction("/common/_layout.html");
    }

    // 启动数据库插件
    public static DruidPlugin createDruidPlugin() {
        return new DruidPlugin(PropKit.get("jdbc_url"), PropKit.get("jdbc_username"),
                PropKit.get("jdbc_password").trim());
    }

    // 配置数据库插件 启动Model和DB+Record
    public void configPlugin(Plugins me) {
        DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbc_url"), PropKit.get("jdbc_username"),
                PropKit.get("jdbc_password").trim());
        me.add(druidPlugin);

        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        arp.setBaseSqlTemplatePath(PathKit.getRootClassPath());
        // arp.addSqlTemplate("hello.sql");
        // 在控制台打印所有的数据库操作语句
        arp.setShowSql(true);
        // 所有映射在 MappingKit 中自动化搞定
        _MappingKit.mapping(arp);
        me.add(arp);

    }

    @Override
    public void configInterceptor(Interceptors interceptors) {
        interceptors.addGlobalActionInterceptor(new ExceptionIntoLogInterceptor());
    }

    public void configHandler(Handlers me) {

    }

    public void afterJFinalStart() {
    }

    public void beforeJFinalStop() {
    }

}

配置pom.xml

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zcm</groupId>
    <artifactId>hello</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>hello Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <!-- log4j日志文件管理包版本 --> 
        <slf4j.version>1.7.0</slf4j.version>
        <log4j.version>1.2.14</log4j.version>
    </properties>

    <!-- 使用阿里 maven 库 -->
    <repositories>
        <repository>
            <id>ali-maven</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jetty-server</artifactId>
            <version>8.1.8</version>
            <!-- 此处的 scope 值为 compile 仅为支持 IDEA 下启动项目 打 war 包时需要改成 provided,以免将一些无用的 
                jar 打进去 -->
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal-java8</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>cos</artifactId>
            <version>2017.5</version>
        </dependency>

        <!-- json -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.24</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>


        <!-- 日志文件管理包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>hello</finalName>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>8.1.8.v20121106</version>
                <configuration>
                    <stopKey>stop</stopKey>
                    <stopPort>5599</stopPort>
                    <webAppConfig>
                        <contextPath>/</contextPath>
                    </webAppConfig>
                    <scanIntervalSeconds>5</scanIntervalSeconds>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>80</port>
                            <maxIdleTime>60000</maxIdleTime>
                        </connector>
                    </connectors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

    <filter>
        <filter-name>jfinal</filter-name>
        <filter-class>com.jfinal.core.JFinalFilter</filter-class>
        <init-param>
             <param-name>configClass</param-name>
             <param-value>com.hello.config.configuration</param-value>
         </init-param>
    </filter>


    <filter-mapping>
        <filter-name>jfinal</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

配置_JFinalDemoGenerator.java生成器

package com.hello.tool;

import javax.sql.DataSource;

import com.hello.config.configuration;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;

public class _JFinalDemoGenerator {

    public static DataSource getDataSource() {
        PropKit.use("com/hello/config/jdbc.properties");
        DruidPlugin druidPlugin = configuration.createDruidPlugin();
        druidPlugin.start();
        return druidPlugin.getDataSource();
    }

    public static void main(String[] args) {
        // base model 所使用的包名
        String baseModelPackageName = "com.hello.Model.base";
        // base model 文件保存路径
        String baseModelOutputDir = PathKit.getWebRootPath() + "/src/main/java/com/hello/Model/base";

        // model 所使用的包名 (MappingKit 默认使用的包名)
        String modelPackageName = "com.hello.Model";
        // model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
        String modelOutputDir = baseModelOutputDir + "/..";

        // 创建生成器
        Generator generator = new Generator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);
        // 设置是否生成链式 setter 方法
        generator.setGenerateChainSetter(false);
        // 添加不需要生成的表名
        generator.addExcludedTable("nutrition","ingredient_map","disease_store_discard");
        // 设置是否在 Model 中生成 dao 对象
        generator.setGenerateDaoInModel(true);
        // 设置是否生成链式 setter 方法
        generator.setGenerateChainSetter(true);
        // 设置是否生成字典文件
        generator.setGenerateDataDictionary(false);
        // 设置需要被移除的表名前缀用于生成modelName。例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUser
        generator.setRemovedTableNamePrefixes("t_");
        // 生成
        generator.generate();
    }
}

写start.java ,对于有些人的电脑,即使是eclipse运行jfinal,也只能使用 IDEA 的启动方式,不能进行热加载。

点_JFinalDemoGenerator,右键,Run As,Java Application 。使用生成器,生成com.hello.Model和com.hello.Model.base包中的Java文件。你运行之后,要刷新一下整个项目。

剩下的网盘见了,我的代码旁边都有注释。

链接:https://pan.baidu.com/s/17NZfbPtibMX8iFPe8qMQ8g 密码:41bz

猜你喜欢

转载自blog.csdn.net/qq_37905259/article/details/80553663