B/S 全名 Browser/Server
C/S 全名 Client/Server
JSP 全名 Java Server Pages
JNDI 全名 Java Naming Directory Interface
1.URL的组成包括三部分
1.协议 2.主机名(端口号) 3.资源路径
2.Web容器处理JSP文件的三个步骤
1,翻译阶段 2,编译阶段 3,执行阶段
3.JSP页面的组成部分
1,静态内容
2.指令 <%@ %>
3.脚本元素(小脚本<% %>,表达式<%= %>,声明<%! %)
4,标准动作
1.<jsp:forward page=""></jsp:forward> //执行页面转换.将请求的处理转发到下一个页面
2.<jsp:include></jsp:include> //用于动态引入一个JSP页面
3.<jsp:param name="" value=""></jsp:param> //用于传递参数.必须与其他支持参数的标签一起使用
4.<jsp:plugin></jsp:plugin> //用于下载JavaBean或Applet到客户端执行
5.<jsp:useBean id="name" classname="classname" scope=""></jsp:useBean> //用于创建一个javaBean的实例
6.<jsp:setProperty name="" property="" value=""></jsp:setProperty> //用来设置JavaBean实例的属性
7.<jsp:getProperty name="" property=""></jsp:getProperty> //用来获得JavaBean实例的属性
5,注释(1.HTML注释<!-- 注释内容--> 2.JSP注释<%-- 注释的内容--%> 3.脚本内的java注释 单行注释// 多行注释 )
4.JSP的指令元素
<%@ language="java" import="java.util.*,java.sql.*"% contentType="text/html;charset=UTF-8" pageEncoding="utf-8" errorPage="error.jsp" isErrorPage="true" %>
//language当前JSP的编写语言
//import需要导入的包
//contentType返回到客户界面的显示方式和编码方式
//pageEncoding当前JSP页面的编码方式
//errorPage通过指定页面来显示错误的信息
//isErrorPage 通过设置true或false来设置是否显示错误的页面能否调用Exception对象来显示错误的信息
5.JSP内置对象
1.out out.print(); 用于向客户端输出数据
2.request 用于处理客户端的请求信息
1.String getParameter(String name); 根据页面表单获得页面提交的数据
2.String[] getParameterValues(String name); 获取一个页面表单组件对应多个值时的用户的请求数据
3.void setCharacterEncoding(String charset); 指定每个请求的编码,用于解决编码乱码的的问题
4.Object request.getRequestDispatcher(String path); 返回一个javax.servlet.RequestDispatcher对象,该对象的forward(request,response)方法用于转发请求
5.String getMethod(); 返回当前页面表单的提交方式
6.String getContextPath(); 返回当前Web应用的程序名
7.String getRequsetURI(); 返回应用程序后面的文件路径
8.String getRequestURL(); 返回应用程序的完整文件路径
9.String getQueryString(); 获得地址?后面的参数内容,只对get方式的表单提交有效
10.String getHeader("referer") 获得跳转到当前Servlet的路径
3.response 用于响应客户端的请求并向客户端输出信息
1.void addCookie(Cookie cookie); 在客户端添加Cookie
2.void setContentType(String type); 设置Http响应的contentType类型
3.void setCharacterEncoding(String charset); 设置相应所采取的编码类型
4.void sendRedirect(String path); 将请求重新定位到一个不同的URL
4.session 用来存储有关用户回话的信息
1.void setMaxInactiveInterval(int interval); 设定session的非活动时间
2.int getMaxInactiveInterval(); 获得session的有效活动事件.以秒为单位
3.void setAttribute(String key,Object object); 以key/value的形式来保存对象值
4.Object getAttribute(String key); 通过key来获取对象值
5.vioid removieAttribute(String key); 移除key值
6.String getId(); 获取session的Id
7.void invalidate(); 设置session对象失效
8.boolean isNew(); 检测是否为新会话对象
5.application 用来实现用户之间的数据共享
1.void setAttribute(String key,Object object); 以key/value的形式来保存对象值
2.Object getAttribute(String key); 通过key来获取对象值
3.String getRealPath(); 返回相对路径的真实路径
6.page
7.config
8.exception
9.pageContext
6.JSP外置对象
1.Cookie
1.void setMaxAge(int time); 设置Cookie的有效期.以秒为单位
2.int getMaxAge(); 获得Cookie的有效期,以秒为单位
3.void setValue(String value); 在Cookie建立后,为Cookie赋予新的值
4.String getValue(); 获取Cookie的值
4.String getName(); 获取Cookie的名称
7.数据库连接池
1.JNDI 全名 Java Naming Directory Interface
2.Environment的属性设置 <Environment name="news" value="hello word" type="java.lang.String" />
3.context.xml的Resource属性设置 <Resource
name="news" //数据源名字
auth="Container" //数据源管理方式
type="javax.sql.DataSource" //数据源类型
maxActive="100" //数据源最大访问
maxIdle="30" //数据源空闲设置
maxWait="10000" //最大等待时间
username="scott" //登录用户名
password="13717013727" //登录密码
driverClassName="oracle.jdbc.driver.OracleDriver" //驱动包名
url="jdbc:oracle:thin:@lovalhost:1521:orcl" //数据库连接路径
/>
4.web.xml <resource-ref>
<description>news</description> //对所引用资源的说明
<res-ref-name>news</res-ref-name> //资源引用的JNDI名字
<res-type>javax.sql.DataSource</res-type> //引用资源的类名字
<res-auth>Container</res-auth> //引用的资源的管理方式
</resource-ref>
5.JNDI获得数据源对象的步骤
1.配置context.xml文件
2.配置web.xml文件
3.添加驱动到/lib目录下
4.进行代码编写,使用lookup()方法获得数据源对象
Context context=new InitialContext();
DataSoure ds=(dDataSource)context.lookup("java:comp/env/news");
Connection con=ds.getConnection();
6.JavaBean 是java中可以跨平台的重要组件
在应用中主要负责封装数据和封装业务层处理
javaBean的定义要遵守一定的规则 公有类,并提供无参的共有的构造函数
属性私有 具有公有的访问属性的set和get方法
8.分页查询
1.计算总页数 总页数=(总记录数-1)/每页显示数量+1;
2.分页查询的SQL语句 select * from (select rownum as r,t.* from tables t ) where r between pageSize*(pageIndex-1)+1 and pageSize*pageIndex;
9.文件上传下载
1.File类的常用方法
1.void saveAs(String destFilePathName); 将文件保存,参数destFilePathName是保存的文件名
2.void saveAs(String destFilePathName,int optionSaveAs);将文件保存,参数destFilePathName是保存的文件名,optionSaveAs表示保存的选项
3.boolean isMissing(); 判断用户是否选择了文件.即对应的表单项是否为空
4.String getFieldName(); 获取当前表单中上传文件所对应的表单项的名称name值
5.String getFileName(); 获取上传文件的名称,不包含路径
6.String getFilePathName(); 获取上传文件的名称,包含文件的路径
7.String getFileExt(); 获取文件的扩展名
8.String getContentString(); 获取文件的内容.返回值为字符串类型
9.int getSize(); 获取上传文件的大小.单位为字节
2.Files类的常用方法
1.int getCount(); 获得文件上传的数目
2.File getFile(int index); 获得指定位置的File文件对象
3.long getSize(); 获得上传文件的总长度
4.Collection getCollection(); 将上传的所有文件对象以Collection的形式返回
3.SmartUpload类的常用方法 out.clear(); out=pageContext.pushBody(); //实现文件的下载功能
1.void initialize(PageContext pagecontext); 执行上传和下载的初始化工作
2.void upload(); 实现文件的上传
3.void downloadFile(String str1,String str2,....); 实现文件的下载
4.int save(String pathName); 将指定文件保存到指定的目录下面,并返回保存的文件的个数
5.void setAllowedFileList(String exeList1,String exeList2,...);允许上传的文件的类型
6.void setDeniedFilesList(String exeList1,String exeList2,...);不允许上传文件的类型
7.void setMaxFileSize(long size); 设置每个上传文件的最大长度
8.void setTotalMaxFileSize(long size); 设置上传文件的总长度
4.获取表单的数据
1.getParameter(); 获取SmartUpload包装的Request对象
2.getParameter(String name); 获取指定参数的值
3.getParameterValues(String name); 获取一个页面表单对应多个应用值的请求
5.实现文件的上传
SmartUpload su=new SmartUpload();
su.initialize(pageContext); //初始化su对象
su.setCharset("utf-8"); //设置编码
su.setAllowedFilesList("jpg,gif"); //设置允许上传对象
su.setDeniedFilesList("doc,txt"); //设置禁止上传对象
su.setMaxFileSize(1000); //设置单个文件的大小
su.setTotalMaxFileSize(10000); //设置上传文件的总长度
su.upload();
File file=su.getFiles().getFile(0);
if(!file.isMissing()){
file.saveAs("/upload/"+file.getFileName(),SmartUpload.SAVE_VIRTUAL);
}
6.实现文件的下载
SmartUpload su=new SmartUpload();
su.initialize(pageContext);
su.setCharset("utf-8");
su.setContentDisposition(null);
su.downloadFile("/upload/hehe.txt");
out.clear();
out=pageContext.pushBody();
10.使用分层实现业务处理
1.分层开发中最常用的三层架构
1.表现层 用于用户展示和交互
2.业务逻辑层 提供业务逻辑处理的封装
3.数据访问层 提供对数据的读取操作和保存
2.分层开发应该遵循的原则
1.上层依赖其下层,依赖关系不跨层
2.下一层不能调用上一层
3.下一层不依赖于上一层
4.在上一层中不能出现下一层的概念
3.分层开发的优势
1.职责划分清晰
2.无损替换
3.代码复用
4.降低了系统内部的耦合性
11.EL和JSTL
1.EL Expression Language 表达式语言
1.EL表达式的特点 自动转换类型 使用简单
2.EL的语法${表达式}
3.EL隐式对象
1.作用域访问对象
1.pageScope 与页面作用域(page)中的属性相关联的Map类
2.requestScope 与请求作用域(request)中的属性相关联的Map类
3.sessionScope 与会话作用域(session)相关联的Map类
4.applicationScope 与应用程序作用域(application)相关联的Map类
2.参数访问对象
1.param 按照参数名称访问单一请求值的Map对象
2.paramValues 按照参数名称访问数组请求值的Map对象
3.JSP隐式对象
1.pageContext 提供对页面信息和内置对像的访问
2.JSTL Java Server Pages Standard Tag Library JSP标准标签库
1.JSTL的标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/code" prefix="c" %>
1.核心标签库
1.通用标签
1.<c:set></c:set> 用于定义变量,并将变量储存在JSP范围内或者javaBean属性中
1.<c:set var="variable" value="v" scope="scope"></c:set> 将value值存储在范围为scope的变量variable中
var属性的值是设置的变量名
value属性设置的值是赋予变量的值
scope属性设置的是变量的作用域 可选值有page,request,session和application
2.<c:set target="target" value="v" property="property"></c:set> 将value值存储在对象的属性中
target设置要操作的对象,可以使用EL表达式表示
value属性是赋予对象属性的值
property属性对应对象的属性名
2.<c:out></c:out> 用来显示数据的内容,类似与JSP的<%= %>
1.<c:out value="v"></c:out> 不指定默认值
2.<c:out value="v" default="default"></c:out> 指定默认值
3.<c:remove></c:remove> 用于移除指定范围内的变量
1.<c:remove var="v" scope="scope"></c:remove>
value属性用来只待删除的名称
scope属性是指删除变量所在的范围 可以指定的属性有page request session和application 默认为page
2.条件标签
1.<c:if test="condition" var="varName" scope="scope"></c:if>
test属性是此条件标签的判断条件
var属性定义变量,该变量存放判断以后的结果,该属性可以省略
scope属性是指var变量的存储范围,该属性可以省略
2. <c:choose> //多项选择标签.相当于switch/case
<c:when test="${age>11 }">小孩</c:when>
<c:when test="${age>15 }">未成年孩</c:when>
<c:when test="${age>18 }">成年</c:when>
<c:otherwise>中年人</c:otherwise>
</c:choose>
3.迭代标签
1.<c:forEach var="varName" items="collectionName"vatStatus="varStatusName" begin="beginIndex" end="endIndex" step="step" ></c:forEach> 遍历集合对象的成员
var属性是对当前成员的引用
items是指被迭代的集合对象
varStatus属性用英语存放var引用的成员的相关信息,如索引
begin属性表示开始的位置.默认为0,该属性可以省略
end属性表示结束的位置,该属性可以省略
step属性表示循环的步长,默认为1,可以省略
2.<c:forEach var="varName" varStatus="varStatusName" begin="beginIndex" end="endIndex" step="step"></c:forEach> 指定语句的循环次数
var属性是对当前成员的引用
varStatus属性用英语存放var引用的成员的相关信息,如索引
.index //相对于集合的下标
.count //相对于查询结果而言,查询当前记录的数
.first
.last
begin属性表示开始的位置.默认为0,该属性可以省略 不能小于0
end属性表示结束的位置,该属性可以省略 不能小于0
step属性表示循环的步长,默认为1,可以省略
3.<c:forTokens items="" delims=",;:" var="" begin="" end="" step="" varStatus=""></c:forTokens> 通过分割字符来截取字符串
var属性是对当前成员的引用
varStatus属性用英语存放var引用的成员的相关信息,如索引
.index
.count //相对于查询结果而言,查询当前记录的数
.first
.last
begin属性表示开始的位置.默认为0,该属性可以省略 不能小于0
end属性表示结束的位置,该属性可以省略 不能小于0
step属性表示循环的步长,默认为1,可以省略
2.格式化与国际化标签库
3.sql标签库
4.XML标签库
5.标签函数库
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
1.${fn:contains(name, searchString)} //查询是否包含该字节
2.${fn:containsIgnoreCase(name, searchString)} //包含忽略大小写
3.${fn:endsWith(filename, ".txt")} //查询该文件的名字是否以指定的后缀结尾
4.${fn:escapeXml(param:info)}
5.${fn:indexOf(name, "-")} //查询该字符出现的起始位置
6.${fn:join(array, ";")} //通过指定字符串拼接某数组和集合
7.${fn:length(str)} //查询某指定字符或数组集合的长度
8.${fn:replace(text, "-", "•")} //用指定字符替换该字符串中的指定内容
9.${fn:split(customerNames, ";")} //用指定字符分割该字符串
10.${fn:startsWith(product.id, "100-")} //ervlet查询该内容是否以该字符开头
11.${fn:substring(zip, 6, -1)} //提取该内容中指定长度的字节 .当end为-数,则截取起始位置后面的所有部分
12.${fn:substringAfter(zip, "-")} //提取该内容指定字符之后的内容
13.${fn:substringBefore(zip, "-")} //提取该内容指定字节之前的内容
14.${fn:toLowerCase(product.name)} //将指定内容转换为小写
15.${fn:toUpperCase(product.name)} //将指定内容转换为大写
16.${fn:trim(name)} //忽略大小写
12.自定义servlet
1.实现Servlet
2.继承GenericServlet
3.继承HttpServlet
4.web.xml
1.初始化参数的设置
<init-param>
<param-name>helloname</param-name>
<param-value>hellovalue</param-value>
</init-param>
2.全局参数的设置
<context-param>
<param-name>contextparamname</param-name>
<param-value>contextparamvalue</param-value>
</context-param>
5.Servlet分为三大类
1.标准的servlet
2.过滤器
3.监听器
6.什么是Servlet Servlet是一个符合特定规范的Java程序,在服务器端运行,主要用来处理客户端的请求并做出响应
7.servlet的生命周期
1.加载和实例化 吃实例由servlet容器进行创建
2.初始化 init();
3.服务 service(); 内部实现doGet()和doPost();
4.销毁 destory(); 指明那些资源可以被系统回收.而不是由该方法进行回收
8.Servlet接口 定义了所有Servlet需要实现的方法
1.init(); 初始化Servlet
2.service(); Servlet服务
3.destory(); 销毁servlet
4.getServletInfo(); 用于获得Servlet的信息
5.getServletConfig(); 返回ServletConfig对象
9.GenericServlet 实现了Servlet接口和ServletConfig接口
1.void init(ServletConfig config); 调用Servlet接口中的init()方法...该方法里面的参数可以省略
2.String getInitParameter(String name); 返回名称为name的初始化参数
3.ServletContext getServletContext(); 返回ServletContext对象的引用
10.HttpServlet 继承了GenericServlet类
1.void service(ServletRequest request,ServletResponse response); 调用GenericServlet类中的service()方法的实现
2.void doXXX(ServletRequest request,ServletResponse response); 根据请求的方式的不同.调用不同的doGet().doPost()方法
11.Servlet的web.xml文件的配置
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>cn.servlet.LoginServlet</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
12.Servlet初始化参数
1.局部参数 获得用this.getInitParameter("initName");
<servlet>
<init-param>
<param-name>initName</param-name>
<param-value>initValue</param-value>
</init-param>
</servlet>
2.上下文参数 获得用this.getServletContext().getInitParameter("contextName");
<servlet>
<context-param>
<param-name>initName</param-name>
<param-value>initValue</param-value>
</context-param>
</servlet>