本节课,讲的是如何用jfinal实现简单的登录注册模块。先说一下,我这里的bug,同一个用户同密码可以注册多次,就是数据库会出现多条主键userid不同,但账号密码相同的记录;正常的数据库不是这样的,而且前端是会显示该用户已注册的。由于时间关系,我就没有把demo完善。
我的登录注册的逻辑如下:
页面分为三种:
A:登录页面;B:登录以后跳转到固定的页面;C:非A和B的其他页面。
实现这个项目的步骤:
1、想清楚自己实现什么功能,我的前端页面是什么样的,需要建立什么表,需要写什么方法。前端–>数据库–>Java后台。
2、有了思路后,先建表,再建立maven项目,进行基本的配置。
3、想清楚后台需要给前端哪些接口?把后台的接口写完。
4、写前端页面。(小编这里的前端页面是抄的,可能有点丑。)
数据库配置文件: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;
配置之前的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.0modelVersion>
<groupId>com.zcmgroupId>
<artifactId>helloartifactId>
<packaging>warpackaging>
<version>0.0.1-SNAPSHOTversion>
<name>hello Maven Webappname>
<url>http://maven.apache.orgurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8maven.compiler.encoding>
<slf4j.version>1.7.0slf4j.version>
<log4j.version>1.2.14log4j.version>
properties>
<repositories>
<repository>
<id>ali-mavenid>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>trueenabled>
<updatePolicy>alwaysupdatePolicy>
<checksumPolicy>failchecksumPolicy>
snapshots>
repository>
repositories>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
<dependency>
<groupId>com.jfinalgroupId>
<artifactId>jetty-serverartifactId>
<version>8.1.8version>
<scope>compilescope>
dependency>
<dependency>
<groupId>com.jfinalgroupId>
<artifactId>jfinal-java8artifactId>
<version>3.3version>
dependency>
<dependency>
<groupId>com.jfinalgroupId>
<artifactId>jfinalartifactId>
<version>3.3version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.16version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.44version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.0.29version>
dependency>
<dependency>
<groupId>com.jfinalgroupId>
<artifactId>cosartifactId>
<version>2017.5version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.24version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.5.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.5.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.5.0version>
dependency>
<dependency>
<groupId>org.jsongroupId>
<artifactId>jsonartifactId>
<version>20160810version>
dependency>
<dependency>
<groupId>net.sf.json-libgroupId>
<artifactId>json-libartifactId>
<version>2.4version>
<classifier>jdk15classifier>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>${log4j.version}version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>${slf4j.version}version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>${slf4j.version}version>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.2version>
dependency>
dependencies>
<build>
<finalName>hellofinalName>
<plugins>
<plugin>
<groupId>org.mortbay.jettygroupId>
<artifactId>jetty-maven-pluginartifactId>
<version>8.1.8.v20121106version>
<configuration>
<stopKey>stopstopKey>
<stopPort>5599stopPort>
<webAppConfig>
<contextPath>/contextPath>
webAppConfig>
<scanIntervalSeconds>5scanIntervalSeconds>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>80port>
<maxIdleTime>60000maxIdleTime>
connector>
connectors>
configuration>
plugin>
plugins>
build>
project>
配置web.xml
<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>jfinalfilter-name>
<filter-class>com.jfinal.core.JFinalFilterfilter-class>
<init-param>
<param-name>configClassparam-name>
<param-value>com.hello.config.configurationparam-value>
init-param>
filter>
<filter-mapping>
<filter-name>jfinalfilter-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://download.csdn.net/download/qq_37905259/10458617