欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一次参加SpringBoot小项目的收获

程序员文章站 2022-03-23 23:17:27
...

SpringBoot目录

Controller返回值跳转网页

在有“@Controller”注解标注的类,如果有个方法的返回值为String,SpringBoot会根据“application.properties”配置文件中的配置信息在“templates”文件中(文件夹不固定,可以在File菜单中指定Web文件夹),找到名为 <返回值 + 指定后缀> 的网页。

templates目录和static目录

这两个目录在引入Thymeleaf组件之后用于存放动态页面和静态页面。

templates目录下的页面不能被直接访问,而static目录下的页面可以被直接访问。

templates目录下的网页可以通过Controller的返回值来进行访问。

从templates目录下的网页跳转至static目录下的网页直接跳转至"xxxx.html"即可。

从static目录下的网页跳转至templates目录下的网页可以通过相关的Controller进行访问。

Controller层

@Controller与@RestController的区别

@RestController集成了@Controller和@ResponseBody两个注解。

在用@Controller标注的Controller类中,直接用@RequestMapping来拦截请求可以顺利拦截到请求,但是无法对请求做出响应,必须要用@RequestBody来标注方法。

如果想要在Controller类中,通过方法的返回值来直接跳转至某个页面,则该Controller不可以用@RestController或者在@Controller之后再用@RequestBody。

@RequestParam

该注解用于获取由前端页面发来的数据。

@RequestParam(“paramName”),这样可以获取指定名称的变量。

Service层

在引入MyBatisPlus组件之后,如果基础的SQL查询无法满足需求,则可以通过条件构造器的方式来构造查询。

例如,当前的Service继承ServiceImpl<UserDao,UserEntity>,实现了UserService接口,则可以使用如下代码实现对“name”字段和“phone”字段的模糊查询。

List<User> res = this.baseMapper.selectList(new QueryWrapper<User>()
                .like("name",userName).like("phone",userPhone));

实体类

在引入MyBatisPlus组件之后,可以使用@TableName(“TableName”)来指定实体类对应的表。

使用@TableId(type = IdType.AUTO)来指明主键自增。

html页面

登录模块

在登录校验时,页面向Controller发送用户名和密码之后,Controller向Session中写入某些信息之后,返回验证结果。

写在Session中的信息,可以用于验证用户是否是登录状态。

关于Session

servlet容器使用此接口在HTTP客户端和HTTP服务器之间创建会话。会话在指定的时间段内持续存在,来自用户的多个连接或页面请求。会话通常对应于一个用户,该用户可能多次访问该站点。服务器可以通过多种方式维护会话,例如使用cookie或重写URL。(缓存部分信息)

代码示例

在Controller层中声明如下方法

Public String requestLogin(@RequestParam String username, @RequestParam String password, HttpServletRequest request)

获取Session:

HttpSession session = request.getSession();

向Session中写入名为“loginUser”的user对象:

session.setAttribute("loginUser",user);

获取Session中名为“loginUser”的变量:

session.getAttribute("loginUser");

关于ajax

Type属性的取值

默认为“GET”,可以为“POST”或者“GET”。

data属性的取值

如果要发送后台JSON串可以使用,JSON.stringify(paramName)来将js对象转换为JSON串。

关于BootstrapTable

关于使用

 $('#table').bootstrapTable('method', parameter);

具体方法名以及作用见:https://bootstrap-table.com/docs/api/methods/

在BootstrapTable中获取当行的值

在生成表格时,如果要加入操作按钮的话,需要在对应的列(columns)数组的对应的元素内加入:

events : operateEvents

生成如下两个按钮:

formatter : function (value, row, rowIndex) {
    return [
        '<button id="updateInfo" type="button" class="UPDATE layui-btn layui-btn-warm" data-toggle="modal" data-target="#updataInfo">修改</button>&nbsp;' +
        '<button id="deleteInfo" type="button" class="DELETE layui-btn layui-btn-danger" data-toggle="modal" data-target="#deleteInfo"><i class="layui-icon"></i>删除</button>'
    ]
}

再使用如下JavaScript代码:

"click #deleteMasterInfo": function (e, value, row, index) {
    //获取信息
    var useId = row.id;
    var useName = row.name;
    var useAddress = row.address;
    var usePhone = row.phone;
    //给输入框写入初始值
    document.getElementById('deleteId').value =  useId;
    document.getElementById('deleteName').value = useName;
    document.getElementById('deleteAddress').value = useAddress;
    document.getElementById('deletePhone').value = usePhone;
}

即可获取按钮所在行的值、序号等。

过滤器

关于注解的使用

@WebFilter注解

使用方法:

@WebFilter(filterName = "过滤器的名称",urlPatterns = {"被过滤的访问地址"})

值的注意的是如果想拦截所有对html文件的访问则“urlPatterns = {"*.html"}”,不用加“/”。

@ServletComponentScan注解

此注解需要在xxxApplication类中使用,主要是用于去获取过滤器。

关于代码

需要继承Filter接口(javax.servlet),并实现init()、doFilte()和destroy()。

在doFilter方法中实现主要的过滤逻辑:

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    HttpSession session = request.getSession(false);
    String uri = request.getRequestURI();

    System.out.println("请求的uri地址:" + uri);

    if (session != null && session.getAttribute("loginUser") != null){
        //如果有loginUser对象,则已经登录
        filterChain.doFilter(request,response);
    }else {
        response.sendRedirect(request.getContextPath()+"/");
    }
}
相关标签: SpringBoot学习