html和jsp

  • 含义不同

    jsp是Java server pages,html是超文本标记语言

  • 采用的技术不同

    html是客户端技术,jsp是服务端技术

  • 加载的速度不同

    jsp生成的是动态网页,需要与web server进行交互,加载速度慢,html生成静态网页,加载速度快

LoggerFactory.getLogger用法

1
2
3
4
5
6
7
public class SimpleCharVerifyCodeGenImpl implements IVerifyCodeGen {

private static final Logger logger = LoggerFactory.getLogger(SimpleCharVerifyCodeGenImpl.class);

·····

}

LoggerFactory.getLogger()的作用是使用指定类初始化日志对象

为什么要使用static和final?

使用static修饰,不管这个对象被new了多少次,也只会在类加载时创建一次,所以它在内存中是唯一的,避免了重复创建带来了内存浪费

使用final修饰,表明这个变量不允许被重新赋值,如果重新赋值且字节码对象被篡改,则显示的日志信息与类信息不匹配

${pageContext.request.contextPath}

${pageContext.request.contextPath}是El表达式,EL 全名为Expression Language

它的作用是帮助我们去匹配上下文路径,不需要再手动去写死了

1
2
3
4
<script type="text/javascript" src="${pageContext.request.contextPath}/lib/jquery-3.4.1/jquery-3.4.1.min.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui-v2.5.5/css/layui.css" media="all">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/public.css" media="all">

再如

1
<form class="layui-form"  action="${pageContext.request.contextPath}/loginIn" method="post">

pageContext

在Javaweb中一共四个域对象,其中servlet中可以使用的是request,session,application三个对象,而在jsp中可以使用pageContext,request,session,application四个域对象

pageContext也是域对象,它的范围是当前页面。它的范围也是四个域对象中最小的!

代理其他对象

还可以使用pageContext来代理其它3个域对象的功能,也就是说可以使用pageContext向request、session、application对象中存取数据,例如:

1
2
3
4
5
6
7
pageContext.setAttribute("x", "X"); 

pageContext.setAttribute("x", "XX",PageContext.REQUEST_SCOPE);

pageContext.setAttribute("x", "XXX",PageContext.SESSION_SCOPE);

pageContext.setAttribute("x", "XXXX", PageContext.APPLICATION_SCOPE);

Controller层方法的返回值

如果是controll层方法是void类型,这种一般返回值是视图(view),通过request或response

如果controll层方法不是void类型,这种一般返回的是json数据,一般都会return 数据

以下代码的作用是将生成的验证码图片输出到 HTTP 响应中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@RequestMapping("/verifyCode")
public void verifyCode(HttpServletRequest request, HttpServletResponse response) {
IVerifyCodeGen iVerifyCodeGen = new SimpleCharVerifyCodeGenImpl();
try {
//设置长宽
VerifyCode verifyCode = iVerifyCodeGen.generate(80, 28);
String code = verifyCode.getCode();
//将VerifyCode绑定session
request.getSession().setAttribute("VerifyCode", code);
//设置响应头
response.setHeader("Pragma", "no-cache");
//设置响应头
response.setHeader("Cache-Control", "no-cache");
//在代理服务器端防止缓冲
response.setDateHeader("Expires", 0);
//设置响应内容类型
response.setContentType("image/jpeg");
response.getOutputStream().write(verifyCode.getImgBytes());
response.getOutputStream().flush();
} catch (IOException e) {
System.out.println("异常处理");
}
}

以下返回值类型是string,需要return

1
2
3
4
5
6
@GetMapping("loginOut")
public String loginOut(HttpServletRequest request){
HttpSession session = request.getSession();
session.invalidate();//注销
return "/login";
}

总结就是说如果返回值是void类型,会搭配request和response使用;否则会搭配return使用

@Param注解

这个注解的作用就是为sql语句中参数赋值而服务的

@Param的作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param(“userId”) int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。在sql语句中,通过#{userId}进行取值给sql参数赋值。

注意

当不使用@Param注解时,参数只能有一个,并且是JavaBean。在sql语句中只能引用JavaBean的属性。