【石家庄校区】WEB总结
XML
XML的基本语法:
XML必须有关闭标签
区分大小写
属性需要有引号
标签必须正确嵌套.
XML的文档声明
文档声明:通常出现在XML的第一行第一列的位置!!!
写法:
<?xml 属性名=”属性值” 属性名=”属性值” ...?>
version :必须的. 使用”1.0”
encoding :字符集. 是使用浏览器打开的时候采用的默认的字符集的编码.
standalone :描述XML文档是否需要依赖其他的文件.
XML的注释
<!-- XML的注释 -->
XML的元素
元素(标签)的命名规范:
名称可以含字母,数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符"xml"(或者XML,Xml)开始
名称不能含空格
名称中不能含冒号
XML的属性
属性的名称规范与元素一致.
属性需要使用引号!
XML的特殊字符和CDATA区
XML的特殊字符:
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
XML的CDATA区:(CDATA:Character Data)
<![CDATA[ 内容 ]]>
XPath:
dom4j支持XPath的jar包.
jaxen-1.1-beta-6.jar
dom4j的XPath支持的API:
List document.selectNodes(String xPath);
Node document.selectSingleNode(String xPath);
代码:
@Test
/**
* DOM4J的XPath的写法:
*/
public void demo2() throws Exception{
// 创建解析器:
SAXReader reader = new SAXReader();
// 解析XML返回Document对象.
Document document = reader.read("xml/demo1.xml");
/*List<Node> list = document.selectNodes("//name");
for (Node node : list) {
Element element = (Element) node;
System.out.println(element.getText());
}*/
List<Node> list = document.selectNodes("//person['@id']");
for (Node node : list) {
Element element = (Element) node;
System.out.println(element.attributeValue("id"));
}
}
XML的约束的概述:
什么是XML的约束 :就是用来约束XML的文档中可以出现哪些标签,不能出现哪些标签,标签中是否有顺序,出现的次数.
XML的约束 :用来规范XML的写法.
XML的约束的种类及区别?
DTD 和 Schema :
区别:
1.DTD语法是自成一体的.Schema语法就是XML的语法.
2.Schema的语法就是XML的语法所以更容易被解析器所解析.
3.Schema支持名称空间.
4.Schema有比DTD更加强大的语义和语法的约束.
DTD的语法 :(了解)
DTD的引入方式:
内部的DTD:
<!DOCTYPE persons [
]>
外部的DTD:
一种本地DTD:
<!DOCTYPE persons SYSTEM "unknown.dtd">
一种网络DTD:
<!DOCTYPE persons PUBLIC "//UNKNOWN/" "unknown.dtd">
DTD的语法:
元素:
<!ELEMENT 元素名 元素类型>
元素类型:
EMPTY
ANY
子元素
是否有序: 使用 逗号(,)(有序)或者竖线(|)(只能出现其中的一个,如果想多出现可以在后面写?,+,*)表示.
出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
PCDATA
属性:
<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
属性的类型:
ID类型:表示属性值需要是唯一的.
CDATA类型:普通的字符串.
枚举:
属性的约束:
值 :属性的默认值
#REQUIRED :属性值是必需的
#IMPLIED :属性不是必需的
#FIXED value :属性值是固定的
Tomcat
软件的架构
C/S架构的软件:
Client / Server 客户端和服务器端的软件. 都是需要在PC端安装的软件. 比如 QQ,迅雷,暴风...
优点:效果炫,一部分代码写到客户端(速度快).
缺点:服务器端更新,客户端都需要更新.
B/S架构的软件:
Browser / Server 浏览器端和服务器端的软件. 不需要安装到PC端,只需要有一个浏览器即可. 比如 京东,网银,WEBQQ,WEB迅雷...
优点:服务器端更新,客户端浏览器不需要进行更新.
缺点:效果不炫,所有的代码运行都在服务器端,导致服务器压力过大.
效果:使用HTML5,CSS3可以做出很炫效果.
服务器端压力:搭建服务器的集群.而且还有AJAX技术.
了解Tomcat的目录结构】
bin :tomcat的执行的文件.
* conf :tomcat的配置文件.
lib :tomcat运行的需要的jar包.
logs :tomcat的运行的日志文件.
temp :tomcat产生临时文件存放的路径.
* webapps :tomcat发布的web项目的路径.
work :tomcat运行JSP的时候,JSP翻译成Servlet的代码存放的路径.
发布一个WEB工程到Tomcat中共有三种方式:
1.直接将工程copy到tomcat/webapps下.
2.配置tomcat虚拟路径:(一般不用 )
在tomcat/conf/server.xml文件中进行配置:
在<Host>标签下配置:
<Context path="/itheima" docBase="C:/website"/>
3.配置tomcat虚拟路径:
在tomcat/conf/Catalina/localhost/xxx.xml
配置<Context docBase="C:/website"/>
xxx作为虚拟路径的名称.
Tomcat常见问题:
没有配置JAVA_HOME引发tomcat一闪消失
一定要配置JAVA_HOME环境变量.
端口号冲突的问题
一种:将占用端口的应用结束.
netstat -ano
打开任务管理器结束:
二种:修改自身应用的端口号.
tomcat/conf/server.xml
1.安装Tomcat
--1.JAVA_HOME要配置正确
--2.端口号冲突的问题要自己会解决---->去conf-->server.xml去找Connectioner的标签里面去修改
2.要会在Tomcat中发布自己的项目
--1.直接拷贝
--2.在conf--->server.xml中找Host--->Context的标签--->重要的两个属性-->(path(虚拟路径),docBase(实际路径))
--3.在conf--->引擎文件夹中---主机文件夹中---->创建以.xml结尾的文件(xml的文件名是虚拟路径)--->Context的标签-->一个重要的属性docBase
2.STS关联Tomcat
如何关联????
window-->prefer--->server--->runtime--->add--->apache7.0--->关联本地tomcat路径
server--->new Server--->apache7.0--->open---将默认的项目发送地址给成webapps
Servlet
什么是Servlet:
就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.
Servlet就是SUN公司提供的一个动态网页开发技术.
Servlet的作用:
用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
使用Servlet:
编写一个类实现Servlet接口.
将编写的这个类配置到服务器中.
Servlet的入门:
编写类:
public class ServletDemo1 implements Servlet{
@Override
/**
* 为用户处理请求和响应的方法.
*/
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
res.getWriter().println("Hello Servlet...");
}
...
}
配置:
<!-- 配置Servlet -->
<servlet>
<!-- Servlet的名称 -->
<servlet-name>test1</servlet-name>
<!-- SErvlet的全路径 -->
<servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class>
</servlet>
<!-- Servlet的映射 -->
<servlet-mapping>
<!-- Servlet的名称 -->
<servlet-name>test1</servlet-name>
<!-- Servlet的访问路径 -->
<url-pattern>/ServletDemo1</url-pattern>
</servlet-mapping>
访问:
使用ServletRequest接收参数
常用方法:
String getParameter(String name); ---用于接收一个名称对应一个值的数据.
String[] getParameterValues(String name)---用于接收一个名称对应多个值的数据.
Map getParameterMap(); ---用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.
Enumeration getParameterNames() ---用于获取表单中提交的所有的参数的名称.
setCharacterEncoding(编码) ---设置请求体中的编码,如果不设置默认编码是ISO8859-1
Servlet的实现的关系】
Servlet :接口
GenericServlet :通用的Servlet
HttpServlet :HttpServlet
编写一个类继承HttpServlet,重写doGet和doPost方法.
配置
Servlet的生命周期:
生命周期:就是一个对象从创建到销毁的过程.
Servlet生命周期:Servlet从创建到销毁的过程.
何时创建:用户第一次访问Servlet创建Servlet的实例
何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet从服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.
启动时创建Servlet
Servlet默认是在第一次访问的时候创建的.现在让Servlet在服务器启动的时候创建好.进行对Servlet的配置:
在web.xml中在<servlet></servlet>标签中配置:
* <load-on-startup>2</load-on-startup> --- 传入正整数,整数越小,被创建的优先级就越高.
url-pattern的配置
url-pattern配置方式共有三种:
1.完全路径匹配 :以 / 开始 例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目录匹配 :以 / 开始 需要以 * 结束. 例如: /* ,/aaa/* ,/aaa/bbb/*
3.扩展名匹配 :不能以 / 开始 以 * 开始的. 例如: *.do , *.action
***** 错误的写法 : /*.do
***** 完全路径匹配 > 目录匹配 > 扩展名匹配
开发中的路径的编写:
相对路径:都是需要找位置相对关系.不能以 / 开始的.
./ 当前路径 ../上一级目录
使用相对路径访问:
* http://localhost:8080/day09/demo4-url/demo1.html
* http://localhost:8080/day09/ServletDemo6
绝对路径:不需要找位置相对关系. 以 / 开始的.
绝对路径中分为客户端路径和服务器端路径:
客户端路径一定要加工程名. /day09/ServletDemo6
服务器端路径不需要加工程名. /ServletDemo6
HttpServletResponse中设置头的方法
addHeader(String name,String value); --- 针对一个key对应多个value的响应头.
addDateHeader(String name,long date);
addIntHeader(String name,int value);
setHeader(String name,String value); --- 针对一个key对应一个value的响应头.
setDateHeader(String name,long date);
setIntHeader(String name,int value);
解决向页面输出中文的乱码问题
response.setContentType("text/html;charset=UTF-8");
ServletContext对象存取数据,存的数据都是有一定的作用的范围的.这种对象称为是域对象.
获取方式
GenericServlet
ServletContext getServletContext()
ServletContext的作用:
1.用来获得全局初始化参数.
在web.xml的web-app下配置全局初始化参数:
如:
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123</param-value>
</context-param>
String getInitParameter(String name)
Enumeration getInitParameterNames()
2.用来获得文件的MIME的类型.
String getMimeType(String file)
3.作为域对象存取数据.
ServletContext是一个域对象.
作用范围:整个web工程.
创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象.
销毁:服务器关闭的时候,或者项目从服务器中移除的时候.
存取数据方法
向ServletContext中存入数据.
void setAttribut(Stirng name,Object object)
从ServletContext中获取数据.
Object getAttribute(String name)
从ServletContext中移除数据
void removeAttribute(String name)
4.用来读取web项目下的文件.(路径不需要写项目名)
根据提供路径读取文件返回一个文件的输入流.
InputStream getResourceAsStream(String path)
返回一个路径的磁盘绝对路径
String getRealPath(String path)
还可以使用类加载器读取classes下的文件
ServletConfig:了解.获得Servlet的配置信息.
String getServletName(); ---获得Servlet在web.xml中配置的name的值.
String getInitParameter(String name); ---获得Servlet的初始化参数的.
Enumeration getInitParameterNames(); ---获得所有Servlet的初始化参数的名称.
Response:
代表响应的对象.从服务器向浏览器输出内容.
响应行:
void setStatus(int sc):设置状态码
响应头:
针对一个key对应多个value的响应头.
void addHeader(String name,String value);
void addDateHeader(String name,long date);
void addIntHeader(String name,int value);
针对一个key对应一个value的响应头.
void setHeader(String name,String value);
void setDateHeader(String name,long date);
void setIntHeader(String name,int value);
响应体:
ServletOutputStream getOutputStream()
printWriter getWriter()
重定向
response.sendRedirect(需要跳转到的页面)需要写项目名
文件下载的方式
一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
二种:手动编写代码的方式完成文件的下载.
设置两个头和一个流:
Content-Type :文件的MIME的类型.
Content-Disposition :以下载的形式打开文件.
格式:Content-Disposition:attachment;filename=文件名(设置下载时的文件名)
InputStream :文件的输入流.
中文文件的下载:
解决系统无法找到文件
将filename从iso-8859-1编码变成utf-8;
String filename=filename.getBytes("ISO8859-1","UTF-8");
解决文件名乱码问题
IE浏览器下载中文文件的时候采用的URL的编码.
Firefox(火狐)浏览器下载中文文件的时候采用的是Base64的编码.
使用URLEncoder.encode(文件名,UTF-8)解决URL编码的问题
使用以下方法解决base64编码的问题
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
Request的概述
Request代表用户的请求.
常用方法:
功能一:获得客户机的相关的信息
获得请求方式:
String getMethod()
获得请求的路径:
String getRequestURI()
StringBuffer getRequestURL()
获得客户机的信息
String getRemoteAddr():获得客户机IP地址
获得工程名:
String getContextPath()
功能二:获得从页面中提交的参数:
String getParameter(String name)
Map getParameterMap()
Enumeration getParameterNames()
String[] getParameterValues(String name)
功能三:作为域对象存取数据
void removeAttribute(String name)
void setAttribute(String name,Object o)
Object getAttribute(String name)
request的作用范围:
作用范围就是一次请求的范围.
创建和销毁:
创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
销毁:当服务器对这次请求作出了响应之后.
处理request接收参数的中文乱码的问题:
现在无论是GET还是POST提交中文的时候,都会出现乱码的问题.
解决:
POST的解决方案:
POST的参数在请求体中,直接到达后台的Servlet.数据封装到Servlet中的request中.request也有一个缓冲区.request的缓冲区也是ISO-8859-1编码.
设置request的缓冲区的编码:
request.setCharacterEncoding(“UTF-8”); --- 一定要在接收参数之前设置编码就OK.
GET的解决方案:
1.修改tomcat的字符集的编码.(不推荐)
2.使用URLEncoder和URLDecoder进行编码和解码的操作.
3.使用String的构造方法:
String(byte[] bytes,String charsetName):通过使用指定的charset解码指定的数组,构造一个新的String
重定向
response.sendRedirect(需要跳转到的页面)需要写项目名
转发
request.getRequestDispatch(需要跳转到的页面).forward(reqrest,response);
重定向和转发的区别:(redirect和forward的区别)
1.重定向的地址栏会发生变化,转发的地址栏不变.
2.重定向两次请求两次响应,转发一次请求一次响应.
3.重定向路径需要加工程名,转发的路径不需要加工程名.
4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
Cookie
会话技术
什么是会话 :用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.
常见的会话技术:
Cookie :将数据保存到客户端浏览器.
Session :将数据保存到服务器端.
为什么使用会话技术?
私有的数据,购物信息数据保存在会话技术中.
Cookie技术的使用
向浏览器保存数据:
HttpServletResponse有一个方法:
void addCookie(Cookie cookie);
获得浏览器带过来的Cookie:
HttpServletRequest有一个方法:
Cookie[] getCookies();
创建一个Cookie对象:
Cookie(String name,String value);
Cookie的常用方法
getName();
getValue();
setDomain(String domain); -- 设置Cookie的有效域名. // www.baidu.com music.baidu.com
setPath(String path); -- 设置Cookie的有效路径.
setMaxAge(int maxAge); -- 设置Cookie的有效时间.
Cookie的分类有关:
会话级别的Cookie:默认的Cookie.关闭浏览器Cookie就会销毁.
持久级别的Cookie:可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在. 手动销毁持久性Cookie. setMaxAge(0)---前提是有效路径必须一致.
Session
Session的概述
Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在服务器端.
Session的执行原理:基于Cookie的.
获得Session:
request.getSession().getAttribute();--->如果拾的cookie有JSEEIONID的话,就会打开对应的区域,而不会创建新的区域,
Session何时创建和销毁?作用范围:
创建:服务器端第一次调用getSession()创建session.
销毁:三种情况销毁session:
1.session过期. 默认过期时间为30分钟.如果想要session永久有效---可以去conf文件夹-->web.xml-->的有效时间改为0就能永久有效
2.非正常关闭服务器.如果正常关闭session序列化到硬盘.--->如果session存储有对象,这个对象要实现序列化接口
3.手动调用session.invalidate();---->这个方法是将session销毁一般用不到, 我们平时想要去销毁一个数据,通过removeAttribute去销毁
作用范围:多次请求.(一次会话)
|
|