⑴ 使用struts2.1需要編寫過濾器嗎
項目中使用來Struts2同樣需要源在web.xml配置過濾器,用來截取請求,轉到Struts2的Action進行處理。
注意:如果在2.1.3以前的Struts2版本,過濾器使用org.apache.struts2.dispatcher.FilterDispatcher。否則使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。從Struts2.1.3開始,將廢棄ActionContextCleanUp過濾器,而在StrutsPrepareAndExecuteFilter過濾器中包含相應的功能。
三個初始化參數配置:
config參數:指定要載入的配置文件。逗號分割。
actionPackages參數:指定Action類所在的包空間。逗號分割。
configProviders參數:自定義配置文件提供者,需要實現ConfigurationProvider介面類。逗號分割。
⑵ struts2 自帶過濾器
實際上,struts2中叫做攔截器它起到類似過濾器的作用但不是過濾器實際上,是一個核心控制器servlet
⑶ 如何配置struts2的過濾器
你說的是攔截器吧
第一步:創建一個類實現Intercepter介面並實現其中方法
第二步:注冊攔截器(在struts.xml)如:
<package name="cust"
namespace="/cust"
extends="struts-default">
<interceptors>
<!-- 注冊攔截器 -->
<interceptor name="first"
class="com.interceptor.FirstInterceptor"/>
<interceptor name="second"
class="com.interceptor.SecondInterceptor"/>
<!-- 注冊攔截器棧,將所有攔截器打包在一起 -->
<interceptor-stack name="mystack">
<interceptor-ref name="first"/>
<interceptor-ref name="second"/>
<!-- 引用自定義的攔截器時,會使struts2自帶的攔截器失效
因此,要將默認的攔截器加入到自定義的攔截器棧中 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!--第三步: 引用攔截器 ,
<action name="toUpdateCustomer"
class="com.action.ToUpdateCustomerAction"
method="execute">
<!-- 引用攔截器 ,
<interceptor-ref name="first"/>
<interceptor-ref name="first"/>-->
<!-- 引用攔截器棧,會一次將所有的攔截器引用 -->
<interceptor-ref name="mystack"/>
<result name="success">
/WEB-INF/cust/update_customer.jsp
</result>
</action>
</package>
供參考
⑷ struts2怎樣實現一個替換處理請求的action的攔截器
這個不用攔截器啊,你直接在struts.xml中將abc.action這個訪問的請求重新配給OtherAction就行了啊
⑸ ssh2框架中, 為什麼我們要在web.xml中配置struts的過濾器要詳細一點,回答的好,加分
struts2的過濾器的目的是過濾符合要求的請求,如我們配置以action結尾的請求,全部使用專struts2的請求
你有沒有疑惑屬過,為什麼struts2的標簽了、領域模型、數據綁定等這些內容如何實現的?為什麼我們以前寫普通web程序的時候,需要在servlet裡面接受參數,使用了struts2就不用手動的接受了?
這些都是struts2的過濾器的功能,過濾器接受到這些請求,並自動的根據我們在struts-config.xml裡面的配置信息將這些參數進行處理,過濾器對常用的操作進行了封裝,減少了我們的工作量
⑹ java 怎麼重寫struts2 的strutsexecutefilter過濾器
在struts2中的攔截器的定義是先定義一個類實現Interceptor介面,重寫方法。下面是實現登錄驗證的攔截器。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="mystruts" extends="struts-default">
<interceptors>
<interceptor name="LoginInterceptors"class="com.kaishengit.interceptors.LoginInterceptors">
<param name="excludeName">execute,login,index</param>
<param name="sessionName">currUser</param>
</interceptor>
<interceptor-stack name="myInterceptors">
<interceptor-ref name="LoginInterceptors"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptors"></default-interceptor-ref>
<!-- 適用於所有的action -->
<global-results>
<result name="login" type="redirect">index.jsp</result>
</global-results>
<!-- AppAction -->
<action name="index" class="com..web.AppAction">
<result>/WEB-INF/views/index.jsp</result>
</action>
<action name="login" class="com.web.AppAction" method="login">
<result type="redirectAction">main</result>
<result name="input" type="">/WEB-INF/views/index.jsp</result>
</action>
</package>
</struts>
public class LoginInterceptors extends AbstractInterceptor{
private static final long serialVersionUID = 1L;
private String sessionName;
private String excludeName;
private List<String> list;
public List<String> strlsit(String str){
String[] s = str.split(",");
List<String> list = new ArrayList<String>();
for(String ss : s){
list.add(ss.trim());
}
return list;
}
@Override
public void init() {
list = strlsit(excludeName);
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String actionName = invocation.getProxy().getActionName();
if(list.contains(actionName)){
//請求的是合法
return invocation.invoke();
}else {
//查看session
Map<String,Object> session = invocation.getInvocationContext().getSession();
User user = (User) session.get(sessionName);
if(user==null){
return "login";
}else {
return invocation.invoke();
}
}
}
public String getSessionName() {
return sessionName;
}
public void setSessionName(String sessionName) {
this.sessionName = sessionName;
}
public String getExcludeName() {
return excludeName;
}
public void setExcludeName(String excludeName) {
this.excludeName = excludeName;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
}
當調用除了execute,login,index三個方法時,先驗證是否登錄,如果沒有登錄,調回登陸頁。
Action實現驗證參數值,先讓action繼承ActionSupport,
因為ActionSupport實現了Validateable介面,再
重寫。validateable方法。Validateable方法是空方法,當login方法調用前驗證是否空值,定義方法validateLogin(),
以後和業務有關的驗證方法定義都是validatexxx(),xxx是執行的業務方法。
public class AppAction extends ActionSupport implements SessionAware,ServletRequestAware {
private static final long serialVersionUID = 1L;
private Map<String,Object> session;
private HttpServletRequest request;
private User user;
private UserService userService = new UserService();
/**
* 去登錄頁面
* @return
*/
public String execute() {
return "success";
}
/**
* 登錄
* @return
*/
public String login() {
if(user==null){
return "login";
}else {
User loginUser = userService.login(user);
if(loginUser == null) {
return "login";
} else {
//Map<String,Object> session = ActionContext.getContext().getSession();
session.put("currUser", loginUser);
// = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
//HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
return "success";
}
}
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
//get set
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void validateLogin() {
if(user==null){
return;
}
System.out.println("================validateLogin==========");
if("".equals(user.getUsername())||user.getUsername()==null){
addFieldError("userName", "名稱必填");
}
if("".equals(user.getPassword())||user.getPassword()==null){
addFieldError("password", "密碼不能空");
}
}
public void validate() {
System.out.println("==========================");
}
}
在頁面上寫<s:fielderror fieldName="userName" theme="simple"/>
<s:fielderror fieldName="password" theme="simple"/>
得到驗證信息
⑺ struts2中怎樣實現過濾jsp頁面的過濾器
如下所示:
package test;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class LoginFilter implements Filter
{
public void destroy()
{
}
public void doFilter(ServletRequest req, ServletResponse rsp,
FilterChain chain) throws IOException, ServletException
{
chain.doFilter(req, rsp);
}
public void init(FilterConfig arg0) throws ServletException
{
}
}
在web.xml裡面配置
<filter>
<filter-name>logFilter</filter-name>
<filter-class>test.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
⑻ struts2 如何寫過濾器
答案:那年的冬天特別寒冷,
⑼ struts2過濾器
WEB.xml中配置struts2的代碼片段
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'/*'是攔截所有的url,你這里可以配置你的過濾規則的啊(例如/*.jsp、/*_aaa.jsp等),但是版一般不需要修改的,改權了以後,擴展起來會給你帶來一些的不必要的麻煩的
⑽ Struts2入口過濾器配置
本人試驗了一下配置成*.action index.jsp是可行的,不過一般情況下是配置成/*的 然後結合版struts.properties文件裡面的struts.action.extension(定義擴權展名,例如.do,.action等等,多個擴展名中間用逗號隔開)值使用,樓主你最好檢查下你的伺服器啟動日誌 看看項目是否正常啟動。