『壹』 chain.doFilter過濾器如果要過濾多個網頁但不是所有的網頁web.xml在配置的時候怎麼寫~~~
HttpServletRequest req = (HttpServletRequest )request;
HttpServletRequest res = (HttpServletRequest )response;
String s = req.get***url(); //----具體去試,就是每次的請求的地址
//一般都是「/項目名/***」
if(!s.equel*******("/項目名/***") && !s.equel*******("/項目名/***") ){
//如果不匹配給出的路徑,則放行
chain.doFilter(req, res);
}else{
return;
}
s.equel******* ----(最長的那一個,就是比較字元串)
在web.xml裡面把這個Filter配進去,放在其他的Filter前面
<filter-mapping>
<url-parme>/*</url-parme>
</filter-mapping>
/* 攔截所有的請求~~~~~~~~~~
都是手打,大概的在myeclipse都有提示的
這樣過濾了沒什麼好處,最好是設一個session,不然你過濾的網頁永遠都訪問不到了~~~~~~~~~~~
『貳』 易語言通用對話框 怎麼加多個過濾器
.版本 2
.程序集 窗口程序集1
.子程序 __啟動窗口_創建完畢
通用對話框1.過濾器專 = 「文本文件(屬*.txt)|*.txt|word文件(*.doc)|*.doc|MP3文件(*.mp3)|*.mp3」
通用對話框1.打開 ()
『叄』 sqlalchemy怎麼多個資料庫使用
一、開始使用:fromsqlalchemyimportcreate_enginefromsqlalchemy.ormimportsessionmakerDB_CONNECT_STRING='mysql+mysqldb://root:123@localhost/ooxx?charset=utf8'engine=create_engine(DB_CONNECT_STRING,echo=True)DB_Sess
『肆』 servlet怎麼使用多個過濾器
只需要一個過濾器,過濾所有URL,在filter類中做如下操作:代碼參考,相信你會懂的。
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainchain)throwsIOException,ServletException{
HttpServletRequestreq=(HttpServletRequest)request;
Stringuri=((HttpServletRequest)request).getRequestURI();
List<String>urilist=newArrayList<String>();
urilist.add("/UserLoginReg/DoRegisterServlet");
urilist.add("/UserLoginReg/UserManageServlet");
urilist.add("/UserLoginReg/FindUserServlet");
if(urilist.contains(uri)==true){
HttpSessionsession=req.getSession(true);
//從session里取的用戶名信息
UserBeanuser=(UserBean)session.getAttribute("userall");
//判斷如果沒有取到用戶信息,就跳轉到登陸頁面
if(user==null){
//跳轉到登陸頁面
request.setAttribute("info","請先登錄");
req.getRequestDispatcher("WEB-INF/jsp/login.jsp").forward(request,
response);
}else{
//已經登陸,繼續此次請求
chain.doFilter(request,response);
}
}else{
//已經登陸,繼續此次請求
chain.doFilter(request,response);
}
}
『伍』 配置多個<filter-mapping>部分servlet並未過濾
Filter開發分為二個步驟:
1.編寫java類實現Filter介面,並實現其doFilter方法。
2.在 web.xml 文件中使用<filter>和<filter-mapping>元素對編寫的filter類進行注冊,並設置它所能攔截的資源。
Filter鏈
在一個web應用中,可以開發編寫多個Filter,這些Filter組合起來稱之為一個Filter鏈。
web伺服器根據Filter在web.xml文件中的注冊順序,決定先調用哪個Filter,當第一個Filter的doFilter方法被調用時,web伺服器會創建一個代表Filter鏈的FilterChain對象傳遞給該方法。在doFilter方法中,開發人員如果調用了FilterChain對象的doFilter方法,則web伺服器會檢查FilterChain對象中是否還有filter,如果有,則調用第2個filter,如果沒有,則調用目標資源。
Filter鏈實驗(查看filterChain API文檔)
Filter的部署-注冊Filter
<filter>
<filter-name>testFitler</filter-name>
<filter-class>org.test.TestFiter</filter-class>
<init-param>
<param-name>word_file</param-name>
<param-value>/WEB-INF/word.txt</param-value>
</init-param>
</filter>
1.<filter-name>用於為過濾器指定一個名字,該元素的內容不能為空。
2.<filter-class>元素用於指定過濾器的完整的限定類名。
3.<init-param>元素用於為過濾器指定初始化參數,它的子元素<param-name>指定參數的名字,<param-value>指定參數的值。在過濾器中,可以使用FilterConfig介面對象來訪問初始化參數。
<filter-mapping>元素用於設置一個 Filter 所負責攔截的資源。一個Filter攔截的資源可通過兩種方式來指定:Servlet 名稱和資源訪問的請求路徑
<filter-name>子元素用於設置filter的注冊名稱。該值必須是在<filter>元素中聲明過的過濾器的名字
<url-pattern>設置 filter 所攔截的請求路徑(過濾器關聯的URL樣式)
<servlet-name>指定過濾器所攔截的Servlet名稱。
<dispatcher>指定過濾器所攔截的資源被 Servlet 容器調用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認REQUEST。用戶可以設置多個<dispatcher> 子元素用來指定 Filter 對資源的多種調用方式進行攔截。
<dispatcher> 子元素可以設置的值及其意義:
REQUEST:當用戶直接訪問頁面時,Web容器將會調用過濾器。如果目標資源是通過RequestDispatcher的include()或forward()方法訪問時,那麼該過濾器就不會被調用。
INCLUDE:如果目標資源是通過RequestDispatcher的include()方法訪問時,那麼該過濾器將被調用。除此之外,該過濾器不會被調用。
FORWARD:如果目標資源是通過RequestDispatcher的forward()方法訪問時,那麼該過濾器將被調用,除此之外,該過濾器不會被調用。
ERROR:如果目標資源是通過聲明式異常處理機制調用時,那麼該過濾器將被調用。除此之外,過濾器不會被調用。
Tip:Filter的部署—映射Filter示例:
<filter-mapping>
<filter-name>testFilter</filter-name>
<url-pattern>/test.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>testFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
FilterConfig介面:
用戶在配置filter時,可以使用<init-param>為filter配置一些初始化參數,當web容器實例化Filter對象,調用其init方法時,會把封裝了filter初始化參數的filterConfig對象傳遞進來。因此開發人員在編寫filter時,通過filterConfig對象的方法,就可獲得:
String getFilterName():得到filter的名稱。
String getInitParameter(String name): 返回在部署描述中指定名稱的初始化參數的值。如果不存在返回null.
Enumeration getInitParameterNames():返回過濾器的所有初始化參數的名字的枚舉集合。
public ServletContext getServletContext():返回Servlet上下文對象的引用。
『陸』 sqlalchemy能不能做多條件的批量查詢
知道關聯式
再10W算太
關聯相關欄位建立相應索引
where條件欄位建立相應索引
其實
主要看語句寫才能確定建立索引
『柒』 當定義多個過濾器時,執行的順序是什麼樣的
filter和攔截器的區別和執行順序
1.Filter過濾器只過濾jsp文件不過濾action請求解決回方案
解決辦法:在web.xml中將答filter的配置放在struts2配置的前面。
2.攔截器與Filter的區別
Spring的攔截器與Servlet的Filter有相似之處,比如二者都是AOP編程思想的體現,都能實現許可權檢查、日誌記錄等。不同的是:
使用范圍不同:Filter是Servlet規范規定的,只能用於Web程序中。而攔截器既可以用於Web程序,也可以用於Application、Swing程序中。
規范不同:Filter是在Servlet規范中定義的,是Servlet容器支持的。而攔截器是在Spring容器內的,是Spring框架支持的。
使用的資源不同:同其他的代碼塊一樣,攔截器也是一個Spring的組件,歸Spring管理,配置在Spring文件中,因此能使用Spring里的任何資源、對象,例如Service對象、數據源、事務管理等,通過IoC注入到攔截器即可;而Filter則不能。
『捌』 如何使用flask-sqlalchemy 進行多對多查詢
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
sc = db.Table('sc',
db.Column('sno', db.String(10), db.ForeignKey('students.sno')),
db.Column('cno', db.String(10), db.ForeignKey('courses.cno'))
)
class Students(db.Model):
__tablename__ = 'students'
sno = db.Column(db.String(10), primary_key=True)
sname = db.Column(db.String(10))
class Course(db.Model):
__tablename__ = 'courses'
cno = db.Column(db.String(10), primary_key=True)
cname = db.Column(db.String(10), index=True)
students = db.relationship('Student',
secondary=sc,
backref=db.backref('courses',lazy='dynamic'),
lazy='dynamic'
)
#查詢
student = Student.query.filter_by(sname=u'張三')
courses = student.courses.all() #該學生選擇的所有課程
『玖』 flask web開發遇到sqlalchemy 查詢為None怎麼解決
講資料庫操作了
創建表
首先,我們要讓Flask-SQLAlchemy 根據模型類創建資料庫。方法是使用db.create_all()
函數:
(venv) $ python hello.py shell
>>> from hello import db
>>> db.create_all()
插入行
下面這段代碼創建了一些角色和用戶:
>>> from hello import Role, User
>>> admin_role = Role(name='Admin')
>>> mod_role = Role(name='Moderator')
>>> user_role = Role(name='User')
>>> user_john = User(username='john', role=admin_role) #User類雖然沒有role屬性,但是在上一章節裡面的Role裡面設置了一個backref屬性,就是用來反向作用的。
>>> user_susan = User(username='susan', role=user_role) #注意啊,這里的role=user_role針對的是上一章節裡面說的,對應的是模型對象!不是鍵的值!!!
>>> user_david = User(username='david', role=user_role)
模型的構造函數接受的參數是使用關鍵字參數指定的模型屬性初始值。注意,role 屬性也可使用,雖然它不是真正的資料庫列,但卻是一對多關系的高級表示。這些新建對象的id屬性並沒有明確設定,因為主鍵是由Flask-SQLAlchemy 管理的。現在這些對象只存在於Python 中,還未寫入資料庫。因此id 尚未賦值:
>>> print(admin_role.id)
None
>>> print(mod_role.id)
None
>>> print(user_role.id)
None
通過資料庫會話管理對資料庫所做的改動,在Flask-SQLAlchemy 中,會話由db.session表示。准備把對象寫入資料庫之前,先要將其添加到會話中:
>>> db.session.add(admin_role)
>>> db.session.add(mod_role)
>>> db.session.add(user_role)
>>> db.session.add(user_john)
>>> db.session.add(user_susan)
>>> db.session.add(user_david)
或者簡寫成
db.session.add_all([admin_role, mod_role, user_role,
... user_john, user_susan, user_david])
這里的session首先是和前面章節講的HTTP裡面的session不一樣的
不過我感覺作用是類似的,相當於一個緩存的作用,把實例化生成的對象存放在session裡面
最後通過commit命令執行保存在資料庫內。
db.session.commit()
接著,再去查看屬性,已經有了
>>> print(admin_role.id)
1
>>> print(mod_role.id)
2
>>> print(user_role.id)
3
修改行
在資料庫會話上調用add() 方法也能更新模型。我們繼續在之前的shell 會話中進行操作,下面這個例子把"Admin" 角色重命名為"Administrator":
>>> admin_role.name = 'Administrator'
>>> db.session.add(admin_role)
>>> db.session.commit()
刪除行
資料庫會話還有個delete() 方法。下面這個例子把"Moderator" 角色從資料庫中刪除:
>>> db.session.delete(mod_role)
>>> db.session.commit()
查詢行
Flask-SQLAlchemy 為每個模型類都提供了query 對象。最基本的模型查詢是取回對應表中
的所有記錄:
>>> Role.query.all()
[<Role u'Administrator'>, <Role u'User'>]
>>> User.query.all()
[<User u'john'>, <User u'susan'>, <User u'david'>]
使用過濾器可以配置query 對象進行更精確的資料庫查詢。下面這個例子查找角色為"User" 的所有用戶:
>>> User.query.filter_by(role=user_role).all()
[<User u'susan'>, <User u'david'>]
filter_by()等過濾器在query 對象上調用,返回一個更精確的query 對象。多個過濾器可以一起調用,直到獲得所需結果。
關系和查詢的處理方式類似。下面這個例子分別從關系的兩端查詢角色和用戶之間的一對多關系:
>>> users = user_role.users
>>> users
[<User u'susan'>, <User u'david'>]
>>> users[0].role
<Role u'User'>
這個例子中的user_role.users 查詢有個小問題。執行user_role.users 表達式時,隱含的查詢會調用all() 返回一個用戶列表。query 對象是隱藏的,因此無法指定更精確的查詢
過濾器。就這個特定示例而言,返回一個按照字母順序排序的用戶列表可能更好。在示例5-4 中,我們修改了關系的設置,加入了lazy = 'dynamic' 參數,從而禁止自動執行查詢。
示例5-4hello.py:動態關系
class Role(db.Model):
# ...
users = db.relationship('User', backref='role', lazy='dynamic')
# ...
這樣配置關系之後,user_role.users 會返回一個尚未執行的查詢,因此可以在其上添加過
濾器:
>>> user_role.users.order_by(User.username).all()
[<User u'david'>, <User u'susan'>]
>>> user_role.users.count()
2
我的理解是,通過添加lazy參數後,他生成的對象就是不直接顯示內容,而是要通過過濾器才能顯示的。
『拾』 shiro 可以有多個過濾器嗎
可以的呢。中間用「,」分割即可,從前到後,依次執行!
推薦一套完整的Shiro Demo,免回費的。
Shiro介紹答文檔:http://www.sojson.com/shiro
Demo已經部署到線上,地址是http://shiro.itboy.net
管理員帳號:admin,密碼:sojson.com 如果密碼錯誤,請用sojson。PS:你可以注冊自己的帳號,然後用管理員賦許可權給你自己的帳號,但是,每20分鍾會把數據初始化一次。建議自己下載源碼,讓Demo跑起來,然後跑的更快。