jsp技术(一)jsp简介
JSP的全称是JavaServerPages。 与servle技术一样,它是SUN定义的一种用于开发动态Web资源的技术。 JSP实际上是一个Servlet。
jsp=html+java
html:静态内容
servlet:小型服务器端应用程序。适合编译java逻辑代码。 如果编译网页内容,工作量会相当巨大。
jsp:适合编辑输出动态内容,但不适合编辑java逻辑。
jsp的原理
(1)当客户第一次请求JSP页面时,JSP引擎会通过预处理将JSP文件中的所有静态数据(HTML文本)和动态数据(Java脚本)转换为Java代码。 这个转换工作其实是非常直观的。 对于 HTML 文本,使用 out.println() 方法简单包装,对于 Java 脚本,仅保留或简单处理。
(2) JSP引擎将生成的.java文件编译成Servlet类文件(.class)。 对于Tomcat服务器,生成的类文件默认存放在work目录下。
(3)将编译好的类对象加载到容器中,并根据用户的请求生成HTML格式的响应页面。
执行JSP网页时网站程序实现原理,一般可以分为两个时期:翻译时期(TranslationTime)和请求时期(RequestTime)。 翻译期间,JSP网页被翻译成Servlet类,然后编译成class文件; 请求期间网站程序实现原理,Servlet类执行完毕后,将响应结果发送给客户端。
jsp的一个小案例
案例描述:本案例利用jsp技术和servlet技术实现了一个简单的网页登录模型。 主要由三个页面组成,登录页面、dologin页面、成功页面。 首先我们使用jsp来实现。
登录页面实现的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/day01_00_jsplogin/doLogin.jsp" method="post">
用户名:<input type="text" name="userName"/><br/>
密码:<input type="password" name="pwd"/><br/>
<input type="submit" value="登录"/><br/>
</form>
</body>
</html>
我只在login.jsp页面做了一个简单的登录表单,然后转发到dologin.jsp进行处理。
下面是dologin.jsp页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//获取表单数据额
String userName = request.getParameter("userName");
String pwd = request.getParameter("pwd");
//处理业务逻辑
if("tom".equals(userName)&&"123".equals(pwd)){
request.getRequestDispatcher("/success.jsp").forward(request, response);
}else{
response.sendRedirect("/day01_00_jsplogin/dologin.jsp");
}
//分发转向
%>
dologin完成判断后,会分发并重定向到成功页面。 以下是success.jsp页面的代码。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎你:<%
String userName = request.getParameter("name");
out.print(userName);
%>
<a href="/day01_00_jsplogin/login.jsp">跳到主页</a>
</body>
</html>
由此我们实现了一个简单的登录页面,将其部署到tomcat,然后测试该页面,如下所示:
最后我们可以修改为使用servlet进行控制,将dologin操作写入servlet代码中,如下:
package com.itheima.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DoLoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取表单数据
String userName = request.getParameter("userName");
String pwd = request.getParameter("pwd");
//处理业务逻辑
if("tom".equals(userName)&&"123".equals(pwd)){
request.getSession().setAttribute("name", userName);
request.getRequestDispatcher("/success.jsp").forward(request, response);
//response.sendRedirect(request.getContextPath()+"/success.jsp");
}else{
//response.sendRedirect(request.getContextPath()+"/login.jsp");
request.setAttribute("msg", "用户名或密码不正确!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
//分发转向
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
经过测试,可以得到与上面相同的结果。