JSP编程
什么是JSP
JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
它最大的特点就是HTML和Java代码共同存在!!!
JSP的基础语法
脚本程序
标签为 <% 插入的代码 %>
任何文本、HTML标签、JSP元素必须写在脚本程序的外面
<%
System.out.println("这是脚本程序");
%>
JSP声明
标签为 <%! %>
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,必须先声明这些变量和方法然后才能使用它们。
<%!
public satatic int sum(int a,int b){
return a + b;
}
%>
网页输出
标签为 <%= %>
标签中的内容可以被自动转化为String类型的文本,所以可以直接显示在这个标签出现的位置,这里的内容可以是各种各样的java内容
<body>
<p>两个数的和为:
<%= sum(5,5)%>
</p>
</body>
JSP指令
标签为 <%@ %>
指令一般用来设置整个JSP文件中相关的属性。例如java中需要导的jar包,或者是文件的编码标准等属性
//导包
<%@ page import="java.util.Date" %>
//设置文件标签类型为html,脚本语言为java
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
JSP注释
标签为 <%-- 注释内容 --%>
JSP的注释是不会被加载到浏览器的审查元素中的,只有html格式的注释会被加载进去
<%-- 脚本程序--%>
<%
//创建当前时间对象
Date date = new Date();
//创建日期格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//将当前时间格式化
String str = sdf.format(date);
%>
<!--显示当前时间-->
<p>
当前时间是
<%-- 将str字符串输出,就是当前时间--%>
<%= str%>
</p>
创建JSP文件
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/12/24
Time: 11:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个JSP文件</title>
</head>
<body>
Hello JSP
<%-- 脚本程序--%>
<%
//创建当前时间对象
Date date = new Date();
//创建日期格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//将当前时间格式化
String str = sdf.format(date);
%>
<p style="background-color: red">
当前时间是
<%-- 在网页中输出java的变量--%>
<%=str%>
</p>
</body>
</html>
运行效果
JSP中常用的内置对象
JSP中隐含了九个已经创建好的对象,在代码中是可以直接使用的,可以极大的方便代码的书写
对象名 | 功能 |
---|---|
out | PrintWriter类的实例对象(用于直接在网页上输出) |
request | HttpServletRequest类的实例对象(用于向服务端发送请求) |
response | HttpServletResponse类的实例对象(用于相应客户端的操作,并将请求重定向) |
session | HttpSession类的实例对象(用于会话) |
page | 类似于Java类中的this关键字(当前页面的对象) |
application | ServletContext类的实例对象(用于应用与上下文) |
exception | Exception类的对象(就是异常啦) |
pageContext | PageContext类的实例(提供对JSP页面所有对象以及命名空间的访问) |
config | ServletConfig类的实例(配置对象) |
out对象
用于在脚本程序中直接输出到页面的内容,只能在脚本程序里使用,可以动态的控制html文件的内容
<%
String str = "Hello JSP";
//使用out对象输出,用法与syso相似
out.print(str);
%>
<%--与网页配合使用的效果--%>
Hello:<%=str%>
request对象
request对象是javax.servlet.http.HttpServletRequest 类的实例对象。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。用户发送的所有的请求都是通过request对象实现,request中携带了请求的地址、参数。rqruest对象中提供的有设置参数的和请求转发等的方法
方法名 | 方法功能 |
---|---|
setAttribute(String key,String value) | 设置参数,参数是一对键值对 |
getAttribute(String key) | 获取指定key的值(获取设置的参数值) |
getParameter(String key) | 获取指定key的值 (获取前端页面中表单的值) |
setCharacterEncoding(String encoding) | 设置请求的编码 |
getRequestDispatch(String path).forward(req,resp) | 将请求转发出去 |
每个页面都默认持有一个独立的request对象,当请求转发时,ruquest对象也会将自己本身也转发出去,这样收到请求的页面会拿到这个对象,把自己的对象给覆盖掉。
request对象的特点:
1.这个对象的转发请求可多次转发,有点像java中的双亲委派机制,可以将请求一级一级的转发出去
2.请求转发出去后,虽然是新的页面在执行操作,但地址栏中的地址还是起始地址,地址是不会改变的
3.因为request请求转发会把本身这个对象转发过去,对象里是可以携带参数的,所以request请求转发也是可以携带参数的
//前端的表单页面实现登陆界面
//login.jsp
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="control.jsp" method="post">
<input type="text" name="uname" placeholder="请输入用户名">
<input type="password" name="pwd" placeholder="请输入密码">
<input type="submit" value="登录">
</form>
</body>
</html>
//control.jsp
//控制页面用于获取登陆界面传来的账号密码,进行判断并进行下一步
<%
//获取用户输入的账号密码
String name = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//进行简单的比对,如果成功就跳转到登陆成功的界面,并将账号密码传递过去,方便下个页面使用
if(name.equals(admin) && pwd.equals(666666)){
request.getRequestDispatcher("success.jsp").forward(request,response);
}
%>
request对象
response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。
response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
response对象作为服务端响应客户端的请求,它可以将这个请求重新定向到一个新的页面,让这个新的页面来处理这个请求,这个让别的页面来处理请求的方式有一点点类似request,只不过requset是接到这个请求后重新转发,response是跟请求者说:我处理不了,你去找内个谁,他可以处理,然后请求者就拿着请求去找下一个人了,这就是reponse对象,不过response对象是无法携带参数的。
方法名 | 方法功能 |
---|---|
sendRedirect(url) | 重新请求的地址 |
还用登陆界面的控制层进行示例
//control.jsp
//控制页面用于获取登陆界面传来的账号密码,进行判断并进行下一步
<%
//获取用户输入的账号密码
String name = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//进行简单的比对,如果成功就跳转到登陆成功的界面,并将账号密码传递过去,方便下个页面使用
if(name.equals(admin) && pwd.equals(666666)){
request.getRequestDispatcher("success.jsp").forward(request,response);
}else{
//如果比对失败,说明账号密码不正确,将页面重新返回
response.sendRedirect("login.jsp");
}
%>
session对象
session被用于跟踪各个客户端请求之间的会话。什么是会话呢?
会话(Session)是一个客户与服务器之间的不中断的请求响应序列。对客户的每个请求,服务器能够识别出请求来自于同一个客户。当一个未知的客户向Web应用程序发送第一个请求时就开始了一个会话。当客户明确结束会话或服务器在一个预定义的时限内不从客户接受任何请求时,会话就结束了。当会话结束后,服务器就删除客户以及客户的请求和信息。
简单点说,就是当我们登陆一个电商网站时,例如淘宝,只要第一次登录成功了,后面不管再点击哪个产品都不需要再一次登陆了,这就是一次会话。
方法名 | 方法功能 |
---|---|
setAttribute(key,val) | 使用指定的key,val产生一个对象并绑定到session中 |
getAttribute(key) | 返回session对象中与指定key对应的val |
getAttributNames() | 返回session对象中所有的键值对 |
getId() | 返回session对象的ID |
setMaxInactiveInterval(time) | 设置重新请求的时间,这段时间内这次会话保持有效 |
removeAttribute(key) | 删除制定key的键值对 |
还用登陆界面的控制层进行示例
//control.jsp
//控制页面用于获取登陆界面传来的账号密码,进行判断并进行下一步
<%
//获取用户输入的账号密码
String name = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//进行简单的比对,如果成功就跳转到登陆成功的界面,并将账号密码传递过去,方便下个页面使用
if(name.equals(admin) && pwd.equals(666666)){
//如果登陆成功,就在登陆成功的页面显示用户的用户名
session.setAttribute("uname",name);
response.sendRedirect("success.jsp");
}else{
//如果比对失败,说明账号密码不正确,将页面重新返回
response.sendRedirect("login.jsp");
}
%>
//登陆成功的界面
//success.jsp
<html>
<head>
<title>欢迎登陆</title>
</head>
<body>
<%
String name = session.getAttribute("uname");
%>
<h4>欢迎您:
<%=name%>
</h4>
</body>
</html>
jsp中的内置对象的使用方法大致上与java中的方法使用上没什么区别,只是方法的功能不同,所在的类不同,使用该对象的方法时,思路按照java的方式去使用就可以了,这里就只是介绍了一些常用的对象及方法