JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是Servlet 。
jsp= html+java
html:静态内容
servlet:服务器端的小应用程序。适合编写java逻辑代码,如果编写网页内容则工作量相当巨大
jsp:适合编写输出动态内容,但不适合编写java逻辑。
(1)当客户第一次请求JSP页面时,JSP引擎会通过预处理把JSP文件中的静态数据(HTML文本)和动态数据(Java脚本)全部转换为Java代码。这个转换工作实际上是非常直观的,对于HTML文本只是简单的用out.println()方法包裹起来,对于Java脚本只是保留或做简单的处理。
(2)JSP引擎把生成的.java文件编译成Servlet类文件(.class)。对于Tomcat服务器而言,生成的类文件默认的情况下存放在\work目录。
(3)编译后的class对象被加载到容器中,并根据用户的请求生成HTML格式的响应页面。
在执行JSP网页时,通常可分为两个时期:转译时期(Translation Time)和请求时期(Request Time)。在转译时期,JSP网页被转译成Servlet类,然后被编译成类文件;在请求时期,Servlet类执行后,响应结果至客户端。
案例说明:本案例通过使用jsp的技术和servlet技术实现一个简单的网页登陆模型。主要是由三个页面构成,一个login页面,一个dologin页面,一个success页面。首先我们均采用jsp的形式实现。
login页面实现的代码如下:
<%@ 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 heretitle>
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页面,下面是sucess.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 heretitle>
head>
<body>
欢迎你:<%
String userName = request.getParameter("name");
out.print(userName);
%>
<a href="/day01_00_jsplogin/login.jsp">跳到主页a>
body>
html>
由此我们实现了一个简单的login登陆页面,部署到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);
}
}
经过测试可以得到和如上情况一样的结果。