一、学习目标
1.JSP概述
2.JSP指令
3. JSP 隐式对象
二、重点知识
1.JSP概述:JSP是什么?
1)JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束;
2)JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP,它通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页;
3)JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息;
4)JSP可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。
1.1 JSP的优势
1)与ASP相比,JSP有两大优势:
a. 动态部分用Java编写,而不是VB或其他MS专用语言,所以更加强大与易用;
b. JSP易于移植到非MS平台上;
2)与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句;
3)与SSI相比:SSI无法使用表单数据、无法进行数据库链接;
4)与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等;
5)与静态HTML相比:静态HTML不包含动态信息。
1.2 JSP 特点和结构
(1)特点:
1)java 服务端 页面: 在jsp上可以写java代码,也可以写html标记,它运行在服务器端。
2)jsp = java + html + jsp自身的一些东西。
3)jsp最大的特点:可以非常简单的书写页面html。
4)jsp其实它的本质是servlet: 可以看到jsp 继承了 HttpJspBase 继承 HttpServlet。
2. JSP 指令和基本语法
1)page指令
page指令的用途是设置与jsp页面相关的信息,比如说设置jsp页面的编码,jsp页面的默认语言等
基本语法格式:<%@ page 属性=“属性值” 属性=“属性值” 属性=“属性值” %>

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>

(1)常用属性:

language: 默认语言java,也就是只有java一种语言。
pageEncoding:设置jsp的编码格式,一般情况下可以省略 contentType这个属性。
session属性:值得类型是boolean,如果对应的值是true,在jsp页面可以使用session对象,反之就不能使用。
import属性:导包,和在java里面使用一样,如果想使用某个类,前提导入某个类的包名。

2)include指令
在jsp页面通常会需要显示其它页面的信息,所以可以通过这个include指令把其它页面包含过来。
基本语法:<%@ include file=“被包含文件的url” %>
创建两个jsp页面: date.jsp页面、include.jsp页面。
(2)使用jsp的include指令实现的包含,又称为静态包含,静态包含的特点:
1)把多个页面的内容,合并输出,比如把date.jsp 和 include.jsp内容合并输出。
2)多个页面对应生成一个java文件,编译后,对应一个class文件。
3. JSP 隐式对象
3.1 什么是隐式对象?
在jsp页面里面,jsp提供了一些对象,不用咱们自己创建,可以直接使用的对象。
jsp常见的九大隐式对象:

request: HttpServletRequest,请求对象,它同时也是域对象,作用范围一次请求
response:HttpServletResponse,响应对象
session: HttpSession ,会话对象,它同时也是域对象,作用范围一次会话
application:ServletContext,上下文对象,它同时也是域对象,作用范围整个项目
config:ServletConfig,配置对象
out:JspWriter,其实和PrintWriter作用差不多
page:Object ,代表当前jsp的页面对象
pageContext:PageContext ,jsp容器
exception:Throwable,异常对象,用来捕获异常信息

只有当前jsp页面有isErrorPage="true"这个属性时,才能使用exception对象。
(1) out对象
out对象在输出内容到网页上面去,最终是通过reponse缓冲区给输出的。
在chapter06项目的WebContent 目录下创建out.jsp文件。
(2) pageContext对象
第一个功能:获取其它八个隐式对象
1)获取请求对象:getRequest();
2)获取响应对象:getResponse();
3)获取输出对象:getOut();
第二个功能:操作其它三个域对象:request、session、application
pageContext也是一个域对象:作用范围在当前jsp页面。

  • 操作其它三个域对象的方法:
    1)存值:setAttribute(String key,Object obj,int scope);
    APPLICATION_SCOPE :对应的是application
    REQUEST_SCOPE: 对应的是request
    SESSION_SCOPE:对应的是session
    PAGE_SCOPE:对应的是自己 pageContext
    2)取值:getAttribute(String key,int scope);
    结论:在pageContext域对象使用findAttribute方法获取值,进行了全域查找,查找的范围:pageContext—>request----->session---->application
    首先找域作用范围小的对象,如果有值获取到,停止向下查找,如果不存在对应的值,就继续向下寻找。
    3.2 exception 对象
    它是用来捕获异常信息的。
    使用它通常会用到两个属性:
    1)errorPage:属性对应的值,处理异常信息的页面,就是说在当前页面发生了异常,跳转到处理异常信息的页面
    4.JSP的运行原理
    jsp—>java—> .class
    1)通过浏览器首次访问jsp时
    2)JSP容器会生成对应的Servlet文件,也就是.java文件
    3)JSP容器,会把java文件编译对应的class文件
    4)JSP容器,会生成对应的servlet对象
    5)通过生成的servlet对象,去处理浏览器发送的请求,响应数据给浏览器。4.1JSP脚本元素
    在jsp页面书写java的三种形式:
    1)可以声明语句和方法
    2)可以书写java代码段
    3)可以书写表达式
    三、实际运用
  • 注意:在JSP创建类时,中文字符可能会出现乱码情况,这就需要我们在创类之前做一下配置准备,在打开Eclipsese后,点击工具栏window修改jsp的默认编码格式:window–>>preferenes–>> Web–>> JSP Files,选中后面带有UTF-8的编码进行修改。

