实现一个简单登陆页面来深入理解学习JSP+Servlet
前言
JSP是在Java中充当一个中间件的作用(Servlet是一种中间层),JSP的一个实质就是可以在前端的HTMl代码中写入一些Java代码。
在Java虚拟机中,如果检测到后缀名是.jsp的文件时,就会将该请求交给JSP引擎去处理,每一个jsp文件第一次被访问的时候,jsp引擎都会给他翻译成一个Servlet文件。而其中的HTML代码则是通过Servlet中的写入语句写在了Servlet中,Java本身的代码则是原封不动的运行,单纯的从开发角度上将,JSP其实就是HTML中镶嵌Java代码并且还能运行。
简而言之:JSP就是HTML和Servlet的一个中间件,在两者之间起到了一个桥梁的作用。一般来讲,做和服务器交互的动态HTML页面的时候就需要使用JSP。
JSP的基本语法
JSP脚本,执行Java逻辑的代码
<% Java代码 %>
- JSP会将这里写的代码直接Copy到Servlet中进行执行,就是相当于直接运行这里面的代码,相比之下,如果是直接在HTML中写的则是通过out.Write()写入的方式写到了Servlet中
JSP声明,定义Java的方法
<%!
声明Java的方法
%>
- 可以通过JSP声明的方式来声明和定义Java中的方法。
JSP表达式,直接将Java变量输出到HTML中
<%= Java变量 %>
在不使用Servlet的方式用一个简单的小案例来实现登陆操作
登陆页面 login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登陆</title>
</head>
<body>
<form action="/check.jsp" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>
这是一个非常普通的登陆页面,注意后缀名为jsp,action属性是在点击登陆之后需要转换到的页面,一般情况下这里的action需要写成具体的servlet所在的url,但是由于这里并不适用serlvet进行操作,所以在这里我们就直接使用另一个jsp页面来实现用户名和密码的校验过程。
校验页面 check.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username.equals("admin") && password.equals("123123")){
request.setAttribute("username",username);
request.getRequestDispatcher("welcome.jsp").forward(request,response);
} else {
response.sendRedirect("index.jsp");
}
%>
</body>
</html>
从中可以看出,在跳转到check.jsp的时候,该页面里面并没有其他的HTML的代码,里面只有一些java逻辑代码。在jsp页面中写的java代码其实就等同于直接写在servlet。
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username.equals("admin") && password.equals("123123")){
request.setAttribute("username",username);
request.getRequestDispatcher("welcome.jsp").forward(request,response);
} else {
response