提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Web 即网页的意思,分为动态Web资源和静态Web资源,静态的Web资源,访问的 Web 始终不变;动态的Web资源不同时间或者不同的请求访问的Web内容不同。
静态技术:html
动态技术:Jsp、Servlet、Asp、PHP,我们主要进行 JavaWeb 开发。
一、jsp,Java Servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:
性能明显更好。
Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
Servlet 是独立于平台的,因为它们是用 Java 编写的。
服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
二、Jsp的基本语法
Jsp的注释
<!-- --> Html 注释
<!-- -->Jsp 注释
// java 单行注释
/* */ java 多行注释
scriptlet 标签
通过 scriptlet 标签我们可以在 Jsp 里嵌入 Java 代码;
第一种:<%! %> 我们可以在里面定义全局变量、方法、类;
第二种:<% %> 我们可以在里面定义局部变量、编写语句;
第三种:<%=%> 我们可以在里面输出一个变量或一个具体内容;
指令介绍
Language : 用来定义要使用的脚本语言;
contentType:定义JSP字符的编码和页面响应的MIME类型;
pageEncoding:Jsp页面的字符编码,默认是 ISO-8859-1;一般改成utf-8
<%@ include file=”url”> 静态包含 先包含,后编译处理;
<jsp:include page=”url”> 动态包含 先编译处理,后包含; 以后开发用动态
包含;
跳转指令介绍
第一种:include 动作指令,<jsp:include page=”/user/test” flush=”true”/>
include动作指令和include的区别:
区别 include jsp:include
执行时间 翻译阶段 在请求处理阶段执行
引入的内容 引入静态文本, 引入执行页面或 servlet 所生成的应答文本.
先包含,后编译 被包含的文件先编译,后包含进来,然后显示
传参 不支持传参 支持传参
第二种:forward
< jsp:forward>
<jsp:param value=”” name=””>
</jsp:forward>
自定义下面文件
forward.jsp文件
<body>
<jsp:forward page="target.jsp">
<jsp:param value="tao" name="userName"/>
<jsp:param value="123456" name="password"/>
</jsp:forward>
</body>
target.jsp文件
</head>
<body>
服务器内部跳转页面<br/>
userName:<%=request.getParameter("userName") %><br/>
password:<%=request.getParameter("password") %>
</body>
</html>
结果如下:
跳转原理:
三、Jsp 九大内置对象和四个作用域
在Jsp开发中,Jsp提供了9个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。这个 9 个内置对象分别是:
pageContext,request,response,session,application,config,out,page,exception;常用的是前面 5 个,需要熟练掌握;
在 Jsp 开发中,可以保存数据,Jsp 提供了四种数据保存范围;分别是 page,request,session,application;
Jsp 的四大作用域
Page 范围:只在一个页面中保存数据; javax.servlet.jsp.PageContext(抽象类)
<body>
<%
//设置两个page范围的数据库,key-value
pageContext.setAttribute("name", "小明");
pageContext.setAttribute("age", 23);
%>
<%
//取值
String name=(String)pageContext.getAttribute("name");
int age=(Integer)pageContext.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
Request 范围:只在一个请求中保存数据;javax.servlet.http.HttpServletRequest(接口)
//requestScope.jsp
<body>
<%
//设置两个request范围的数据库,key-value
request.setAttribute("name", "小明");
request.setAttribute("age", 23);
%>
<jsp:forward page="requestTarget.jsp"></jsp:forward>
</body>
//requestTarget.jsp
<body>
<%
//取值
String name=(String)request.getAttribute("name");
int age=(Integer)request.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
Session 范围:在一次会话范围中保存数据,仅供单个用户使用;javax.servlet.http.HttpSession(接口) ;即再打开第二个浏览器值是取不到的
//sessionScope.jsp
<body>
<%
//设置两个session范围的数据库,key-value
session.setAttribute("name", "小明");
session.setAttribute("age", 23);
%>//因为保存至服务器端,所以不用跳转
<h1>session设置完毕</h1>
</body>
//sessionTarget.jsp
<body>
<%
//取值
String name=(String)session.getAttribute("name");
int age=(Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
Application 范围:在整个服务器上保存数据,所有用户共享;javax.servlet.ServletContext(接口)
//applicationScope.jsp
</head>
<body>
<%
//设置两个application范围的数据库,key-value
application.setAttribute("name", "小明");
application.setAttribute("age", 23);
%>
<h1>application设置完毕</h1>
</body>
//applicationTarget.jsp
<body>
<%
//取值
String name=(String)application.getAttribute("name");
int age=(Integer)application.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年龄:<%=age %></font>
</body>
response 对象
Response 内置对象和 request 内置对象是相对应的,response 内置对象用于响应客户请求,向客户端输出信息; javax.servlet.HttpServletResponse 接口
1,自动刷新应用
2,页面重定向应用客户端跳转
3,操作 cookie 应用,post、get 方法;比较 post 放数据包里(相对安全,不显示参数)、get 放 Url 后面 get 数据量小,不安全;
4,cookie 和 session 的比较 cookie 信息是存客户端的,session 信息是存服务器的;
//自动刷新应用 ,显示时间
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<!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>
<%
//每隔一秒刷新一下页面
response.setHeader("refresh", "1");
//获取当前的时间
Date mydate=new Date();
%>
当前时间:<%=mydate.toLocaleString() %>
</body>
</html>
第二点:重定向
<body>
<%
//重定向,客户端跳转
response.sendRedirect("index.html");
%>
</body>
第三点:get post跳转 登录
response03.jsp文件
//response03.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<!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>tao</title>
<script type="text/javascript">
function resetValue(){
document.getElementById("userName").value="";
document.getElementById("pwd").value="";
}
</script>
<%
String userName=null;
String pwd=null;
Cookie[] cookies=request.getCookies();
for(int i=0;cookies!=null&&i<cookies.length;i++){
if(cookies[i].getName().equals("userNameAndPwd")){
userName=cookies[i].getValue().split("-")[0];
pwd=cookies[i].getValue().split("-")[1];
}
}
%>
</head>
<body>
<form action="userLogin.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="pwd" name="pwd" value="<%=pwd%>"/></td>
</tr>
<tr>
<td>记住密码:</td>
<td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>
</tr>
<tr>
<td><input type="submit" value="登录"></td> //type=submit 是发送表单
<td><input type="button" value="重置" onclick="resetValue()"/></td>
</tr>
</table>
</form>
</body>
</html>
userLogin.jsp文件
<body>
<%
String userName=request.getParameter("userName");//获取用户名
String pwd=request.getParameter("pwd");//获取密码
String remember=request.getParameter("remember");//获取记住密码
if("remember-me".equals(remember)){
Cookie userNameAndPwd=new Cookie("userNameAndPwd",userName+"-"+pwd);
userNameAndPwd.setMaxAge(1*60*60*24*7);//设置成一周
response.addCookie(userNameAndPwd);//保存cookie
System.out.println("设置cookie成功");
}
System.out.println("userName:"+userName);
System.out.println("pwd:"+pwd);
System.out.println("remember:"+remember);
response.sendRedirect("response03.jsp");
%>
</body>
out 对象
Out 内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区。所以 out 内置对象的方法是向客户端输出数据和管理缓冲区;
<body>
<%
out.println("tao");
%>
<%
int totalbuffer=out.getBufferSize();//获取总缓冲的大小
int available=out.getRemaining();//获取未使用缓冲区的大小
int user=totalbuffer-available;//获取使用缓冲区的大小
out.println("总缓冲区的大小:"+totalbuffer);
out.println("未使用缓冲区的大小:"+available);
out.println("使用缓冲区的大小:"+user);
%>
</body>
config 对象
Config 内置对象是 JSP 页面通过 JSP 容器进行初始化时被传递的对象。javax.servlet.ServletConfig 。在 Servlet 初始化的时候,JPS 引擎通过config 向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过 ServletContext 对象传递的服务器的有关信息;
//WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Servlet03</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
//下面重点
<servlet>
<servlet-name>init</servlet-name>
<jsp-file>/sysInit.jsp</jsp-file>
<init-param>
<param-name>jdbcName</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>dbUrl</param-name>
<param-value>jdbc:mysql://localhost:3306/db_demo</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>init</servlet-name> //找到对应的<servlet>里面的<servlet-name>init
<url-pattern>/init</url-pattern> //找到上一行
</servlet-mapping>
</web-app>
//sysInit.jsp
<body>
<%
String jdbcName=config.getInitParameter("jdbcName");
String dbUrl=config.getInitParameter("dbUrl");
%>
<h1>驱动名称:<%=jdbcName %></h1>
<h1>连接地址:<%=dbUrl %></h1>
</body>
</html>
exception 对象
Exception 内置对象用来处理 JSP 文件在执行时发生的所有异常,它是java.lang.Throwable 类的一个对象。
//exception01.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<%@ page errorPage="error.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>
<%
int a=23;
int b=0;
out.println(a/b);
%>
</body>
</html>
//error.jsp
<%@ page import ="java.util.*" %>
<body>
<%
if(exception!=null){
out.println("程序错误的信息:");
out.println(exception.getMessage());
}
%>
</body>
</html>
pageContext 对象
pageContext内置对象是一个比较特殊的对象。它相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext内置对象由Jsp容器创建并初始化,pageContext对象提供了对JSP页面所有对象及控件的访问。
<body>
<%
pageContext.setAttribute("name0", "pageinfo");
request.setAttribute("name1", "requestinfo");
session.setAttribute("name2", "sessioninfo");
application.setAttribute("name3", "applicationinfo");
out.println("使用pageContext<br/>");
out.println("page中的属性值"+pageContext.getAttribute("name0")+"<br/>");
out.println("request中的属性值"+pageContext.getRequest().getAttribute("name1")+"<br/>");
out.println("session中的属性值"+pageContext.getSession().getAttribute("name2")+"<br/>");
out.println("applicaiton中的属性值"+pageContext.getServletContext().getAttribute("name3")+"<br/>");
%>
</body>
四、JavaBean
JavaBean 的概念
1.提高代码的可复用性:对于通用的事务处理逻辑,数据库操作等都可以封装在 JavaBean 中,通过调用 JavaBean 的属性和方法可快速进行程序设计。
2.程序易于开发维护:实现逻辑的封装,使事务处理和显示互不干扰。
3.支持分布式运用:多用 JavaBean,尽量减少 java 代码复用。
jsp:useBean 创建 javabean
<jsp:useBean id=“实例化对象名称” scope=“保存范围” class=“类完整名称”/> Scope,一共有page,request,session 和 application 4 个属性范围,默认是 page;
先创建好学生类
<body>
<jsp:useBean id="student" scope="page" class="com.tao.model.Student"/>
<%
student.setName("tao");
student.setAge(23);
%>
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
jsp:setProperty 设置 javabean 属性值
<jsp:setProperty property=“属性名称” name=“实例化对象的名称” value=“属性值” param=“参数名称”/> Property=”*” 自动匹配所有
//student.jsp
<body>
<form action="javabean5.jsp" method="post">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name(对应3、4jsp)或者userName"></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td clospan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form>
</body>
//javabean3.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="student" scope="page" class="com.javaclimb.model.Student"/>
<jsp:setProperty property="*" name="student" />
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
//javabean4.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="student" scope="page" class="com.javaclimb.model.Student"/>
<jsp:setProperty property="name" name="student" />
<jsp:setProperty property="age" name="student" value="24" />
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
//javabean5.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="student" scope="page" class="com.javaclimb.model.Student"/>
<jsp:setProperty property="name" name="student" param="userName"/>
<jsp:setProperty property="age" name="student" value="24" />
<h1>姓名:<%=student.getName() %></h1>
<h1>年龄:<%=student.getAge() %></h1>
</body>
jsp:getProperty 获取 javabean 属性值
<jsp:getProperty property=“属性名称” name=“实例化对象的名称”/>
<body>
<jsp:useBean id="student" scope="page" class="com.javaclimb.model.Student"/>
<%
student.setName("tao");
student.setAge(23);
%>
<h1>姓名:<jsp:getProperty property="name" name="student" /></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
javabean 的保存范围
Javabean 的保存范围有 page,request,session.application,默认是 page;
//javabean7.jsp request
<body>
<jsp:useBean id="student" scope="request" class="com.javaclimb.model.Student"/>
<jsp:setProperty property="name" name="student" value="tao" />
<jsp:setProperty property="age" name="student" value="23" />
<jsp:forward page="target1.jsp"/>
</body>
//target1.jsp
<body>
<jsp:useBean id="student" scope="request" class="com.javaclimb.model.Student"/>
<h1>姓名:<jsp:getProperty property="name" name="student" /></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
//javabean8.jsp session
<body>
<jsp:useBean id="student" scope="session" class="com.javaclimb.model.Student"/>
<jsp:setProperty property="name" name="student" value="tao" />
<jsp:setProperty property="age" name="student" value="23" />
<h1>session设置完毕!</h1>
</body>
//target2.jsp
<body>
<h1>session取值!</h1>
<jsp:useBean id="student" scope="session" class="com.javaclimb.model.Student"/>
<h1>姓名:<jsp:getProperty property="name" name="student" /></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
//javabean9.jsp application
<body>
<jsp:useBean id="student" scope="application" class="com.javaclimb.model.Student"/>
<jsp:setProperty property="name" name="student" value="tao" />
<jsp:setProperty property="age" name="student" value="23" />
<h1>application设置完毕!</h1>
</body>
//target3.jsp
<body>
<h1>application取值!</h1>
<jsp:useBean id="student" scope="application" class="com.javaclimb.model.Student"/>
<h1>姓名:<jsp:getProperty property="name" name="student" /></h1>
<h1>年龄:<jsp:getProperty property="age" name="student"/></h1>
</body>
javabean 删除 JavaBean
Page 范围:pageContext.removeAttribute(“javaBean Name”);
request 范围:request.removeAttribute(“javaBean Name”);
session 范围:session.removeAttribute(“javaBean Name”);
application 范围:application.removeAttribute(“javaBean Name”);
<body>
<%
application.removeAttribute("student");
%>
<h2>application已经删除!</h2>
</body>
五、Sevlet 开发详解
servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
servlet实例
//FirstServlet.java
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("gbk");
PrintWriter out=response.getWriter();
out.println("<html>");
out.println("<hean><title>Servlet你好!</title></head>");
out.println("你好,Servlet!");
out.println("</html>");
}
}
//WEB-INF\web.xml
<display-name>Servlet05</display-name>
<welcome-file-list>
......
</welcome-file-list>
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>com.tao.web.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
servlet 生命周期
Servlet 的生命周期,简单的概括这就分为四步:servlet 类加载—>实例化—>服务—>销毁。
init()—>doGet()/doPost()—>destroy()
一般来说我们是用不到doGet方法的,doGet方法提交表单的时候会在url后边显示提交的内容,所以不安全。而且doGet方法只能提交256个字符(1024字节),而doPost没有限制,因为get方式数据的传输载体是URL(提交方式能form,也能任意的URL链接),而POST是HTTP头键值对(只能以form方式提交)。通常我们使用的都是doPost方法,你只要在servlet中让这两个方法互相调用就行了
客户端跳转 VS 服务器端跳转
在Servlet中获取 session,application
2,客户端跳转:response.sendRedirect("目 标 地 址 “);
3,服务端跳转:RequestDispatcher rd=request.getRequestDispatcher(” 目 标 地 址 "); rd.forward(request, response);
过滤用户请求;
监听 web 事件;如 application,session,request
//RendirectServlet.java
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setAttribute("requestKey", "request值");
HttpSession session=request.getSession();//获取session
session.setAttribute("sessionKey", "session值");
ServletContext application=this.getServletContext();//获取applicaiton
application.setAttribute("applicationKey", "application值");
response.sendRedirect("target.jsp");
}
//ForwardServlet.java
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setAttribute("requestKey", "request值");
HttpSession session=request.getSession();//获取session
session.setAttribute("sessionKey", "session值");
ServletContext application=this.getServletContext();//获取applicaiton
application.setAttribute("applicationKey", "application值");
RequestDispatcher rd=request.getRequestDispatcher("target.jsp");
rd.forward(request, response);
}
//WEB-INF\web.xml
<servlet>
<servlet-name>rendirectServlet</servlet-name>
<servlet-class>com.javaclimb.web.RendirectServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>rendirectServlet</servlet-name>
<url-pattern>/rend</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>forwardServlet</servlet-name>
<servlet-class>com.javaclimb.web.ForwardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>forwardServlet</servlet-name>
<url-pattern>/forward</url-pattern>
</servlet-mapping>
//target.jsp
<body>
<h1>获取值</h1>
request值:<%=request.getAttribute("requestKey") %>//ForwardServlet获取不到
session值:<%=session.getAttribute("sessionKey") %>
application值:<%=application.getAttribute("applicationKey") %>
</body>
六、el表达式
取值 ${}
${ pageScope. userinfo}表示访问page范围中的userinfo变量。
<%
pageContext.setAttribute("info1","page的值");
request.setAttribute("info2","request的值");
%>
<h1>${info1}</h1>
<h1>${info2}</h1>
EL 表达式 11 个内置对象
EL 表达式访问的 4 种属性
获取值的顺序:page->request->session->application
EL 表达式接收请求参数
Param:单个参数 paramValues:一组参数
//Param:单个参数, 假设前面有传参数过来
<body>
<h1>姓名:${param.name}</h1>
<h1>年龄:${param.age}</h1>
</body>
EL 表达式对象操作
<body>
<%
Student a = new Student();
a.setName("tao");
a.setAge(23);
request.setAttribute("a",a);
%>
<h1>姓名:${a.name}</h1>
<h1>年龄:${a.age}</h1>
</body>
EL 表达式集合操作
<body>
<%
List test = new LinkedList();
test.add(0,"aa");
test.add(1,"bb");
request.setAttribute("test",test);
%>
<h1>${test[0]}</h1>
<h1>${test[1]}</h1>
</body>
EL 表达式运算符操作
<body>
<%
request.setAttribute("num1",10);
request.setAttribute("num2",3);
request.setAttribute("flag1",true);
request.setAttribute("flag2",false);
%>
<h1>算数运算符</h1>
<h2>num1=${num1 },num2=${num2 }</h2> //10 3
<h2>num1+num2=${num1+num2 }</h2> //13
<h2>num1-num2=${num1-num2 }</h2> //7
<h2>num1*num2=${num1*num2 }</h2> //30
<h2>num1/num2=${num1/num2 }</h2> //3.33333333335
<h2>num1%num2=${num1%num2 }</h2> //1
<h2>num1*(num1-num2)=${num1*(num1-num2) }</h2> //70
<h1>关系运算符</h1>
<h2>flag1=${flag1 },flag2=${flag2 }</h2> //true false
<h2>与操作flag1 && flage2:${flag1 && flage2 }</h2> //false
<h2>或操作flag1 || flage2:${flag1 || flage2 }</h2> //true
<h2>非操作!flag1:${!flag1}</h2> //false
<h1>三目运算符</h1>
<h2>三目操作:num1>num2:${num1>num2?"yes":"no" }</h2> //yes
<h1>empty关键字</h1>
<h2>判断空操作:${empty num1 }</h2> //false
</body>
总结
Jsp的注释
<!-- --> Html 注释
<!-- -->Jsp 注释
// java 单行注释
/* */ java 多行注释
scriptlet 标签
通过 scriptlet 标签我们可以在 Jsp 里嵌入 Java 代码;
第一种:<%! %> 我们可以在里面定义全局变量、方法、类;
第二种:<% %> 我们可以在里面定义局部变量、编写语句;
第三种:<%=%> 我们可以在里面输出一个变量或一个具体内容;
指令介绍
Language : 用来定义要使用的脚本语言;
contentType:定义JSP字符的编码和页面响应的MIME类型;
pageEncoding:Jsp页面的字符编码,默认是 ISO-8859-1;一般改成utf-8
<%@ include file=”url”> 静态包含 先包含,后编译处理;
<jsp:include page=”url”> 动态包含 先编译处理,后包含; 以后开发用动态
包含;
Jsp 九大内置对象和四个作用域
在Jsp开发中,Jsp提供了9个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。这个 9 个内置对象分别是:
pageContext,request,response,session,application,config,out,page,exception;常用的是前面 5 个,需要熟练掌握;
在 Jsp 开发中,可以保存数据,Jsp 提供了四种数据保存范围;分别是 page,request,session,application;