1.使用JSP+JavaBean+Servlet【Model2/MVC】实现用户注册功能
首先编写UserBean类
代码示例:

  package cn.itcast.chapter11.model2.domain;public class UserBean {private String name;   private String password; private String email;   public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}

编写RegisterFromBean类

package chapter11.model2_domain;import java.util.HashMap;import java.util.Map;public class RegisterFormBean {private String name;  private String password;     private String password2;   private String email;   private Map<String, String> errors = new HashMap<String, String>();public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPassword2() {return password2;}public void setPassword2(String password2) {this.password2 = password2;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public boolean validate() {boolean flag = true;if (name == null || name.trim().equals("")) {errors.put("name", "请输入姓名.");flag = false;}if (password == null || password.trim().equals("")) {errors.put("password", "请输入密码.");flag = false;} else if (password.length() > 12 || password.length() < 6) {errors.put("password", "请输入6-12个字符.");flag = false;}if (password != null && !password.equals(password2)) {errors.put("password2", "两次输入的密码不匹配.");flag = false;}if (email == null || email.trim().equals("")) {errors.put("email", "请输入邮箱.");flag = false;} else if (!email.matches("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+")) {errors.put("email", "邮箱格式错误.");flag = false;}return flag;}public void setErrorMsg(String err, String errMsg) {if ((err != null) && (errMsg != null)) {errors.put(err, errMsg);}}public Map<String, String> getErrors() {return errors;}}

创建工具类

package chapter11.model2_util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import chapter11.model2_domain.UserBean;
public class DBUtil {
private static DBUtil instance = new DBUtil();
private HashMap<String, UserBean> users = new HashMap<String,UserBean>();
//  public static Connection getCon() throws Exception{
//      Class.forName("com.mysql.cj.jdbc.Driver");
//      Connection users = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC","root","123456");
//      return users;
//  }private DBUtil() {UserBean user1 = new UserBean();user1.setName("Jack");user1.setPassword("12345678");user1.setEmail("jack@it315.org");users.put("Jack ",user1);UserBean user2 = new UserBean();user2.setName("Rose");user2.setPassword("abcdefg");user2.setEmail("rose@it315.org");users.put("Rose ",user2);          }public static DBUtil getInstance() {return instance;}public UserBean getUser(String userName) {UserBean user = (UserBean) users.get(userName);return user;}public boolean insertUser(UserBean user) {if(user == null) {return false;}String userName = user.getName();if(users.get(userName) != null) {return false;}users.put(userName,user);return true;}
}

创建Servlet

package chapter11.model2_web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import chapter11.model2_domain.RegisterFormBean;
import chapter11.model2_domain.UserBean;
import chapter11.model2_util.DBUtil;
public class ControllerServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {response.setHeader("Content-type", "text/html;charset=GBK");  response.setCharacterEncoding("GBK");String name = request.getParameter("name");String password=request.getParameter("password");String password2=request.getParameter("password2");String email=request.getParameter("email");RegisterFormBean formBean = new RegisterFormBean();formBean.setName(name);formBean.setPassword(password); formBean.setPassword2(password2);formBean.setEmail(email);if(!formBean.validate()){request.setAttribute("formBean", formBean);request.getRequestDispatcher("/register.jsp").forward(request, response);return;}UserBean userBean = new UserBean();userBean.setName(name);userBean.setPassword(password);userBean.setEmail(email);boolean b = DBUtil.getInstance().insertUser(userBean);if(!b){request.setAttribute("DBMes", "你注册的用户已存在");request.setAttribute("formBean", formBean);request.getRequestDispatcher("/register.jsp").forward(request, response);return;}response.getWriter().print("恭喜你注册成功,3秒钟自动跳转");request.getSession().setAttribute("userBean", userBean);response.setHeader("refresh", "3;url=loginSuccess.jsp");}
}

创建JSP页面
编写register.jso

<%@ page language="java" pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>用户注册</title><style type="text/css">h3 {margin-left: 100px;}#outer {width: 750px;}span {color: #ff0000}div {height:20px;margin-bottom: 10px;}.ch {width: 80px;text-align: right;float: left;}.ip {width: 500px;float: left}.ip>input {margin-right: 20px}#bt {margin-left: 50px;}#bt>input {margin-right: 30px;}</style>
</head>
<body><form action="ControllerServlet" method="post"><h3>用户注册</h3><div id="outer"><div><div class="ch">姓名:</div><div class="ip"><input type="text" name="name" value="${formBean.name }" /><span>${formBean.errors.name}${DBMes}</span></div></div><div><div class="ch">密码:</div><div class="ip"><input type="password" name="password" /><span>${formBean.errors.password}</span></div></div><div><div class="ch">确认密码:</div><div class="ip"><input type="password" name="password2" /><span>${formBean.errors.password2}</span></div></div><div><div class="ch">邮箱:</div><div class="ip"><input type="text" name="email" value="${formBean.email }" /><span>${formBean.errors.email}</span></div></div><div id="bt"><input type="reset" value="重置 " /><input type="submit" value="注册" /></div></div></form>
</body>
</html>

