一、jsp简介
(1) 什么是jsp
① jsp全名为 Java Server Pages
② 中文名叫 java服务器页面
③ 它是在传统的网页HTML文件(*.html,*.htm)中插入Java程序段和jsp标记;标签通常以<%开头以%>结束。
④ 后缀名为(*.jsp)
⑤ 其根本是一个简化的Servlet设计
(2)为什么要有jsp
直接使用html文件是没有办法输出java当中的信息,使用servlet来去输出一个网页非常的麻烦,于是就出现了jsp,又能写html,又能写java代码
(3) jsp的工作原理
jsp工作原理示意图
(4)jsp的组成
① 指令
1.1 概述
jsp指令用于设置整个jsp页面的相关信息以及用于jsp页面与其它容器之间的通信
1.2 三大指令
1.2.1 page指令
① 用于设定整个jsp页面的属性和相关功能
② 常用属性
contentType
contentType属性指定jsp页面的mime和编码格式
pageEcoding
pageEncoding属性用来指定jsp文件的编码格式
import
在jsp中引入java的包和类,多个包之间以逗号隔开
1.2.2 include指令
将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句
1.2.3 taglib指令
使用标签库定义新的自定义标签,在jsp页面中启用定制行为② 注释
格式:<%-- jsp语法注释 --%>作用: 客户端查看源码式看不到该注释
③ 脚本
格式:<% %>
作用:可以在代码块中编写java代码
④ 声明
格式:<%! %>
作用:在这个结构中,可以定义变量,也可以定义方法
⑤ 表达式
格式:<%= %>
作用:用来变现数据,访问当前作用于数据或方法调用
⑥ 静态内容
html代码<%@page import="java.util.Random"%> <%@page import="java.util.Scanner"%> <%@ 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> <!-- js --> <script type="text/javascript"> //js的单行注释 /* js的多行注释 */ </script> <%-- jsp脚本代码 int a = 10; --%> <% Scanner sc = new Scanner(System.in); Random rd = new Random(); %> <% int a = 10; out.println(a); %> <!-- jsp的声明 --> <%! int b = 20; public int add(int a,int b){ return a+b; } %> <% out.println(b); out.println(add(1,2)); %> <hr/> b的结果为<%=b %> </body> </html>
<%@page import="java.text.*"%> <%@page import="java.util.Date"%> <%@ 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> 你好,今天是 <% SimpleDateFormat formater = new SimpleDateFormat("yyyy年MM月dd日"); String strCurrentTime = formater.format(new Date()); %> <%=strCurrentTime %> </body> </html>
二、jsp之表单提交方式
form提交
① get
以明文的方式通过url提交数据,数据在url中可以看到 提交的数据最多不超过2KB
安全性较低但是效率比post方式高 适合提交数据量不大 安全性不高的数据 比如:搜索 查询等功能
② post
将用户提交的信息封装在html header内 适合提交数据量大,安全性高的用户信息 比如 注册 修改 上传等功能<%@ 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> <style type="text/css"> * { padding: 0; margin: 0; } span { font-size: 10px; background-color: red; } </style> <script type="text/javascript"> function $(id) { return document.getElementById(id); } function myuser() { var user = $("user").value; var regex = /^\d{6,12}$/; if (!regex.test(user)) { $("a1").innerHTML = "用户账号在6-12位数之间"; return false; } return true; } function mypwd() { var pwd = $("pwd").value; var regex = /^\d{8}$/; if (!regex.test(pwd)) { $("a2").innerHTML = "密码必须为8位"; return false; } return true; } function mycheck() { var myuser = myuser(); var mypwd = mypwd(); if (!myuser && !mypwd) { return false; } return true; } </script> </head> <body> <div id="aa"> <form action="succes.jsp" method="post" onsubmit="return mycheck()"> <table> <tr> <td>用户名:</td> <td><input type="text" id="user" onblur="myuser()" /><span id="a1"></span></td> </tr> <tr> <td>密码:</td> <td><input type="password" id="pwd" onblur="mypwd()" /><span id="a2"></span></td> </tr> <tr> <td colspan="2"> <input type="submit" value="登录"> </td> </tr> </table> </form> </div> </body> </html>
三、 jsp内置对象
内置对象:在jsp中不需要定义,就可以直接使用的对象,这些对象是jsp转换成serlvet时,直接自动追加变量的定义
(1) out
类型:JspWriter作用:想浏览器输出内容
print/println 输出打印到页面
(2)request
类型:HttpServletRequest作用:封装请求信息的对象
getMethod 获取请求方式,get/post
getRequestURI 获取url中协议后,问号前部分的内容
getRequestURL 获取url中问号前部分的内容
getServletPath 获取url中项目名后,问号之前部分的内容
getQueryString 获取请求路径问号后部分的内容
getContextPath 获取项目名
setAttribute 设置属性
getAttribute 获取属性值
removeAttribute 移除属性值
getLocalAddr 获取服务器的地址
getCookies 获取当前请求对应的所有cookie
getSession(boolean b) 获取会话
getRequestedSessionId 获取请求对象的jsessioId
getServletContext 获取ServletContext对象
getServerPort 获取服务器的端口号
getRemoteHost 获取主机名,获取失败是,改为获取IP
getRequestDispatcher 获取转发器对象
getParameter 获取请求参数
getParameterValues 获取一个key对应的多个参数<% /* 获取表单提交的数据时,应当设置其编码格式,否则数据如果是中文在获取时会出现乱码 */ request.setCharacterEncoding("utf-8"); //getParameter 获取请求参数 返回类型 String //实现通过request对象获取表单中输入的值。 //1.获取账号 String username = request.getParameter("username"); out.println("表单输入的值为: "+username); //2.获取密码 String password = request.getParameter("password"); out.println("<br/>表单输入的值为: "+password); //getParameterValues 获取一个key对应的多个参数 //获取多个值 复选框可以选中多个值 String[] hobbys = request.getParameterValues("hobby"); out.println("<br/>您选择的爱好如下: "); if(hobbys!=null){ for(String hb:hobbys){ out.println(hb); } }else{ out.println("没有选中爱好"); } %>
(3)response
类型:HttpServletResponse作用:封装响应信息的对象
(4)session
类型:HttpSession作用:封装个会话信息对象
(5)application
类型:ServletContext作用:封装servlet上下文对象(针对整个工程的全局对象)
(6)pageContext
类型:PageContext作用:当前页面域,是用来管理其它内置对象的
(7)page
类型:Object作用:页面本身
(8)config
类型:ServletConfig作用:针对当前页面生成servlet
(9)exception
类型:Throwable作用:封装异常信息(这个对象只会出现在errorPage中)
<%@ page language="java" contentType="text/html; charset=GBK" %> <html> <head> <title>数值</title> </head> <body> <% int[] value = { 60, 70, 80 }; for (int i = 0; i < value.length; i++) { out.println(value[i]); %> </body> </html>