一 JSP是什么?

jsp 页面允许在标准的HTML 页面中包含Java代码

目标:是支持表现和业务逻辑的分离.

表现:由前端人员实现.

业务逻辑: 有后台程序员处理

二JSP页面的运行原理

第一步
请求进入web容器,如果第一次访问JSP 页面, JSP parser 将JSP 页面
翻译成servlet 代码; 如果不是第一次访问执行第4步
第二步 
编译 servlet 代码,并将编译过的类文件装入web容器(JVM)环境
第三步
web容器为JSP页面创建一个servlet 类实例,并执行jspInit 方法.
第四步
web容器为该JSP 页面调用servlet 实例的_jspServlet 方法: 将结果发给用户 

JSP-页面---->翻译成.Java文件--->编译成.class文件;

JSP在翻译成.Java文件时 会将Java小脚本中的代码直接编译到 service 方法中;

HTML标签 是由 out对象 写回到浏览器中;

需求:使用JSP完成登录

只使用JSP

登录成功 去往 成功页面  并显示欢迎 xxx

登录失败 显示失败信息

登录的JSP

<%@page import="org.apache.jasper.tagplugins.jstl.core.If"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%-- <%//取出错误信息String msg =(String)request.getAttribute("msg");if(msg!=null){out.print(msg);}%>--%><%--利用EL表达式 回显数据 --%>${msg }<form action="/sh-web-newjsp/dologin.jsp" method="post">用户名:<input type="text" name="username"/><br/>密码:<input type="text" name="password"/><br/><input type="submit" value="提交"/></form></body>
</html>

处理登录逻辑的JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%String username = (String)request.getParameter("username");String password = (String)request.getParameter("password");//处理逻辑//请求分发if(username.equals("afd")&&password.equals("123")){//成功 请求重定向session.setAttribute("username", username);response.sendRedirect("/sh-web-newjsp/success.jsp");}else{//失败request.setAttribute("msg", "账号和密码失败,请重新登录");request.getRequestDispatcher("/login.jsp").forward(request, response);}%>
</body>
</html>

登录成功的JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>欢迎:<%String usernsme =(String) session.getAttribute("username");out.write(usernsme);%>进入本网站
</body>
</html>

三 JSP的五种元素

1.注释 : <%— —%>
2.指令标签 目的 : 影响JSP的翻译  <%@ page import”Java.util.*"     %>
3..脚本标签
<%       %> 不能写方法
4.表达式标签
目的 :表答式标签分装Java 运行时的表达式 ,其值被送至http 响应流
<%=   %> 

5.声明标签

<%!   public void add(){
******************       ******        
}        !%>

声明成员变量和方法 会被翻译到类中方法外

3个指令标签:

1.page<%@ 引入头文件%>

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

pageEncoding 设置本页面的编码格式

contentType 相当于 response.setContentType

  <%@ page session= "true" %>

session 开关默认开启状态的,在JSP编译成servlet时 系统会生成 session对象 ,当设置成false是 session就不会被创建;

 <%@ page errorPage="/3.jsp" %>

当本页面错误时 跳转到另一个页面

<%@ page isErrorPage="true"%>

isErrorPage默认是关闭的 开启后可以使用exception对象获取错误信息

以下测试 isErrorPage

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ page session= "false" %><%--session 开关 默认开启状态的 关上时 编译.Java文件系统不会为你创建 session--%><%@ page errorPage="/3.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%//session.getAttribute("123");int num = 10/0;%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ page isErrorPage="true"%><%-- isErrorPage默认是关闭的 开启后可以使用exception对象获取错误信息 --%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>服务器正在维护升级中....<%=exception.getMessage()%>
</body>
</html>


2. Include 包含
<%@ Include file = "包含哪个页面"%>

包含分为两种

静态包含

 <%-- <%@ include file="/5.jsp" %>--%> 

编译成.Java文件时 直接把两个个界面编译成一个.Java文件

输出了两套HTML标签;

动态包含

当读取到动态包含时 才会把动态包含的那个页面编译成.Java文件 此时编译成的是两个.Java文件

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%--静态包含 --%><%-- <%@ include file="/5.jsp" %>--%> <%--动态包含 --%><%--<jsp:include page="/5.jsp"></jsp:include> --%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>吾问无为谓无无无无无无无无无无
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>---坎坎坷坷扩扩扩扩扩扩扩扩扩扩扩扩扩扩
</body>
</html>

3.taglib

可以引入标准标签库(c标签)

 <%--引入标准标签库 prefix 使用标签时起的别名--%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

二.6个动作标签

<JSP:include>  上面的动态包含

<JSP:forward>  请求转发

<JSP:param>   请求中的参数

<jsp:useBean>  创建对象

<jsp:setProperty> 设置对象的

<jsp:getProperty>

6.jsp

<jsp:forward page="/7.jsp"><jsp:param value="hero" name="username"/><jsp:param value="5201314" name="password"/></jsp:forward>
7.jsp

<body>

我是7 哈哈哈

<%=request.getParameter("username") %>

<%=request.getParameter("password") %>

</body>


<jsp:useBean>  

创建一个user对象 