编写loginSuccess.jsp

<%@ page language="java" pageEncoding="GBK" import="chapter11.model2_domain.UserBean"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>login successfully</title><style type="text/css">#main {width: 500px;height: auto;}#main div {width: 200px;height: auto;}ul {padding-top: 1px;padding-left: 1px;list-style: none;}</style>
</head>
<body><%if (session.getAttribute("userBean") == null) {%><jsp:forward page="register.jsp" /><%return;}%><div id="main"><div id="welcome">恭喜你,登录成功</div><hr /><div>您的信息</div><div><ul><li>您的姓名:${userBean.name }</li><li>您的邮箱:${userBean.email }</li></ul></div></div>
</body>
</html>

运行结果:

JSP动态网页开发技术相关推荐

  1. 动态网页开发技术(三):jsp

    Jsp概述 java server pages-java服务器页面,是一种动态网页技术标准,在传统的网页HTML中插入Java程序段(Scriptlet和JSP标记tag),从而形成JSP文件.JSP ...

  2. java基础学习之JSP动态web开发技术

    一 JSP是什么? jsp 页面允许在标准的HTML 页面中包含Java代码 目标:是支持表现和业务逻辑的分离. 表现:由前端人员实现. 业务逻辑: 有后台程序员处理 二JSP页面的运行原理 第一步 ...

  3. 动态网页开发技术(一):Servlet

    1. Servlet 1.1 Servlet概述 java EE Api Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务 ...

  4. 动态网页开发技术(二):Servlet

    ServletConfig对象 1)ServletConfig是用来获得Servlet的相关配置的对象 2)获得ServletConfig对象-通过Servlet的实例调用getServletConf ...

  5. jsp php动态网站开发,动态网站开发技术ASP、PHP与JSP的比较

    龙源期刊网 http://www.doczj.com/doc/4d5157a89a89680203d8ce2f0066f5335b816746.html 动态网站开发技术ASP.PHP与JSP的比较 ...

  6. JSP动态网页技术基本知识点总结

    今天学习了JSP动态网页技术的基本用法 1. 动态页面技术(  jsp )    what is jsp?  java server page   java服务器页面技术.        jsp包括了 ...

  7. 【JavaWeb - 网页编程】八 JSP 动态网页技术

    第八章 JSP 动态网页技术 创作日期:2021-12-27 8.1 JSP 介绍         JSP(全称JavaServer Pages)是一种动态网页技术标准.JSP部署于网络服务器上,可以 ...

  8. 【渝粤题库】陕西师范大学164111 Java及JSP动态网页编程与应用 作业 (高起专)

    <JAVA与JSP动态网页编程与应用>作业 一.单选题 1.以下哪项都是关键字( ) A.package privati protect throw B. false final fina ...

  9. 第四本书第1章 动态网页开发基础、

    一.动态网页开发基础 1.动态网页:能跟用户进行交互的网页,能够处理用户请求的网页 2.B/S架构:浏览器:客户端零维护:与操作系统平台的关系最小化:在响应速度和安全性上需要花费更多设计成本 C/S架 ...

最新文章

  1. count(1)、count(*) 与 count (列名) 的执行区别
  2. pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list
  3. python matplotlib绘制折线图
  4. 汇编学习(1)——基础知识
  5. 京东JDHBase异地多活实践
  6. 如何知道交换机的缓存大小_网络基本功之细说交换机
  7. 九度OJ : 1004 Median
  8. PHP二开美化版站长技术导航网站源码
  9. Fast Fourier Transform
  10. javascript 键值keyCode
  11. 解决一个用Idea的Docker插件远程部署SpringBoot的失败问题
  12. tsm备份mysql_基于tsm的oracle数据库备份及恢复
  13. 【07】processing-字体(中文)
  14. 偏微分方程的数值解(二): 一维状态空间的偏微分方程的 MATLAB 解法
  15. 青囊如可授 从此访鸿蒙的意思,有关于中元节的诗内容
  16. java split竖线_java对竖线|进行分割(split)操作
  17. 键盘驱动系列---JIURL键盘驱动 3
  18. 冰点还原精灵7.0密码忘记的解决方案
  19. Win10下系统自带的各种监测工具
  20. 李现助阵定格夜色之美,荣耀最强自拍手机亲民开售

热门文章

  1. http://blog.csdn.net/kuangfengbuyi/article/details/54091700?%3E
  2. assembly打包
  3. Java基础,保持编程设计风格,你也能成就大师风范
  4. 数据结构之冒泡排序(Java)
  5. Unity3D 虚拟现实开发(五)-UI篇
  6. 2017-2018-1课表
  7. 导致代理IP速度慢的原因是什么
  8. 操作系统知识点总结(第一章 操作系统引论)
  9. 中国古代名句警言 version 1
  10. 今日头条 新闻频道展示