目录

1. 什么是JSP

2. JSP为什么会出现

3.JSP中如何嵌套java代码

示例

jsp中的注释

4. JSP的原理

5. JSP的内置对象

1、request对象

2、response对象

3、session对象

4、application对象

5、out 对象

6、pageContext 对象

7、confifig 对象

8、page 对象

9、exception 对象

6. JSP的指令

(1)Page指令

(2) Include指令

(3)Taglib指令

7. JSP出现的状态码

8. EL表达式 (只负责取值)

(1)什么是Expression Language 表达式语言

(2)EL表达式语法

(3)EL中基础操作符

示例

9. JSTL

(1) 什么是JSTL

(2) JSTL的作用和语法格式

(3) 核心标签

示例

示例

作业

JAVA部分

servlet部分

JDBC连接池

数据库部分

前端部分

JSP部分

配置文件web.xml


1. 什么是JSP

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传 统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为 (*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。

  • .html 静态页面(包含固定的页面内容)

  • .jsp 动态页面(页面数据可以动态更新,支持嵌套java代码和html代码)

2. JSP为什么会出现

1.servlet展示信息的不方便,引入了JSP。

2.JSP本质上也是一个servlet!!!!!!

3.JSP就是在HTML页面中嵌入了java代码。

3.JSP中如何嵌套java代码

答案:小脚本(<% java代码%>)

声明标签 <%!变量或者方法声明%>
表达式标签 <%= 表达式%> 在页面上显示的效果
程序代码标签 <%java代码%> 页面上动态展示内容

page指令:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

示例

<body>
​
<%! String a="测试";%> <!--成员变量-->
​
<%! public String geta(){return a;}%> <!--成员方法-->
​
a的值是<%= a%> <!--输出变量值-->
​
</body>

如果把一个数据存在request域中,取值操作如下:

jsp中的注释

<!-- html注释内容,查看源码时能看到 -->
​
<%-- jsp注释,查看页面源码时看不到 --%>

4. JSP的原理

当浏览器访问http://localhost:8080/day9_1/index.jsp。服务器发现后缀为.jsp,它会根据路径找到index.jsp文 件,会将index.jsp翻译成index_jsp.java文件,对这个java文件进行编译,产生一个index_jsp.class文件,将class 文件加载运行。将JSP翻译成java文件,它是将JSP中的所有的HTML代码通过流进行输出,也就是说最终翻译成 class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的方式写回浏 览器。所以在JSP中展示出了HTML代码

5. JSP的内置对象

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、 pagecontext、confifig、page、exception

1、request对象

request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于 接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的 作用域为一次请求。

2、response对象

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。所属类型:HttpServletResponse

3、session对象

session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用 于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。HttpSession

4、application对象

application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用 中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量” ServletContext

区别:

request:单次请求

session:浏览器访问期间(会话期间)

application:服务器启动期间,所存的数据可以跨浏览器

5、out 对象

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时, 可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

示例:

out.print("<script type='text/javascript'>alert('用户名不存
​
在');location.href='index.jsp'</script>"); 

6、pageContext 对象

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、

session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用

pageContext对象。

7、confifig 对象

confifig 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfifig() 方法可以获取

一个confifig对象。当一个Servlet 初始化时,容器把某些信息通过confifig对象传递给这个 Servlet。 开发者可以在

web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

//将image路径转换成服务器端的路径
String url= config.getServletContext().getRealPath("/image"); <h1>url=<%=url %></h1>

8、page 对象

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

9、exception 对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。 exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP 页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

(1)先在可能发生错误的页面中添加errorPage属性:

<%@ page pageEncoding="utf-8"
​
errorPage="error.jsp"
​
contentType="text/html;charset=UTF-8" language="java" %>

(2) 在error.jsp页面中设置isErrorPage="true" 的属性

(使用exception对象之前,需要先将当前页面设置成错误页面)

<%@ page language="java" isErrorPage="true" import="java.util.*" pageEncoding="UTF-8"%> 

jsp的作用域:

pageContext -> request -> session -> application

当前页面 单次请求有效 当前会话期间 服务器运行期间有效

6. JSP的指令

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

语法格式如下:

<%@ directive attribute="value" %>
​
directive:指令名称 attribute 属性名 value:属性值
指令名称 描述
page 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
include 包含其他文件
taglib 引入标签库的定义

(1)Page指令

Page指令为容器提供当前页面的使用说明一个JSP页面可以包含多个page指令

Page指令的语法格式:

<%@ page attribute="value" %>

属性名 属性值 描述
language java 解释该JSP文件时采用的语言,一般为java语言,默认为java
extends 任何类的全名 编译该JSP文件时继承哪个类,JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init、destroy等方法
import 任何包名、类名 引入该JSP中用到的类、包等,import是唯一可以声明多次的page指令属 性,一个import可以引用uogelei,中间用英文逗号隔开<%@ pageimport=包名.类名,包名.类名%>
session true、 false 该JSP内是否内置Session对象,如果为true,则内置Session对象,可直接 使用,否则反之,默认为true
autoFlush true, false 是否运行缓存,如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存到缓存里,缓存满了或者程序行完毕或者执行out.flflush()操作时才到客户端,默认为true。
buffffer none或者数字KB 指定缓存大小,当autoFlush设为true时有效,例如<%@ page buffffer=10kb%>
isThreadSafe true, false 是否线程安全,如果为true,则运行多个线程同时运行该jsp程序,否则只 运行一个线程,其余线程等待,默认为false
isErrorPage true, false 指定该页面是否为错误显示页面,如果为true,则该JSP内置有一个 Exception对象exception,可直接使用,否则没有,默认为false
errorPage 某个JSP页面的相 指明一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到 errorPage指定的页面,errorPage指定的页面通常isErrorPage属性为true,且内置的exception对象为未捕捉的异常
contentType 有效的 文档类 客户端浏览器根据该属性判断文档类型,例如 HTML格式为text/html、纯 文本格式为text/plain、JPG图像为image/jpeg、GIF图像image/gifWORD文档为application/msword,该属性常跟着charset设 置编码一起,作用是通知服务器和浏览器都使用同一个码表
pageEncoding UTF- 8,ISO-88591等  

(2) Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好

像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="文件相对 url 地址" %> 

include 指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

(3)Taglib指令

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

<%@ taglib uri="uri" prefix="" %>

uri属性确定标签库的位置,prefifix属性指定标签库的前缀(可自定义)。

7. JSP出现的状态码

8. EL表达式 (只负责取值)

(1)什么是Expression Language 表达式语言

最初定义于JSTL1.0部分

在JSP2.0中,EL从JSTL中剥离出来,放置在JSP规范中,称为JSP2.0规范的一部分

在JSP中使用EL表达式,可以简化对象和变量的访问是EL表达式

(2)EL表达式语法

语法格式:${需要展示信息的名字}

注意:

当表达式没有指定变量或者对象的范围时,

那么容器会依次从pageContext—>request—>session—>application中查找该变量或对象,我们可以通过隐含

对象获得指定作用域的值:

pageScope对象,用于获取当前页面的属性值

requestScope对象,用于获取请求范围的属性值

sessionScope对象,用于获取会话范围的属性值

applicationScope对象,用于获取程序范围的属性值

语法:

${requestScope.key}

(3)EL中基础操作符

示例:

单个变量:${a+10}<br>
​
单个变量:${s}<br>
​
单个对象:${key.属性名}
​
//对象类型
​
Users u=new Users();
​
u.setName("王老五");
​
u.setPass("abc");
​
pageContext.setAttribute("u1",u);
​
user.name=${u1.name}
​
user.pass=${u1.pass}
​
// list集合对象:
​
List list=new ArrayList();
​
list.add("刘能");
​
list.add(30);
​
list.add(u);
​
pageContext.setAttribute("list2",list);
​
list1=${list2[0]}<br/>
​
list2=${list2[1]}<br/>
​
list3=${list2[2].pass}<br/>
​
// map集合:
​
k1=${map1.k1}<br>
​
k2=${map1.k2.username}--- ${map1.k2.password}
​
判断变量是否有值或是否存在:${empty key值}
​
List list2=new ArrayList();
​
list2.add("aa");
​
request.setAttribute("list222",list2);
​
判断list中是否有数据:${empty list222}

示例

<body><% int k=20;request.setAttribute("k1",k);Users users = new Users();users.setUserId(1012);users.setUserName("小明");request.setAttribute("u1",users);%>单个变量:${k1}<br>uid=${u1.userId}uName=${u1.userName}${(10+20)<50}
</body>

9. JSTL

(1) 什么是JSTL

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还 提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。核心标签 格式化标签 sql标签 xml标签 jstl函数(后面详细 解释)

(2) JSTL的作用和语法格式

作用:简化jsp页面编写代码

语法格式:

  1. 下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

  2. 在JSP页面中引入<%@ taglib prefifix=”页面使用的名称” uri=”功能范围的路径”%>

功能范围 Uri 前缀
core http://java.sun.com/jsp/jstl/core c
i18n http://java.sun.com/jsp/jstl/fmt fmt
sql http://java.sun.com/jsp/jstl/sql sql
xml http://java.sun.com/jsp/jstl/xml x
functions http://java.sun.com/jsp/jstl/function fn

(3) 核心标签

①核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

② 核心标签的分类

表达式操作 out、set、remove、catch

流程控制 if、choose、when、otherwise

迭代操作 forEach、forTokens

URL操作 import、param、url、redirect

Set标签

<c:set> 主要用来将变量存储至JSP范围中 或是JavaBean的属性或Map对象中

<c:out>主要用来显示数据的内容

<c:remove> 主要负责移除变量

<c:if> 主要用于进行if判断,如果为true,则输出标签体中的内容

<c:choose>,<c:when>,<c:otherwise> 作用相当于if-else

<c:forEach> 循环控制,它可以将数组,集合(Collection)中的成员循序浏览一遍。

示例

<head><title>Title</title><h1>删除前</h1><c:set value="c-set的值" var="str" scope="request"></c:set>str=${str}<br>str=<c:out value="${str}"></c:out><c:remove var="str" scope="request"></c:remove><h1>删除后</h1>str=${str}<br>str=<c:out value="${str}"></c:out><h1>if</h1><c:set var="age" value="23" scope="request"></c:set><c:if test="${age>18 and age<30}">青年</c:if>
​<h1>c:choose</h1><c:choose><c:when test="${age<18}">未成年</c:when><c:when test="${age<30}">青年人<br></c:when><c:otherwise>其他人</c:otherwise></c:choose>
​<%List list = new ArrayList();list.add(100);list.add(new Users());request.setAttribute("alist",list);%><c:forEach items="${alist}" var="va" varStatus="sta">${sta.count}---${sta.index}---${va}<br></c:forEach>
</head>

(4)格式化标签

1、fmt:formatDate 作用:将日期类型格式化为指定模式的字符串

属性

value:将要被格式化的数据

pattern:格式化的模式,与SimpleDateFormat的参数设置一样

var:格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在页面

scope:变量存放的域属性空间,默认page

type:其取值为date、time、both,表示给出的value是日期、时间、还是两者都包含,默认是date

2、fmt:parseDate 作用:用于将指定字符串转化为日期类型

Value服务器获取的时间

Pattern:转换的格式

Var:页面显示的变量

3、fmt:formatNumber 按照指定格式对数字进行格式化

属性

maxIntegerDigits:整数部分最多的位数

minIntegerDigits:整数部分最少的位数

maxFrctionDigits:小数部分最多的位数

minFrctionDigits:小数部分最少的位数

var:存储格式化结果的变量

scope:var属性的作用域

integerOnly:是否只解析整型数true或者浮点数false

示例

<body><%request.setAttribute("day",new Date());request.setAttribute("myDate","2000-1-1");request.setAttribute("num","123.4567");%><h1>日期:<fmt:formatDate value="${day}" pattern="yyyy-MM-dd"></fmt:formatDate> </h1><h1>日期2:<fmt:parseDate value="${myDate}" pattern="yyyy-MM-dd"></fmt:parseDate> </h1><h1>num=<fmt:formatNumber value="${num}" maxFractionDigits="2"></fmt:formatNumber> </h1>
</body>

作业

JAVA部分

servlet部分

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;/*** @Author: 李梓豪* @Description:* @Date Created in 2020-11-09 16:08*/
public class Servlet extends HttpServlet {static MysqlDatebaseUse mysqlDatebaseUse = new MysqlDatebaseUse();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理post请求//一定要在接收参数的前面req.setCharacterEncoding("utf-8");//接收参数String account = req.getParameter("account");String password = req.getParameter("password");String confirmPassword = req.getParameter("confirmPassword");System.out.println("账号:"+account);System.out.println("密码:"+password);System.out.println("------正在访问数据库-----");// 配合<script type="text/javascript">使用,防止后台输出到前端的代码乱码resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8;");//JDBC部分try {Connection conn = DruidUtil.getConnection();boolean exist = mysqlDatebaseUse.select(conn, account);if (exist) {System.out.println("帐号已存在");//帐号已存在PrintWriter writer = resp.getWriter();writer.write("<script type=\"text/javascript\">alert('帐号已注册,请输入新的邮箱帐号'); location.href='/index.jsp'</script>");writer.close();} else if (!password.equals(confirmPassword)) {PrintWriter writer = resp.getWriter();writer.print("<script>alert('两次密码输入不一致');</script>");} else {boolean insert = mysqlDatebaseUse.insert(conn, account, password);if (insert) {System.out.println("插入数据库成功");PrintWriter writer = resp.getWriter();writer.print("<script type=\"text/javascript\">alert('注册成功'); location.href='/index.jsp' </script>");} else {System.out.println("插入语句失败");}}}catch (Exception e){e.printStackTrace();System.out.println("访问失败");}}@Overridepublic void destroy() {System.out.println("-----HttpServlet进程已消毁----");}@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("初始化");}
}

JDBC连接池

import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;/*** @Author: 李梓豪* @Description:* @Date Created in 2020-11-09 15:49*/
public class DruidUtil {private static DataSource data ;static {try {//创建properties对象Properties ppt = new Properties();//得到输入流InputStream is = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");//加载输入流ppt.load(is);//使用properties对象参数,创建连接池data = DruidDataSourceFactory.createDataSource(ppt);} catch (Exception e) {e.printStackTrace();}}/*** @Author 李梓豪* @Description  用于从DBCP连接池中 获取一个连接* @Date 2020年11月09日  15:11:33* @Param []* @return java.sql.Connection  DBCP连接池中的一个连接对象* @Date Modify in 2020年11月09日  15:11:33* @Modify Content:**/public static Connection getConnection() {try {return data.getConnection();} catch (SQLException e) {e.printStackTrace();return null;}}/*** @Author 李梓豪* @Description   用于释放连接 , 执行环境 , 结果集 等资源* @Date 2020年11月09日  15:11:15* @Param [conn, state, result]*  @param conn 要释放的连接资源* @param state 要释放的执行环境资源* @param result 要释放的结果集资源* @return void* @Date Modify in 2020年11月09日  15:11:15* @Modify Content:**/public static void close(Connection conn, Statement state, ResultSet result) {if(result != null) {try {result.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(state != null) {try {state.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(conn != null) {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
}

数据库部分

import java.sql.*;/*** @Author: 李梓豪* @Description:* @Date Created in 2020-11-09 17:22*/
public class MysqlDatebaseUse {public MysqlDatebaseUse() {}//    public static  boolean creatTable(Connection connection){
//        Statement statement = null;
//        try {
//            statement = connection.createStatement();
//            statement.execute("CREATE TABLE  if not exists JSP(account varchar(20) not null primary key,passwprd varchar(20))engine=innodb default charset=utf8;");
//        } catch (SQLException throwable) {
//            throwable.printStackTrace();
//            System.out.println("表格创建失败");
//        }
//        System.out.println("表格创建成功");
//        return true;
//    }public  boolean select(Connection connection ,String account){Statement statement = null;ResultSet result = null;String acc = "";System.out.println("开始查询");try {statement = connection.createStatement();System.out.println("创建对象");result = statement.executeQuery("select * from jsp;");System.out.println("获取已注册用户列表成功");while (result.next()){acc = result.getString("account");if(acc.equals(account)){return true;}}} catch (SQLException throwable) {throwable.printStackTrace();}finally {try {statement.close();} catch (SQLException throwable) {throwable.printStackTrace();}}return false;}public  boolean insert(Connection conn ,String account, String password){PreparedStatement prestatement = null;try {//预编译,解决SQL注入问题prestatement = conn.prepareStatement("insert into jsp values(?,?)");prestatement.setString(1,account);prestatement.setString(2,password);prestatement.executeUpdate();}catch (SQLException throwable){throwable.printStackTrace();return false;}finally {try {prestatement.close();} catch (SQLException throwable) {throwable.printStackTrace();}}return true;}
}

前端部分

JSP部分

<%@ page import="java.sql.Connection" %>
<!DOCTYPE html>
<%@page pageEncoding="UTF-8"%>
<html lang="en"><head><meta charset="UTF-8"><title>JavaScript语言实例</title></head><body><h1 id="hid" align="center">新帐号注册</h1><!--οnsubmit="return false"表示不跳转页面--><form action="/login" name="myform" method="post" onsubmit="return doSubmit()">
<!--            onblur="checkUname()":当鼠标离开名字输入框时就验证输入是否正确-->帐号:<input type="text" name="account" onblur="checkUname()"/><span style="font-size:8px;color:#ddd;" id="s1">请输入邮箱作为帐号</span><br/><br/>密码:<input type="password" name="password" onblur="checkUpass()"/><span style="font-size:8px;color:#ddd;" id="s2">请输入6-18位任意字符的密码</span><br/><br/>请确认密码:<input type="password" name="confirmPassword" onblur="checkConfirmPassword()"/><span style="font-size:8px;color:#ddd;" id="s3"></span><br/><br/>
​<button type="submit" value="" style="width: 50px; height: 30px;">提交</button><button type="reset" value="" style="width: 50px; height: 30px;">重置</button></form>
​</body><script>const s1 = document.getElementById("s1");const s2 = document.getElementById("s2");const s3 = document.getElementById("s3");
​function spanColor(colors) {document.getElementById(colors).style.color="red";}
​//表单提交事件处理程序function doSubmit() {if(checkUname()&&checkUpass()&&checkConfirmPassword()){return true;}else {return false;}}
​//验证帐号function checkUname() {const account = document.myform.account.value;const regEmail = /^\w+@\w+(\.\w+){1,2}$/;const red = spanColor("s1");if(account ===""){s1.innerText="请输入帐号";red;return false;}else if(!regEmail.test(account)){s1.innerText="请输入正确的邮箱地址"red;return false;}else {s1.innerText ="";return true;}}//验证密码function checkUpass() {const password = document.myform.password.value;const re = /^.{6,18}$/;const red = spanColor('s2');if(password ==""){s2.innerText="请输入密码";red;return false;}else if (password.length < 6 ||password.length > 18){s2.innerText="格式错误,长度应为6-18个字符";red;return false;}else if (re.test(password)){s2.innerText ="";return true;}}
​//验证确认密码function checkConfirmPassword() {var red = spanColor("s3");var password = document.myform.password.value;var confirmPassword = document.myform.confirmPassword.value;if(confirmPassword==""){s3.innerText="请输入确认密码";red ;return false;}else if(password != confirmPassword){s3.innerText="两次密码输入不一致";red ;return false;}else {s3.innerText ="";return true;}}</script>
</html>

配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>Servlet</servlet-name><servlet-class>Servlet</servlet-class><init-param><param-name>myencoding</param-name><param-value>utf-8</param-value></init-param></servlet><servlet-mapping><servlet-name>Servlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>
</web-app>

JavaWeb技术之JSP相关推荐

  1. Java界面排号系统_【前端系统】javaweb技术的医院门诊在线预约及排号管理系统的实现...

    描述 本系统着力于实际生活需求,介绍基于javaweb技术的医院预约门诊挂号系统信息化软件工程思想,分析设计与实现该系统的需求.力在解决医院门诊优化,看诊用户挂号等待时间长问题,优化门诊效率,从而提高 ...

  2. 走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  3. 【JavaWeb】JavaWeb与JavaWeb技术栈

    JavaWeb与JavaWeb技术栈 1.JavaWeb概述 1.1 Web和JavaWeb的概念 1.2 什么是服务器与客户端 1.2.1 线下的服务器与客户端 1.2.2 线上的服务器与客户端 1 ...

  4. 走进JavaWeb技术世界16:极简配置的SpringBoot

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. javweb音乐网站_基于JavaWeb技术的音乐网站的设计与实现.doc

    基于JavaWeb技术的音乐网站 的设计与实现 本科毕业设计 目录1 1.1 课题研究背景与意义1 1.2 音乐网站的研究现状2 1.3 本论文的结构和主要工作2 第二章 系统环境概述2 2.1 开发 ...

  6. 基于JavaWeb技术实现宿舍管理系统

    基于JavaWeb技术实现宿舍管理系统 技术介绍 系统采用三层架构设计开发,页面是JSP技术.jQuery和EasyUI框架,数据库是mysql,数据层访问使用MyBatis框架. 运行环境 JDK1 ...

  7. JavaWeb:JavaWeb技术架构演进

    Java Web,是用 Java 技术来解决相关web互联网领域的技术栈.web 包括:web 服务端和 web 客户端两部分.Java 在客户端的应用有 Java Applet,不过使用得很少,Ja ...

  8. javaWeb学习笔记 --- JSP

    JSP jsp概述 由SUN公司提供的动态web资源的开发技术,看起来非常像html,但是可以在JSP页面中写java代码,所以JSP是一种动态web资源开发技术 JSP技术的由来 JSP的出现是为了 ...

  9. mysql jsp分页技术_一个非常简单的分页技术MYSQL JSP 利用了mysql的LIMIT参数

    一个非常简单的分页技术MYSQL JSP 利用了mysql的LIMIT参数 优点:1自己想出来的 2利用了MYSQL 数据库的本身 LIMIT 缺点:现在仅仅实现了 下一个页面功能 <% int ...

最新文章

  1. Anaconda入门使用指南(二)
  2. python布尔系列_python数据分析类库系列-Numpy之布尔型索引
  3. mysql 创建定时器
  4. 剑指offer第12题打印从1到n位数以及大整数加法乘法
  5. UI5 plugin - uploadCollection
  6. I Got a Matrix!
  7. 【转】基于XML-RPC的BloggerAPI学习
  8. 如何查看jar包的版本号?
  9. 基于Java jsp+mysql+Spring的汽车出租平台租赁网站平台设计和实现
  10. 数据结构:列表(双向链表)的了解与示例
  11. 七月算法机器学习 6 特征工程 小案例
  12. Atitit.工作流系统的本质是dsl 图形化的dsl  4gl
  13. 《C语言程序设计(第五版)》---谭浩强——习题解答第一章
  14. 如何使用低代码开发平台实现出入库管理
  15. 如何在Mac上减少PDF文件大小
  16. php微信摇一摇开发文档,摇一摇事件通知
  17. Web实现:flex弹性布局三栏自适应布局
  18. 多台Linux服务器时钟同步
  19. 大学计算机系学unity,上海交通大学计算机科学与工程系(CSE)
  20. Excel分类汇总2个维度的结果,1个计数1个求和

热门文章

  1. Discuz蜘蛛统计seo插件-蜘蛛统计插件
  2. PDF分割与合并(充分利用Spire的bug实现操作PDF)
  3. dell自带的测试软件,自带校色仪!戴尔万元显示器上手:告诉你什么叫专业
  4. 30个计算机相关的英语词汇,计算机应用常用英语词汇30
  5. JavaScript中的对象的属性名和属性值
  6. 数据库的学习笔记(一)
  7. JAVA 导入数据到Elasticsearch中
  8. SSM在线电影平台 在线观看电影平台 电影推荐平台系统Java Vue MySQL数据库 远程调试 代码讲解
  9. 翻译《Pro SQL Server Internals,2nd edition》的CHAPTER 3 Statistics的Introduction to SQL Server Statistics等
  10. python中合并excel表格