<%@page import="com.lanou3g.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%User user = new User();user.setUsername("wanglong");user.setPassword("123");%><%=user.getUsername() %><%--使用useBean 创建对象id 表示创建的这个对象的名字class 表示使用哪个类来创建对象--%><jsp:useBean id="user1" class="com.lanou3g.User"/><%--name表示要赋值哪个对象property 表示给对象的哪个属性赋值value 表示赋的值--%><jsp:setProperty property="username" name="user1" value="kuner"/><jsp:setProperty property="password" name="user1" value="10086"/><%--获取对象 --%><jsp:getProperty property="username" name="user1"/><jsp:getProperty property="password" name="user1"/></body>
</html>

三.9个内置对象

request

response

session

application  ServletContext 全局域

exception

page 表示本类对象

config

out

pageContext 作用范围 指当前页面 域对象

域对象的作用范围

pageContext < request< session< ServletContext

1.pageContext 本类对象

<body><%//pageContext 域对象// 作用范围 :只能当前页面访问到//可以获取(操作)所有的域对象pageContext.setAttribute("sex", "女");%><%=pageContext.getAttribute("sex") %>
</body>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%//利用PageContext 向各个域中保存值//参数三表示向哪个域中存值//pageContext.setAttribute("www", "pageContext",PageContext.PAGE_SCOPE);//pageContext.setAttribute("www", "request", PageContext.REQUEST_SCOPE);//想当于 request.setAttribute("www", request);//pageContext.setAttribute("www", "session", PageContext.SESSION_SCOPE);pageContext.setAttribute("www", "servletContext", PageContext.APPLICATION_SCOPE);%><%--进行全域查找 从域范围由小到大查找 --%><%=pageContext.findAttribute("www") %> 
      <%=pageContext.findAttribute("www") %>

</body></html>

pageContext.findAttteribute 在查找值得时候从域范围由小到大查找 找到后就不在查询;

EL 表达式

el表达式 判断空值

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><!-- EL表达式 对空值的判断 --><%String str1 = null;request.setAttribute("str1", str1);String str2 ="";request.setAttribute("str2", str2);String str3 ="wanglong";request.setAttribute("str3", str3);ArrayList<String> list1 = new ArrayList<String>();request.setAttribute("list1", list1);ArrayList<String> list2 = new ArrayList<String>();list2.add("aaa");list2.add("bbb");request.setAttribute("list2", list2);//根据从域中取出来的值,来让单选框默认选择哪个String name = "nv";request.setAttribute("name", name);%><!-- 测试el表达式对空值的显示结果不管null还是没有内容 都不会报错真正有值才会显示(容错性高)-->${str1 }${str2 }${str3 }${list1 }${list2 }<!-- 判断空值的方法 关键词  empty -->${empty str1 }${empty str2 }${empty str3 }${empty list1 }${empty list2 }<!-- 支持三目表达式 -->${empty str3?"我是前面的":"我是后面的" }<br>男<input type="radio" name = "sex" value="nan" ${name=="nan"?"checked='checked'":""} /><br/>
女<input type="radio" name = "sex" value="nv" ${name=="nv"?"checked='checked'":""}/></body>
</html>

el表达式 获取对象的属性值

<%@page import="com.lanou3g.City"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.lanou3g.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><!-- EL表达式 获取对象的属性值 JavaBean导航(对象导航)--> <%City city = new City();city.setAddress("sh");User u1 = new User();u1.setUsername("wanglong");u1.setPassword("123");u1.setCity(city);request.setAttribute("u1", u1);//创建list 保存2个值 保存到域中ArrayList<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");request.setAttribute("l1", list);//创建一个map 保存2个值 保存到域中HashMap<String,String> map = new HashMap<String,String>();map.put("a", "aaaaa");map.put("b", "bbbbb");map.put("c", "ccccc");request.setAttribute("m1", map);%><!-- 内部相当于 调用getUsername()方法 用点能获取的用中括号都能获取用中括号能获取的不一定能用点获取-->${u1.username }${u1["username"] }${u1['username'] }${u1.city.address }${u1["city"]["address"] }${l1[0] }${l1[1] }${m1["a"] }${m1["b"] }${m1["c"] }</body>
</html>

el表达式: 隐式对象

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><!--EL表达式 隐式对象注意:隐式对象在EL表达式中书写--><%//解决乱码response.setContentType("text/html; charset=UTF-8");request.setCharacterEncoding("UTF-8");//利用pageContext 对象 向各个域中保存值pageContext.setAttribute("xxx", "REQUEST", PageContext.REQUEST_SCOPE);pageContext.setAttribute("xxx", "SESSION", PageContext.SESSION_SCOPE);pageContext.setAttribute("xxx", "PAGE", PageContext.PAGE_SCOPE);pageContext.setAttribute("xxx", "APPLICATION", PageContext.APPLICATION_SCOPE);%><!-- 使用隐式对象 指定域找对应的值 -->${requestScope.xxx }${sessionScope.xxx }${pageScope.xxx }${applicationScope.xxx }<form action="${pageContext.request.contextPath }/13.jsp" method="post"><br/>账号:<input type="text" name="username"/><br/>密码: <input type="text" name="password"/><br/>唱歌<input type="checkbox" name="hobby" value="sing"/><br/>踢球<input type="checkbox" name="hobby" value="ball"/><br/><input type="submit" value="提交"/><br/></form></body>
</html>

