<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[PerserveZ的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/PerserveZ</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; PerserveZ]]></copyright><item><title><![CDATA[Go web的工作原理]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/95077848</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/95077848</guid><author>PerserveZ</author><pubDate>Mon, 08 Jul 2019 17:41:15 +0800</pubDate><description><![CDATA[我们看到了上面的代码，要编写一个Web服务器是不是很简单，只要调用http包的两个函数就可以了。
我们看到Go通过简单的几行代码就已经运行起来一个Web服务了，而且这个Web服务内部有支持高并发的特性。现在Web服务已经搭建完成了，那我们现在来了解一个这个服务是怎么运行起来的呢？

Web工作方式的几个概念

Request：用户请求的信息，用来解析用户的请求信息，包括post、get、cooki...]]></description><category></category></item><item><title><![CDATA[Struts2简单实现]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78545520</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78545520</guid><author>PerserveZ</author><pubDate>Wed, 15 Nov 2017 21:56:56 +0800</pubDate><description><![CDATA[1). 搭建 Struts2 的开发环境


2). 不需要显式的定义 Filter, 而使用的是 struts2 的配置文件. 

3). details.jsp 比先前变得简单了.

${requestScope.product.productName} -> ${productName}


4). 步骤:
I.  由 product-input.action 转到 /]]></description><category></category></item><item><title><![CDATA[Struts2 环境的搭建]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78483416</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78483416</guid><author>PerserveZ</author><pubDate>Wed, 08 Nov 2017 21:27:57 +0800</pubDate><description><![CDATA[Struts2 环境的搭建
加入 jar 包: 复制 struts\apps\struts2-blank\WEB-INF\lib 下的所有 jar 包到当前 web 应用的 lib 目录下.
在 web.xml 文件中配置 struts2: 复制 struts\apps\struts2-blank1\WEB-INF\web.xml 文件中的过滤器的配置到当前 web 应用的 web.xml 文]]></description><category></category></item><item><title><![CDATA[Struts2 概述]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78483374</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78483374</guid><author>PerserveZ</author><pubDate>Wed, 08 Nov 2017 21:15:42 +0800</pubDate><description><![CDATA[Struts2 概述
Struts2 是一个用来开发 MVC 应用程序的框架. 它提供了 Web 应用程序开发过程中的一些常见问题的解决方案: 
对来自用户的输入数据进行合法性验证
统一的布局
可扩展性
国际化和本地化
支持 Ajax
表单的重复提交
文件的上传下载

Struts2 和Struts1的对比

在体系结构方面更优秀:
类更少, 更高效:  在 Struts]]></description><category></category></item><item><title><![CDATA[国际化]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78397766</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78397766</guid><author>PerserveZ</author><pubDate>Mon, 30 Oct 2017 21:44:24 +0800</pubDate><description><![CDATA[1. 什么是国际化和本地化:
I.   本地化：一个软件在某个国家或地区使用时，采用该国家或地区的语言，数字，货币，日期等习惯。
II.  国际化：软件开发时，让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯
III. 本地敏感数据: 随用户区域信息而变化的数据称为本地信息敏感数据。例如数字，货币, 日期，时间等数据

2. 相关的 API:
I.]]></description><category></category></item><item><title><![CDATA[文件的上传（upload）和下载（download）（应用）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78346421</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78346421</guid><author>PerserveZ</author><pubDate>Wed, 25 Oct 2017 20:45:04 +0800</pubDate><description><![CDATA[需求：
I.  上传
> 在 upload.jsp 页面上使用 jQuery 实现 "新增一个附件", "删除附件". 但至少需要保留一个.

> 对文件的扩展名和文件的大小进行验证. 以下的规则是可配置的. 而不是写死在程序中的. 
>> 文件的扩展名必须为 .pptx, docx, doc
>> 每个文件的大小不能超过 1 M
>> 总的文件大小不能超过 5 M.

> 若验]]></description><category></category></item><item><title><![CDATA[监听器（Listener  第二节）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78323210</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78323210</guid><author>PerserveZ</author><pubDate>Mon, 23 Oct 2017 20:53:39 +0800</pubDate><description><![CDATA[3.  XxxAttributeListener

1). 监听 ServletContext, HttpSession, ServletRequest 中添加属性, 替换属性, 移除属性的事件监听器. 

2). 以 ServletRequestAttributeListener 为例:

//添加属性时被调用
public void attributeAdded(ServletR]]></description><category></category></item><item><title><![CDATA[监听器（Listener  第一节）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78323030</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78323030</guid><author>PerserveZ</author><pubDate>Mon, 23 Oct 2017 20:37:31 +0800</pubDate><description><![CDATA[1.ServletContextListener:

1). 什么是监听器: 监听 ServletContext 对象被创建或销毁的 Servlet 监听器


2). 如何创建监听器
> 创建一个实现了 ServletContextListener 的类, 并且实现其中的两个方法

public class HelloServletContextListner implement]]></description><category></category></item><item><title><![CDATA[Filter（第四节）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78313639</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78313639</guid><author>PerserveZ</author><pubDate>Sun, 22 Oct 2017 21:45:26 +0800</pubDate><description><![CDATA[使用 Filter 完成一个简单的权限模型:

1). 需求: 

①. 管理权限
> 查看某人的权限
> 修改某人的权限 

②. 对访问进行权限控制: 有权限则可以访问, 否则提示: 没有对应的权限, 请 返回

2). 实现:

②. 对访问进行权限控制:

> 使用 Filter 进行权限的过滤: 检验用户是否有权限, 若有, 则直接响应目标页面; 若没有重定向]]></description><category></category></item><item><title><![CDATA[Filter（第三节）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78310041</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78310041</guid><author>PerserveZ</author><pubDate>Sun, 22 Oct 2017 14:50:50 +0800</pubDate><description><![CDATA[元素: 指定过滤器所拦截的资源被 Servlet 容器调用的方式，
可以是REQUEST,INCLUDE,FORWARD和ERROR之一，默认REQUEST. 
可以设置多个 子元素用来指定 Filter 对资源的多种调用方式进行拦截（①和②较为常用）

①. REQUEST：当用户直接访问页面时，Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的includ]]></description><category></category></item><item><title><![CDATA[Filter（第二节）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78306359</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78306359</guid><author>PerserveZ</author><pubDate>Sat, 21 Oct 2017 21:04:44 +0800</pubDate><description><![CDATA[可以将Filter接口实现类中的用到的方法封装到一个类当中，方便以后使用，以下代码是简单的示例
package com.atguigu.javaweb;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterCo]]></description><category></category></item><item><title><![CDATA[Filter（第一节）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78299991</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78299991</guid><author>PerserveZ</author><pubDate>Fri, 20 Oct 2017 22:09:56 +0800</pubDate><description><![CDATA[Filter
1). Filter 是什么 ?

①. JavaWEB 的一个重要组件, 可以对发送到 Servlet 的请求进行拦截, 并对响应也进行拦截. 
②. Filter 是实现了 Filter 接口的 Java 类.
③. Filter 需要在 web.xml 文件中进行配置和映射. 

2). 如何创建一个 Filter, 并把他跑起来


①. 创建一个 Fil]]></description><category></category></item><item><title><![CDATA[JSTL(第三节)]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78299198</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78299198</guid><author>PerserveZ</author><pubDate>Fri, 20 Oct 2017 20:38:43 +0800</pubDate><description><![CDATA[URL操作
JSTL包括三个与URL相关的标签，分别为：、和
:可以包含任何页面到当前页面.

:使当前 JSP 页面重定向到指定的页面. 使当前 JSP 转发到指定页面可以使用

:产生一个 url 地址. 可以 Cookie 是否可用来智能进行 URL 重写, 对 GET 请求的参数进行编码
可以把产生的 URL 存储在域对象的属性中.
还可以使用 c:param 为 URL ]]></description><category></category></item><item><title><![CDATA[JSTL（第二节）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78298894</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78298894</guid><author>PerserveZ</author><pubDate>Fri, 20 Oct 2017 19:59:54 +0800</pubDate><description><![CDATA[1.迭代操作主要包括两个标签：和
2. 为循环控制，它可以将集合（collection）中的成员循环浏览一遍，运作方式为当条件符合时，就会持续重复执行的本体内容。

3.语法：
语法1：迭代一集合对象所有成员

    本体内容

var用来存放现在指到的成员（类型 String 无EL表达式），items指被迭代的集合对象（类型：Arrays,Collection,Iterato]]></description><category></category></item><item><title><![CDATA[JSTL(第一节)]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78289848</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78289848</guid><author>PerserveZ</author><pubDate>Thu, 19 Oct 2017 21:42:22 +0800</pubDate><description><![CDATA[JSTL:JSP标准标签库。
JSTL的安装：直接将jstl.jar和standard.jar这两个jar包拷贝到WebContent目录下的lib文件夹下面即可。
JSTL的使用：直接导入即可。例如：


JSTL的核心标签有：
http://www.runoob.com/jsp/jstl-function-length.html

简单示例：
c:remove: 移除指定域对]]></description><category></category></item><item><title><![CDATA[EL自定义函数（了解）]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78289227</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78289227</guid><author>PerserveZ</author><pubDate>Thu, 19 Oct 2017 20:44:19 +0800</pubDate><description><![CDATA[EL自定义函数：在EL表达式中调用的某个Java类的静态方法，这个静态方法需要在WEB应用程序中进行配置才能被EL表达式调用。


基本的EL函数有：]]></description><category></category></item><item><title><![CDATA[带父标签的自定义标签]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78289185</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78289185</guid><author>PerserveZ</author><pubDate>Thu, 19 Oct 2017 20:40:38 +0800</pubDate><description><![CDATA[开发有父标签的标签:

1. 父标签无法获取子标签的引用, 父标签仅把子标签作为标签体来使用. 

2. 子标签可以通过 getParent() 方法来获取父标签的引用(需继承 SimpleTagSupport 或自实现 SimpleTag 接口的该方法):
若子标签的确有父标签, JSP 引擎会把代表父标签的引用通过  setParent(JspTag parent)  赋给标签处理器]]></description><category></category></item><item><title><![CDATA[JSP中的相对路径和绝对路径]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78278559</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78278559</guid><author>PerserveZ</author><pubDate>Wed, 18 Oct 2017 22:04:43 +0800</pubDate><description><![CDATA[1). 为什么要解决相对路径的问题: 在有一个 Servlet 转发页面的情况下, 会导致相对路径的混乱. 

a.jsp: To B Page2
ToBServlet: request.getRequestDispatcher("/dir/b.jsp").forward(request, response);

注意, 此时点击 To B Page2 超链接后的浏览器的地址栏的值: h]]></description><category></category></item><item><title><![CDATA[带属性的自定义标签]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78278278</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78278278</guid><author>PerserveZ</author><pubDate>Wed, 18 Oct 2017 21:39:30 +0800</pubDate><description><![CDATA[1. 先在标签处理器类中定义 setter 方法. 建议把所有的属性类型都设置为 String 类型. private String value;
private String count;

public void setValue(String value) {
	this.value = value;
}

public void setCount(String count) {
	this]]></description><category></category></item><item><title><![CDATA[自定义标签]]></title><link>https://blog.youkuaiyun.com/PerserveZ/article/details/78277319</link><guid>https://blog.youkuaiyun.com/PerserveZ/article/details/78277319</guid><author>PerserveZ</author><pubDate>Wed, 18 Oct 2017 20:24:24 +0800</pubDate><description><![CDATA[1.什么是自定义标签
用户定义的一种自定义jsp标记，当一个含有自定义标记的jsp页面被jsp引擎编译成servlet时，tag标签被转换成了一个称为标签处理类的对象的操作，于是，当jsp页面被jsp引擎转换成servlet后，实际上tag标签被转化为了对tag处理类的操作。（开发自定义标签的核心就是编写处理器类）
2.标签的形式
1）空标签
例如：
2）带有属性的标签
例如：
3）]]></description><category></category></item></channel></rss>