jfinal框架之登入註冊
阿新 • • 發佈:2019-02-06
登入註冊的實現流程
本節課,講的是如何用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檔案。你執行之後,要重新整理一下整個專案。