struts2中$相关知识
-
struts2中&lt;s:if&gt;标签的使用一、<s:if>判断字符串的问题:1、判断单个字符:<s:if test="#session.user.TYPE=='A' ">这样是从session中取出TYPE的值,并且判断其是否为A,但是这样判断是不正确的,这样判断的话,根本判断不出来,要改成下面这样:<s:if test="#session.user.TYPE=='A'.toString()">这样判断才能正确判断,在struts2中它判断单独的A是numberchar类型而不是char类型。2、判断字符串:<s:if test="#session.user.TYPE=='AAA' ">这样写的就是判断TYPE是不是AAA,是String的判断,这个是不用加toString()的。3、判断数值:<s:if test="#session.user.TYPE==0"
-
Struts2的环境需求...Struts2的环境需求:1、Servlet API 2.4及以上;2、JSP API 2.0及以上;3、JDK5及以上<br> PS:在Struts2中会用到Annotation(注解),所以JDK版本需要1.5及以上<br> 搭建Struts2环境步骤如下: [ 查看全文 ] ...................................................................................
-
SpringMVC【校验器、统一处理异常、RESTful、拦截器】前言 本博文主要讲解的知识点如下: 校验器 统一处理异常 RESTful 拦截器 Validation 在我们的Struts2中,我们是继承ActionSupport来实现校验的...它有两种方式来实现校验的功能 手写代码 XML配置 这两种方式也是可以特定处理方法或者整个Action的 而SpringMVC使用JSR-303(javaEE6规范的一部分)校验规范,springmvc使用的是Hibernate Validator(和Hibernate的ORM无关) 快速入门 导入jar包 配置校验器 <!-- 校验器 --> <bean id="validator" class="org.springframework
-
Struts2+Jquery+Ajax+Json 现在使用Json来封装并且传递数据的情形是越来越多了,可怎么样在Struts2中来使用Jquery+Ajax+Json来协同工作呢?在网上查了下就那几个例子被转过来转过去的,还有很多例子根本行不通,这里经过自己摸索写了个小例子。1、jar包支持 2、Struts配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="ajax" exten
struts2中$相关课程
struts2中$相关教程
- 3. 各种语言的 Web 框架介绍 目前,主流的 Web 框架可以按照语言类型进行分类,比如基于 Java 开发的 Web 框架、基于 Python 开发的 Web 框架和基于 Go 开发的 Web 框架等等。每种语言领域内的 Web 框架也是各有特色,有大而全,有小而精,还有专注异步高性能等等。热门的 Python Web 框架有:Django:基于 MTV 的框架模式,有强大的数据库功能、强大的后台管理功能、模板系统、缓存系统等;Flask:小而精的 Web 框架典范,可扩展性强;Tornado: 轻量级的 Web 框架,其特点是非阻塞和高性能,是实时 Web 服务的一个 理想框架。主流的 Java Web 框架有:Spring/Spring Boot/Spring MVC 等:几乎是大部分 Java web 开发者的首选和必选,占据了大部分市场。基于 Spring 及其衍生框架,我们能迅速开发一个 Java Web 服务,几乎不需要任何 Web 开发基础;Dubbo:阿里巴巴的开源的高性能 RPC 框架、特点是分布式、高性能以及高度可扩展;Struts2:老一代的 Java Web 框架,特点是高度成熟。不过目前趋势来看,已经很少人使用 Struts2 来开发新的 Web 服务。Go 作为近几年快速崛起的后端开发语言,也受到了广大后端开发者的追捧,Go Web 框架也随之而来,其中的典型代表有:Beego 框架:它类似于 Python Web 框架 Django,走大而全的风格,具备各种 Web 应用程序的通用功能;Gin 框架:Gin 是 Go 的一个微框架,封装优雅,接口友好。具有快速灵活,容错方便、性能优异等特点;Echo 框架:Go 的微型 Web 框架。其具备快速 HTTP 路由器、支持扩展中间件,同时还支持静态文件服务。
- Scrapy 中的中间件 今天我们来聊一聊 Scrapy 框架中的中间件使用,包括 Spider 中间件、下载中间件等。它属于 Scrapy 框架的一个重要部分,是我们定制化 Scrapy 框架时的重要基础。
- 1.3 Scrapy 中内置的 Spider 中间件 接下来,我们来看看 Scrapy 中内置的 Spider 中间件,目前最新的 Scrapy-2.2.0 中一共有 5 个内置的 Spider 中间件:Scrapy内置的Spider中间件我们来分别介绍下这 5 个内置的 Spider 中间件,如果能利用好这些中间件以及进行合理的配置,可以简化不少代码和提高网站爬取的成功率和效率。DepthMiddleware爬取深度中间件,该中间件用于追踪被爬取网站中每个 Request 的爬取深度。通过对该中间件相关参数的设置,可以限制爬虫爬取的最大深度,且可以根据深度控制请求的优先级等。该中间件对应的参数设置有:DEPTH_LIMiT:允许爬取的最大深度,如果为0,则不限制;DEPTH_STATS:是否收集爬取深度统计数据;DEPTH_PRIORITY:是否根据 Request 深度对其安排相应的优先级进行处理。HttpErrorMiddleware该中间件的作用是过滤掉所有不成功的 HTTP 响应,但这会增加开销,消耗更多的资源,并使 Spider 逻辑更加复杂;根据 HTTP 标准,响应码在 200~300 之间都是成功的响应。如果想处理这个范围之外的 Response,可以通过 Spider 的 handle_httpstatus_list 属性值或者配置文件中的 HTTPERROR_ALLOWED_CODES 值来指定 Spider 能处理的 Response 状态码:class MySpider(CrawlSpider): handle_httpstatus_list = [404]例如上面这样的写法就是只处理响应码为 404 的 Response。此外 HttpErrorMiddleware 中间件的配置值有两个,分别为:HTTPERROR_ALLOWED_CODES:默认值为[],传递此列表中包含的非200状态代码的所有响应;HTTPERROR_ALLOW_ALL:默认为 False,传递所有的 Response而不考虑其状态响应码的值。OffsiteMiddleware过滤请求中间件。用于过滤掉所有 Spider 覆盖主机域名外的 URL 请求;RefererMiddleware位置参考中间件。它的作用是根据生产的 Response 的 URL 来填充 Request Referer 信息;UrlLengthMiddleware网址长度限制中间件。它用于过滤 URL 长度大于 URLLENGTH_LIMIT 的值得 Request;在 scrapy/settings/default_settings.py 中我们可以看到这样的配置:SPIDER_MIDDLEWARES_BASE = { # Engine side 'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50, 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500, 'scrapy.spidermiddlewares.referer.RefererMiddleware': 700, 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800, 'scrapy.spidermiddlewares.depth.DepthMiddleware': 900, # Spider side}这些 Spider 中间件都默认启用,且从 Engine 端到 Spider 端的顺序如上配置所示。如果想禁止某个内置的 Spider 中间件,我们直接在 settings.py 文件中将该 Spider 的值设置为 None 即可,示例如下:# 配置位置: 爬虫项目/settings.pySPIDER_MIDDLEWARES = { 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': None,}
- 2. 中文库 借助市面上已有的 CSS 库,我们可以很轻易的做到居中布局,尤其是可以用到中文关键字,这非常有利于我们的记忆,它就是 chinese-layout。然后我们再用一个中文渐变色的 CSS 库来美化我们的界面:chinese-gradient要点就是在head标签中用link标签引入 chinese-gradient 和 chinese-layout。然后就可以使用中文关键字啦:1250运行结果:
- 1. Scrapy 中的中间件管理类 在源码的 scrapy/middleware.py 文件中,定义了一个所有中间件管理类的基类:MiddlewareManager。我们首先来仔细分析下该类的代码。__init__.py:类初始化;该类的初始化将传入相应的中间件类,一般是列表的形式;# ...class MiddlewareManager: """Base class for implementing middleware managers""" component_name = 'foo middleware' def __init__(self, *middlewares): # 中间件类 self.middlewares = middlewares # 中间件的方法 self.methods = defaultdict(deque) # 添加中间件 for mw in middlewares: self._add_middleware(mw)_get_mwlist_from_settings(): 所有继承该中间件管理类的子类需要实现该方法,用于从 settings.py 中获取该中间件的列表;# ...class MiddlewareManager: """Base class for implementing middleware managers""" # ... @classmethod def _get_mwlist_from_settings(cls, settings): raise NotImplementedErrorfrom_settings():从 settings.py 配置中实例化中间件管理类;# ...class MiddlewareManager: """Base class for implementing middleware managers""" @classmethod def from_settings(cls, settings, crawler=None): # 从配置中获取相应设置的中间件,比如设置的下载中间件、spider中间件列表等 mwlist = cls._get_mwlist_from_settings(settings) middlewares = [] enabled = [] for clspath in mwlist: try: # 加载完整的模块路径,得到具体的模块 mwcls = load_object(clspath) # 创建中间件实例 mw = create_instance(mwcls, settings, crawler) # 添加到middles中 middlewares.append(mw) # 用于后续info打印,表明启用的中间件位置路径 enabled.append(clspath) except NotConfigured as e: if e.args: clsname = clspath.split('.')[-1] logger.warning("Disabled %(clsname)s: %(eargs)s", {'clsname': clsname, 'eargs': e.args[0]}, extra={'crawler': crawler}) # 打印启用的中间件信息 logger.info("Enabled %(componentname)ss:\n%(enabledlist)s", {'componentname': cls.component_name, 'enabledlist': pprint.pformat(enabled)}, extra={'crawler': crawler}) # 使用从配置中获取的中间件列表实例化该中间件管理类 return cls(*middlewares)from_crawler(): 根据 Crawler 类对象来实例化中间件管理器类;利用的就是 Crawler 对象的 settings 属性值,然后调用 MiddlewareManager 类的 from_settings() 方法进行实例化;# ...class MiddlewareManager: """Base class for implementing middleware managers""" # ... def from_crawler(cls, crawler): return cls.from_settings(crawler.settings, crawler)_add_middleware():添加所管理中间件类中的方法,主要是 open_spider() 和 close_spider() 方法;在这里会更新 self.methods 属性值;# ...class MiddlewareManager: """Base class for implementing middleware managers""" # ... def _add_middleware(self, mw): if hasattr(mw, 'open_spider'): self.methods['open_spider'].append(mw.open_spider) if hasattr(mw, 'close_spider'): self.methods['close_spider'].appendleft(mw.close_spider)其他方法:下面的这些方法都是我们在前面 scrapy/utils/defer.py 中介绍过的,在此就不详细展开了;# ...class MiddlewareManager: """Base class for implementing middleware managers""" # ... def _process_parallel(self, methodname, obj, *args): return process_parallel(self.methods[methodname], obj, *args) def _process_chain(self, methodname, obj, *args): # 执行回调链,依次执行,返回一个Deferred对象 return process_chain(self.methods[methodname], obj, *args) def _process_chain_both(self, cb_methodname, eb_methodname, obj, *args): return process_chain_both(self.methods[cb_methodname], self.methods[eb_methodname], obj, *args) def open_spider(self, spider): return self._process_parallel('open_spider', spider) def close_spider(self, spider): return self._process_parallel('close_spider', spider)以上就是管理中间件类的全部属性和方法。下面我们将具体看由该管理类衍生出来的下载中间件管理类,同时会重点分析下载中间件以及 Spider 中间件的执行流程。
- 3. 中间表 聊完了外键,我们来介绍本节的重点 —— 中间表。先引入一个场景,有两张数据表,分别是 imooc_user(用户表)和 imooc_class(课程表),对于用户来说,他(她)可以购买多门课程,而对于课程来说,它也可以被多个用户购买。这样就产生了一个难题,用户与课程之间是典型的多对多关系,因此我们需要另一张表(imooc_user_class)来记录用户与课程之间的购买关系。类似于 imooc_user_class 这样的关系表,我们称之为中间表。对于它们三者,我们可以这样设计(省略诸多字段信息):DROP TABLE IF EXISTS imooc_user;CREATE TABLE imooc_user( id int PRIMARY KEY, username varchar(20), age int);DROP TABLE IF EXISTS imooc_class;CREATE TABLE imooc_class( id int PRIMARY KEY, name varchar(50), description varchar(100));DROP TABLE IF EXISTS imooc_user_class;CREATE TABLE imooc_user_class( id int PRIMARY KEY, user_id int NOT NULL, class_id int NOT NULL);从 imooc_user_class 表的结构上看,它的主体其实就是一些外键的组合。这也是中间表与外键的关系。它们之间的关系如下图所示:
struts2中$相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议