一.HTML表单
1.<form name="myform">
2 <input name="user" type="text"/><br/>
3 <input name="passwd" type="password"/><br/>
4 <input type="submit" value="提交" onclick="check()"/>
5 </form>
JavaScript获取表单元素
// 方法一
document.forms[i].elements[i] //获取第i+1个表单内的第i+1个元素
// 方法二
document.getElementById("id") //id是要访问元素标签的id
// 方法三
/*formName是表单name值,ElementName是表单内元素的name值*/
document.formName.ElementName
二. 正则表达式
- 创建正则表达式
//方法一
var exp1 = new RegExp("正则表达式");
var exp2 = new RegExp("正则表达式","i");
var exp3 = new RegExp("正则表达式","ig");//i忽略大小写,g全局匹配`
//方法二
var exp = /正则表达式/;
var exp = /正则表达式/ig; //i忽略大小写,g全局匹配
- RegExp的方法
- boolean test(String) 测试模式匹配,返回true或false
var pattern = new RegExp("java","i");
var str = "I like java.";
alert(pattern.test(str)); //返回true
- String[] exec(String) 执行匹配搜索,返回null或长度为1的数组
var pattern = /java/ig;
var str = "I like java,also like javaScript.";
alert(pattern.exec(str)); //返回java
- String replace(pattern,String) 将符合pattern的字串替换为新的字符串
var regExp = new RegExp("\\d+","g");
var str = "123abc345de434fg";
//方法一
alert(str.replace(regExp,"#")); //返回#abc#de#fg
//方法二
alert(str.replace(/\d+/,"#")); //同样返回#abc#de#fg
- 元字符
例:
- 检测账号实例
<script language="JavaScript">
function check(){
//检测输入的账号是否只含字母数字和下划线,并只有6到8位。
var user = document.myform.user.value;
//var reg = new RegExp("\^\\w\{6,8\}\$");//方法2
var reg = /^\w{6,8}$/;
if(reg.test(user)){
alert("格式正确!");
}else{
alert("格式错误,请重新输入!");
}
}
</script>
邮箱
var p = /^([a‐zA‐Z0‐9_‐])+@([a‐zA‐Z0‐9_‐]+((\.[a‐z]{2,8}){1,2})
$/;
电话
var p = /^((0[1-9][0-9]-)?[1-9][0-9]{7}|(0[1-9][0-9]{2}-)?([1-9][0-9]{6,7}))$/;
邮编
var reg=/^\d{6}$/;
三. JQuery基本使用
- 引入JQuery
<script type="text/javascript" src="js/jquery-2.1.0.js" />
- 使用
<input type="text" id="emp" class="c1" name="emp">
- 获取值
$('#emp').val(); //#号是根据id
$('.c1').val(); //.号是根据class
- 设置css样式
$('#emp').css("color","red");
- 设置文本
$('#emp').text("这是纯文本");
$('#emp').value("这是纯文本");
- 设置html代码
$('#emp').html("这是Html文本");
- 注入函数
$(document).ready(function() { //js代码 });
$(function() { //js代码 }); //上式简写
$('#emp').click(function() { //js代码 });
$('#emp').blur(function() { //js代码 });
五. JSP
- Tomcat简介
JSP和Servlet引擎,主要处理JSP和Servlet。JSP其实就是XML文件的改造版本,经过引擎处理,变成一个Java类。
那么Tomcat和Apache服务器有何区别呢?Apache主要负责静态页面的处理,Tomcat主要处理动态的部分。
2. 动态WEB工程目录结构
3. JSP页面中编码设置
打开html文件,在顶部添加编码集:UTF-8
<%@page contentType="text/html;charset=UTF-8" %>
再修改html扩展名为jsp
4. JSP页面元素
JSP由静态元素和动态元素组成
- JSP动作
<body>
<jsp:include flush="false" page="userInfo.jsp">
<jsp:param name="name" value="张三"/>
</jsp:include>
</body?
- JSP 脚本元素
声明
在<%! … … %>中声明的变量、方法、类,在整个jsp文件内都有效,是全局的
<BODY >
<!-- 计数器程序,两个方法结果不同,仔细观察,方法一是全局的所以每次刷新值都会在上一次的基础上增加,而方法二一直等于1 -->
<!-- 方法一 -->
<%! int i=0; %>
<% i++; %>
<P>您是第 <%=i%>个访问本站的客户。
<!-- 方法二 -->
<% int i=0; %>
<% i++; %>
<P>您是第 <%=i%>个访问本站的客户。
</BODY>
例2
<BODY>
<%!
long continueSum(int n)
{ int sum=0;
for(int i=1;i<=n;i++)
sum=sum+i;
return sum;
}
%>
<P>1到100的连续和:<BR>
<% long sum;
sum=continueSum(100);
out.print(sum);
%>
</BODY>
JAVA表达式
用于在页面上输出信息,语法格式如下
<%= expression %> 或<%= 表达式 %>
<BODY>
<p> Sin(0.9)除以3等于
<%=Math.sin(0.90)/3%>
<p>3的平方是:<%=Math.pow(3,2)%>
<p>12345679乘72等于
<%=12345679*72%>
<p> 5的平方根等于 <%=Math.sqrt(5)%>
<p>99大于100吗?回答:<%=99>100%>
</BODY>
- JSP指令
page指令
<%@ page language = "java" import ="java.util.*"
buffer = "8kb" errorPage="error.jsp" isErrorPage="false"%>
<html>
<head>
<title> 测试 page 指令</title>
</head>
<body>
<h1> 这是一个测试页面</h1>
</body>
</html>
include指令
include 指令用于在运行时将 HTML文件或 JSP页面嵌入到另一个 JSP页面
include 指令语法
<%@ include file = “文件名” %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@include file="head.jsp"%>
<html>
<head>
<title>include 指令</title>
</head>
<body>
<h4 align="center">你好,欢迎您!</h4>
</body>
</html>
taglib指令
taglib指令可以让Jsp页面使用标签
taglib指令的作用是在Jsp页面中,将标签库描述符文件引入到该页面中,并设置前缀,利用标签的前缀去使用标签库表述文件中的标签
语法
<%@ taglib uri = “标签库表述符文件” prefix = “前缀名” %>
<html>
<body>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
</body>
</html>
<c:out value="${param.name}" default="!"/>
<c:set var="username" value="jack" scope="session"/>
<c:if test="${stu.age<18}" var="young">对不起</c:if>
<c:choose>
<c:when test="${c.color eq 'red'}">颜色:<c:out value="${c.color}"/></c:when>
<c:otherwise>颜色:<c:out value="${c.color}"/></c:otherwise>
</c:choose>
<c:forEach var="user" items="${users}">
<c:out value="${user.name}"/>
<c:out value="${user.pwd}"/>
</c:forEach>
<c:redirect url="${test}"/>
<c:forTokens ……>
……..
5. JSP9大对象
1. request对象
表示客户端对网页的请求
实现 javax.servlet.http.HttpServletRequest接口
使用HTTP 协议处理客户端的请求
request对象常用方法
String getParameter(String name)
根据页面表单组件名称获取请求页面提交数据(如文本框、密码框、单选框、下拉框等)
例:
<body>
<form action="" name="myForm" method="get">
<input type="text" name="myText" id="123" />
<input type="submit" value="提交" onclick="checkCode()"/>
</form>
<%!
public String formatStr(String str){
return str==null?"":str;
}
%>
<%
//request.setCharacterEncoding("UTF-8");//post请求时要转换编码
String name=formatStr(request.getParameter("myText"));
out.println(name);
%>
</body>
前台发送数据时,在form中指定发送方式有post和get
get不用转换编码;post要转换
String[] getParameterValues (String name)
获取页面请求中一个表单组件对应多个值时的用户的请求数据(如复选框)
void setAttribute(String name, Object value)
Object getAttribute(String name)
2.response 对象
处理 JSP 生成的响应
将响应发送给客户端
实现javax.servlet.http.HttpServletResponse 接口
使用 HTTP 协议将响应发送给客户端
response 对象常用方法
void setContentType (String name)
设置作为响应生成的内容的类型和字符编码
void sendRedirect (String name)
发送一个响应给浏览器,指示其应请求另一个URL
<%
response.setContentType("text/html;charset=utf-8");
response.sendRedirect("response1.jsp");
%>
3. out 对象
表示输出流
javax.servlet.jsp.JspWriter 类的实例
使用 write()、print() 和 println() 方法
<%
out.print("欢迎来到 JSP:隐式对象") ;
out.write("欢迎来到 JSP:隐式对象") ;
%>
4. session 对象
Web 服务器为单个用户发送的多个请求创建会话
存储有关用户会话的所有信息
javax.servlet.http.HttpSession 接口的实例
session 对象最常用的方法有:
void setAttribute(String name,Object value)
以键/值的方式,将一个对象的值存放到session 中
<%
session.setAttribute("name", "admin");
%>
Object getAttribute(String name)
根据名称去获取session中存放对象的值
<%
if(session.getAttribute("name")!=null)
{
String name = (String)session.getAttribute("name");
}
%>
5. application 对象
表示 JSP 页面所属的应用程序
应用程序的 JSP 页面组合起来形成一个应用程序
javax.servlet.ServletContext接口实例
application对象最常用的方法同session
<%
application.setAttribute("ChartRecord", "hihi");
%>
<%
if(application.getAttribute("ChartRecord")!=null)
{
String chartRecord =
(String) application.getAttribute("ChartRecord");
}
%>
6. pageContext 对象
页面上下文,用于访问jsp之间的共享数据
可访问page,request,session,application范围变量
javax.servlet.jsp.PageContext 类的实例
pageContext对象最常用的方法有
void setAttribute(String name,Object value)
以键/值的方式,将一个对象的值存放到pageContext中
void setAttribute(String name,Object value, int scope)
scope为作用域范围,取值如下:
PageContext.PAGE_SCOPE(没实用性)
PageContext.REQUEST_SCOPE
PageContext.SESSION_SCOPE
PageContext.APPLICATION_SCOPE
Object getAttribute(String name)
根据名称去获取pageContext中存放对象的值
Object getAttribute(String name, int scope)
scope为作用域范围,取值如上
<%@ page pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("page","page");
//pageContext.setAttribute("page","page",PageContext.PAGE_SCOPE); //同上步
pageContext.setAttribute("request","request",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("session","session",PageContext.SESSION_SCOPE);
pageContext.setAttribute("application","application",PageContext.APPLICATION_SCOPE);
//本页接收
out.println(pageContext.getAttribute("page"));
out.println(pageContext.getAttribute("request"));//null
out.println(pageContext.getAttribute("request",PageContext.REQUEST_SCOPE));//request
out.println(pageContext.getAttribute("session"));
out.println(pageContext.getAttribute("session",PageContext.SESSION_SCOPE));
out.println(pageContext.getAttribute("application"));
out.println(pageContext.getAttribute("application",PageContext.APPLICATION_SCOPE));
//其他页能否接收?
%>
7. page 对象
使用 page 对象可以访问 Servlet 类的所有变量和方法
java.lang.Object类的一个实例
<% @ page info="我的信息"
contentType="text/html;charset=UTF-8"%>
<html>
<body>
<%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>
</body>
</html>
8. config 对象
存储在编译 JSP 页面的过程中创建的 Servlet 的信息
javax.servlet.ServletConfig 接口的实例
提供了检索 Servlet 初始化参数的方法
//config对象获取初始化参数
String propertyFile
=(String)config.getInitParameter("PropertyFile");
9. exception 对象
exception对象用于处理 JSP 页面中的错误
exception对象用于访问执行JSP 的过程中引发的异常
exception 对象是 java.lang.Throwable 类的实例
设置将IE,取消“显示友好http错误信息”
<%@ page isErrorPage="true" %>
<html>
<head><title> 处理错误 </title></head>
<body>
<% if ( exception != null )
{
out.write("\n 发生错误。\n");
}
else
{
out.write("\n 您已访问此页面,
但是没有可用的错误信息\n");
}
%>
</body>
</html>
总结
JavaBean 是可在多个应用程序中重复使用的组件
JSP 标准动作用于插入文件、Bean 组件以及将用户转至其他网页
forward 动作用于将用户的请求转发给其他页面
include 动作用于将一个页面嵌入当前 JSP 页面
JSP隐式对象一般分为输入/输出对象、作用域通信对象 、Servlet 对象 和错误对象四类
JSP 中的隐式对象包括 page、config、request、response、out、session、application、pageContext 和 exception
JSP 定义的作用域包括 page、request、session 和 application
- JavaBean 是可重用组件
优点:可重用组件,可在多个应用程序中使用,可以跨平台
package a;
public class Person
{
private String name;//将 name 属性声明为私有属性
//get() 方法返回一个值
public String getName()
{
return name;
}
//set() 方法设置一个值
public void setName(String myname)
{
name = myname;
}
}
JSP动作调用JavaBean
JSP 可使用 JSP 标准动作调用 JavaBean 组件并访问属性
将 JavaBean 嵌入 JSP 页面
设置和获取 JavaBean 的属性
标准动作中的属性区分大小写
JSP 中的标准动作使用 作为前缀
JSP标准动作
(1) useBean动作
//创建引用并嵌入现有的 Bean
//id 属性创建对 class 属性中所述类的引用
<head>
<jsp:useBean id="p" class="Person" scope="page"/>
</head>
(2) setProperty/getProperty动作
Name 属性指定对 JavaBean 类的引用
Property 属性指定 JavaBean 的属性名称
<head>
<jsp:useBean id="p" class="Person" scope="page"/>
<jsp:setProperty name="p" property="name" value="zhangsan"/>
</head>
<body>
获取 JavaBean 中指定的属性的值
<jsp:getProperty name="p" property="name"/>
</body>
(3) forward动作
将用户的请求转发给其他 JSP 页面
page 属性指定其他页面的地址
<body>
<jsp:forward page="second.jsp"/>
</body>
(4) include动作
将其他 JSP 中的内容或页面嵌入到指定的页面
page 属性指定其他页面的地址
<%@page contentType="text/html;charset=UTF-8" %>
<jsp:include page="top.jsp" flush="true">
<jsp:param name="name" value="zhangsan"/>
</jsp:include>
使用coe模板中common下的头、尾文件<br>
<jsp:include page="down.html" flush="true"/>
六. Servlet
简单Servlet的结构
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ClientServlet extends HttpServlet
{
protected void doGet(HttpServletRequest
request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out= response.getWriter();
out.println("<html><body> 您好!</body></html>");
}
}
Servlet 的生命周期
Servlet和表单的交互
通过HttpServletRequest接口
Enumeration getParameterNames()
取出表单中所有控件的名称
String getParameter(String name)
取得相应名字的控件所包含的单个数据,常用
String[] getparameterValues(String name)
取得相应名字的控件所包含的一组数据
void setCharacterEncoding(“encoding”)
设置接受参数的字符集:GBK 、gb2312、UTF-8等 常用
ServletTest.java
@WebServlet("/ServletTest")
public class ServletTest extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
String user=request.getParameter("username");
String passwd=request.getParameter("passwd");
if(user.equals("张三"))
{
if(passwd.equals("123456"))
{
request.getRequestDispatcher("result.jsp").forward(request, response);
}
}
else
{
request.getRequestDispatcher("ServletTest.jsp").forward(request, response);
}
}
}
ServletTest.jsp
<form action="../ServletTest" name="inputtext" method="post">
<input type="text" name="username" /><br>
<input type="text" name="passwd" />
<input type="submit" value="提交" />
</form>
web容器的作用
提供通信支持:
容器为web服务器和Servlet/JSP提供了便捷的通信方式,不再需在服务端创建一个服务端socket
生命周期和资源管理:
容器管理Servlet生命周期,负责加载Servlet到内存,初始化Servlet,执行Servlet中的方法以及销毁Servlet
多线程支持:
容器为每个请求创建一个新的线程并当请求结束时及时摧毁线程。Servlet只有一个实例,容器并不会为每个请求生成单独的Servlet,节省了时间和空间
支持JSP:
JSP跟普通Java类还是有区别的,每个JSP页面在被容器编译后会生成对应的Servlet,然后容器就像管理Servlet一样管理它们
多任务:
容器管理资源池,做内存优化,运行gc,提供安全配置,提供多应用的支持,热部署,以及其他工作
Servlet小结
不足
开发效率低
所有的HTML标签都需使用页面输出流完成
不利于团队协作开发
美工无法参与Servlet界面开发
程序可维护性差
即便修改一个按钮的标题,也必须重新编辑Java代码
作用
load-on-startup servlet
当站点启动时可能会要求初始化一些数据,如创建临时表,加载初始信息到内存,有定时完成的任务(定时写日志,定时备份数据,定时发送邮件)
一般servlet
通常不用做输出页面功能,用于MVC模式的控制器
六. Filter 过滤器
过滤器是一个对象,它根据用户的请求和资源的响应进行过滤
七. Spring
Spring特点
轻量级(Lightweight)
Spring 核心包容量不到2MB的大小,可以在很多小型设备
中使用Spring。
非侵入性(No intrusive)
增强应用程序组件的可重用性,减少对框架的依赖。
容器(Container)
根据配置文件自动生成对象及属性等,不用编写任何代码
来产生对象。
Inversion of Control(IOC)与Dependency Injection(DI)
不必自己在程序代码中维护对象的依赖关系,只需在配置
文件中加以设定,Spring 核心容器会自动根据配置将依赖注
入指定的对象。
AOP(Aspect-oriented programming)
基于代理及拦截器的机制,与Spring IOC 结合,采用运行
时Weaving方式在Spring框架的应用程序中使用各种声明式
系统级服务。
持久层(Persistent)
Spring提供DAO、编程事务与声明式事务,对于ORM工
具(Hibernate、iBATIS)的整合及使用上简化。
Java EE服务
可以使用Java EE标准规范提供的各项服务(JNDI、Mail、
任务计划Scheduling、远程Remoting),并无缝结合。
MVC 是一种使用(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型)表示应用程序核心,如数据库操作类;
View(视图)显示数据,使用HTML、JSP完成。
Controller(控制器)处理输入,使用Servlet完成。
优点:
进行更加简洁的web层开发
天生可以和spring集成
支持灵活的URL映射
可以很方便灵活的和其他视图技术集成(如FREEMARKER)
提供了方便的数据验证机制
提供了强大的jsp标签库
对静态资源支持
八. 分页设计
使用数据库提供的定位集的SQL语句,返回特定
行数据
- MySQL数据库
limit [offset ,] rows
select * from tablename limit 开始位置,每页行数
例
Connection conn =null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql2 = "select * from Employee where emp_name like ? limit ?,?";
conn = ConnectionManager.getInstance().getConnection();
pstmt = conn.prepareStatement(sql2);
pstmt.setString(1, "%" + emp_name + "%");
pstmt.setInt(2, PAGE_SIZE * (currentPage - 1));
pstmt.setInt(3, PAGE_SIZE);
rs = pstmt.executeQuery();
insert into Employee(emp_no, emp_name) values(?,?)
delete from employee where emp_id=?
update employee set emp_no=?,emp_name=?,emp_tel_num=?,emp_addr=?,emp_email=? where emp_id=?
- SQL Server数据库
使用top命令完成分页
SELECT top 10 * FROM student
where 主键字段 not in
(select top (当前页数-1)*每页行数 主键字段 from student where xxx=yyy order by 主键字段)
where xxx=yyy order by 主键字段