SSM+Oracle实现文件上传访问系统(二)

本文介绍了一个基于SSM框架和Oracle数据库的文件上传访问系统,新增了用户登录注册功能,利用session进行用户状态管理和错误信息传递。通过ajax实现在前端页面显示登录错误和欢迎信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SSM+Oracle实现文件上传访问系统(二)

                                        ——Javee

今天对系统增加了用户登录注册功能,并且在用户登录之后在每个页面都显示用户的id和欢迎词。

刚进入系统,默认就是登录页面:

没有账号就点击注册,有账号就直接账号密码登录。

点击注册,即可注册成功!注册成功后,自动返回登录页面,当用户名或者密码不正确时,登陆失败,并且给出提示:

登陆成功后,页面的右上角会有欢迎提示信息:

今天更新的内容中,主要的知识点有:

1.session的使用

服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。

在我们项目今天的更新中,也使用到了session,比如登录失败时,错误信息的传递,再比如,登陆成功后,用户信息的传递,用户登录失败时,session中放的是登录错误信息字符串,用户登录成功后,session中放的是这个用户的对象。具体代码如下:

/**
*
* @param author 前端传来用户填写的登录信息
* @param request 不用前端传
* @return 实现登录功能
*/
@PostMapping("/login.action")
public ModelAndView login(Author author, HttpServletRequest request){
    ModelAndView mv = new ModelAndView("redirect:/page/upload.html");

    Author authorSelect = authorService.findByName(author.getName());
    if(author.getName().equals(authorSelect.getName()) &&
    author.getPassword().equals(authorSelect.getPassword())){
        //如果信息正确,就移除错误信息session,并且将数据库中查出来的用户对象放入session
        request.getSession().removeAttribute("error");
        request.getSession().setAttribute("user", authorSelect);
        return mv;
    }else{
        //如果信息错误,则将页面重定向到登陆页面,并将错误信息放到session中
        mv.setViewName("redirect:/index.html");
        request.getSession().setAttribute("error", "用户名或密码错误!");
        return mv;
    }
}

2.了解了session的作用,我们怎么在前端HTML静态页面获取到session中我们想要的信息呢?

HTML为静态页面,不像jsp等动态页面可以在前端执行后端代码。现在都讲前后端分离,所以HTML页面就用的比较多,那么静态页面怎么获取后端信息呢?这里就要提到一个新的前端技术,叫ajax,ajax为异步请求,可以在页面加载完成后,在特定的情况下向后台发送请求,并更新局部HTML界面。

在登录界面显示“用户名或密码错误”的提示信息就是通过ajax获取到后台session中的错误信息,并在前端显示,具体代码如下:

// 后台代码
@ResponseBody
@GetMapping("/errMsg.action")
public String getMsg(HttpServletRequest request){
    //获取到session中的错误信息
    String msg = request.getSession().getAttribute("error").toString();
    return msg;
}
<!--前端代码-->
<div id="errMsg"></div>

<script>
        // ajax请求后台错误信息
    $(function () {
        $.get("/user/errMsg.action", function (res) {
            document.getElementById('errMsg').innerHTML = res;
        }, "text");
    });
</script>

在用户登录成功后,在页面右上角显示欢迎信息也是通过ajax获取到后台session中的用户信息,并在前端显示,具体代码如下:

// 后台代码
@ResponseBody
@GetMapping("/getUserName.action")
public String getUserName(HttpServletRequest request){
    //获取到session中的用户对象,并从中取出用户名
    Author author = (Author)request.getSession().getAttribute("user");
    return author.getName();
}
<!--前端代码-->
<span id="welcome"></span>

<script>
    // ajax请求后台用户名
    $(function () {
        $.get("/user/getUserName.action",function(res){
            document.getElementById('welcome').innerHTML=res + ",欢迎您!";
        },"text");
    });
</script>

3.在今天的更新中,在数据库中还增加了一个表T_AUTHOR,将这张表和上一张表T_IMG如何连接起来呢?

这里就是通过AUTHOR_ID这个字段联系起来的,具体表结构先看代码:

create table T_AUTHOR
(
  author_id NUMBER not null,
  name      VARCHAR2(20 CHAR),
  password  VARCHAR2(20 CHAR),
  valid     CHAR(1) default 1
)
create table T_IMG
(
  img_id    NUMBER not null,
  img_path  VARCHAR2(100),
  author_id NUMBER,
  valid     CHAR(1) default 1
)

因为author_id和img_id都是通过序列控制生成的,所以这两个字段都可作为各自表的主键,因为这两个字段都是不重复,且可以唯一标识每一条数据。

在T_AUTHOR中,author_id是主键,我们把它放在T_IMG中,它不是唯一标识的字段,但是可以和T_AUTHOR中的用户链接起来,所以在T_IMG中,author_id就是外键

源码见主页我的下载:SSM+Oracle实现文件上传访问系统v1.1我的Github

后面持续更新功能~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值