一次参加SpringBoot小项目的收获
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> ' +
'<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整合redis
下一篇: Springboot学习笔记【一】
推荐阅读