【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第四节)

我们在下面写一个script块,js代码就全部写在这里。

给登陆按钮绑定一个点击事件:

登陆

登陆方法

function login(){

var username = $(‘#username’).val();

var password = $(‘#password’).val();

alert(username + “,” + password);

}

当成功alert出来数据后,说明到此为止的代码是正确的。

接下来,利用jQuery的ajax方法,将数据提交到controller层。

function login(){

var username = $(‘#username’).val();

var password = $(‘#password’).val();

$.ajax({

type:“post”,//请求方式

url:“${basePath}/controller/loginController.jsp”,//请求地址

data:{“username”:username,“password”:password},//传递给controller的json数据

error:function(){

alert(“登陆出错!”);

},

success:function(data){ //返回成功执行回调函数。

}

});

}

我已经都写好注释了,ajax方法在web开发过程中,是被普遍使用的。

新建一个loginController.jsp ,这就是所谓的服务器端。

<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>

<%

//设置请求的编码

//request.setCharacterEncoding(“UTF-8”);

//获取客户端传递过来参数

String username = request.getParameter(“username”);

String password = request.getParameter(“password”);

System.out.println(username);

System.out.println(password);

//如果用户名和密码不为空

%>

从JSP页面到controller,用户名和密码是被装在一个叫做request的变量中,它其实也就相当于一个json,一个map,都是差不多的东西,这里就不详细说明了。当然了,他也是JSP九大隐式对象中的一员。

Paste_Image.png

我们来测试一下,点击登陆按钮。

成功了!可以看到数据已经成功传递到controller层了。

因为我们还没有数据表和JavaBean,所以我们先不急着写service层,先开始编写JavaBean吧。

5. 从JavaBean到数据库表。

我们在src目录下新建一个存放JavaBean的包

关于JavaBean,如果不是很了解的话,可以看看这篇文章:

http://www.cnblogs.com/skyblue-li/p/5900216.html

一个记录用户信息的JavaBean,我想了以下这些属性:

private String id; //主键,采用UUID

private String username; //用户名

private String password; //密码

private String headerPic; //头像

private String email; //电子邮箱

private Integer male; //性别 0男 1女 3保密

private String createTime;//创建时间

private String updateTime;//最后更新时间

private Integer isDelete; // 删除状态0未删除1删除

private String address; //地址

private String telephone; //电话

当你的JavaBean设计好了,差不多对应的数据库表也就出来了。

之前写过一篇关于注解的文章:

http://www.cnblogs.com/skyblue-li/p/5900228.html

现在可以用这个知识点做点有趣的事情了,比如将一个JavaBean转换成建表语句。

新建一个注解包,里面添加两个注解

column.java

package annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(ElementType.FIELD) //注解的目标

@Retention(RetentionPolicy.RUNTIME)

public @interface Column {

public String field() ; //字段名称

public boolean primaryKey() default false;//是否为主键

public String type() default “VARCHAR(80)”;//字段类型

public boolean defaultNull() default true; //是否允许为空

}

Table.java

package annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(ElementType.TYPE) //注解的目标是类

@Retention(RetentionPolicy.RUNTIME)

public @interface Table {

public String tableName();

}

我们创建了两个注解。

接下来,在util包(也就是工具包)中新建两个工具类

StringUtils 字符串工具类

package util;

public class StringUtils {

public static boolean isEmpty(String str) {

return null == str || str.equals(“”)

|| str.matches(“\s*”);

}

public static String defaultValue(String content,String defaultValue){

if(isEmpty(content)){

return defaultValue;

}

return content;

}

}

isEmpty的作用是判断字符串是否为空。

defaultValue表示给字符串设置默认值,有点类似于oracle数据库中的nvl语法。

TableUtils 数据表工具类

package util;

import java.lang.reflect.Field;

import annotation.Column;

import annotation.Table;

public class TableUtils {

public static String getCreateTableSQl(Class<?> clazz){

StringBuilder sb = new StringBuilder();

sb.append("create table ");

//获取表名

Table table = (Table) clazz.getAnnotation(Table.class);

String tableName = table.tableName();

sb.append(tableName).append(“(\n”);

Field[] fields = clazz.getDeclaredFields();

String primaryKey = “”;

//遍历所有字段

for (int i = 0; i < fields.length; i++) {

Column column = (Column) fields[i].getAnnotations()[0];

String field = column.field();

String type = column.type();

boolean defaultNull = column.defaultNull();

sb.append(“\t” + field).append(" ").append(type);

if(defaultNull){

if(type.toUpperCase().equals(“TIMESTAMP”)){

sb.append(“,\n”);

}else{

sb.append(" DEFAULT NULL,\n");

}

}else{

sb.append(" NOT NULL,\n");

if(column.primaryKey()){

primaryKey = “PRIMARY KEY (”+field+“)”;

}

}

}

if(!StringUtils.isEmpty(primaryKey)){

sb.append(“\t”).append(primaryKey);

}

sb.append(“\n) DEFAULT CHARSET=utf8”);

return sb.toString();

}

}

getCreateTableSQl方法是利用反射和注解有关的知识,给一个JavaBean自动生成建表语句,目前只支持MySQL,因为这方面的知识我也是刚开始学,写得不好的地方还请各位多多包涵。

接下来,给JavaBean添加注解。

@Table(tableName = “t_user”)

public class User{

//属性

}

属性如下:

@Column(type = “varchar(30)” ,field = “id” ,primaryKey = true ,defaultNull = false)

private String id; //主键,采用UUID

@Column(type = “VARCHAR(20)”, field = “username”)

private String username; //用户名

@Column(type = “VARCHAR(20)”, field = “password”)

private String password; //密码

@Column(type = “VARCHAR(60)”, field = “headerPic”)

private String headerPic; //头像

@Column(type = “VARCHAR(60)”, field = “email”)

private String email; //电子邮箱

@Column(type = “VARCHAR(2)”, field = “sex”)

private Integer sex; //性别 0男 1女 3保密

@Column(type = “datetime”, field = “create_time”)

private String createTime;//创建时间

@Column(type = “timestamp”, field = “update_time”)

private String updateTime;//最后更新时间

@Column(type = “int(1)”, field = “is_delete”)

private Integer isDelete; // 删除状态 0未删除 1删除

@Column(type = “VARCHAR(200)”, field = “address”)

private String address; //地址

@Column(type = “VARCHAR(15)”, field = “telephone”)

private String telephone; //电话

创建一个测试包和测试类:

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

ddress")

private String address; //地址

@Column(type = “VARCHAR(15)”, field = “telephone”)

private String telephone; //电话

创建一个测试包和测试类:

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

[外链图片转存中…(img-SW1CEWch-1714527749949)]

[外链图片转存中…(img-THjgCZnX-1714527749949)]

[外链图片转存中…(img-LVeqbayn-1714527749949)]

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

[外链图片转存中…(img-uLI570hl-1714527749950)]

[外链图片转存中…(img-z0UDrgHn-1714527749950)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值