el表达式 :获取表单数据

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><!-- 获取表单提交的数据 --><%request.setCharacterEncoding("UTF-8");%>${param.username }${param.password }${paramValues.hobby[0] }</body>
</html>

java基础学习之JSP动态web开发技术相关推荐

  1. JSP动态网页开发技术

    一.学习目标 1.JSP概述 2.JSP指令 3. JSP 隐式对象 二.重点知识 1.JSP概述:JSP是什么? 1)JSP全称Java Server Pages,是一种动态网页开发技术.它使用JS ...

  2. Java基础学习总结(158)——开发Leader如何做CodeReview

    一.目标和原则 提高代码质量,及早发现潜在缺陷,降低修改/弥补缺陷的成本 促进团队内部知识共享,提高团队整体水平 评审过程对于评审人员来说,也是一种思路重构的过程,帮助更多的人理解系统 是一个传递知识 ...

  3. Java基础学习总结(146)——开发人员日志实践规范

    一.日志规范 日志作用: 1.日常排查问题(基本作用),快速定位问题的根源 2.分析日志,构建常见问题排查平台 3.报表输出(日活.周活) 4.追踪程序执行的过程,追踪数据的变化:  a)在系统启动或 ...

  4. php三种web开发技术,三种WEB开发主流技术ASP-PHP-JSP的评价

    三种Web开发主流技术ASP-PHP-JSP的评价 [摘要]本文从程序开发者的角度,对现今社会盛行的WEB开发技术进行了分析,旨在让WEB 开发人员.使用者.准备学习的人对WEB开发技术有更加深入的了 ...

  5. Java Web开发技术教程入门-初识动态网页

    这段时间学校搞了一个"阅战阅勇"的阅读活动,奖品还是挺丰富的~于是,奔着这些奖品,我去图书馆借了这本<Java Web开发技术教程>.一是为了那些丰富的奖品,二是为了回 ...

  6. java基础学安卓开发_Android开发学习路线之Java基础学习

    原标题:Android开发学习路线之Java基础学习 很多Android学习开发者刚入手Android开发技术时,稍微有点迫切.任何的开发技术都有其基础语言,Android应用程序开发是以Java语言 ...

  7. Java基础学习:尚硅谷项目三 开发团队调度软件

    Java基础学习:尚硅谷项目三 开发团队调度软件 一.软件功能与结构设计 1. 软件功能 该软件实现以下功能: 软件启动时,根据给定的数据创建公司部分成员列表(数组) 根据菜单提示,基于现有的公司成员 ...

  8. java web 开发技术大全 代码_Java Web开发技术大全

    资深程序员全力打造,深入剖析SSH框架整合开发的精髓 全方位解读Java Web开发的基础知识.高级技术及应用案例 内容全面,讲解详细,全面覆盖JSP.Se rvlet.AJAX及SSH框架整合开发 ...

  9. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

最新文章

  1. PCA(Principal Component Analysis)的原理、算法步骤和实现。
  2. ubuntu 16.04 多个python版本切换
  3. 输入法图标(语言栏)不见了怎么办
  4. qt设置mysql最大连接数_MySQL服务器最大连接数的合理设置
  5. Android --- 如何使状态栏和标题栏底色相同
  6. hql懒加载后判断对象是否存在_hibernate延迟加载(懒加载)详解
  7. 互联网产品初期需求确定与数据库模型设计——基于Visio和Xmind
  8. Spring Security配置错误
  9. 原创]Windows Gdi入门初级应用(VC SDK)
  10. 【万里征程——Windows App开发】使用华丽丽的字体
  11. python3.7 中文汉化包
  12. python成绩统计及格学平成_强化学习训练Chrome小恐龙Dino:最高超过4000分
  13. n维立方体角、面、边的个数
  14. windows内核开发笔记二:错误信息处理
  15. C++ Report:应用设计模式去简化信号控制
  16. Redux 使用指南(todoList 案例)
  17. 这个618买到假货了怎么办?
  18. dw连接mysql数据库原理_Dreamweaver中连接SQL Server数据库代码
  19. 基于jsp酒店管理系统设计
  20. 封包工具Enigma Virtual Box

热门文章

  1. HttpClient实战爬虫B站番剧
  2. PHP内核源码阅读过程(四)
  3. ie不显示html图片不显示,IE浏览器图片显示不出来 IE浏览器图片不显示解决办法...
  4. 【笔记】【WPF编程宝典】 第02章 XAML
  5. 【大前端】独家下载!看阿里巴巴前端技术专家解读2021前端热门技术趋势
  6. IDEA+tomcat在debug中关于断点的报错:No executable code found at line XX in class XXX
  7. 解决Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
  8. 勇斗勒索软件的英雄疑因旧罪被捕;华为、腾讯为用户数据起冲突
  9. Python-网络编程(二)
  10. 领峰:限价建仓怎么进行,有什么好处呢?