1. Intercepteur personnalisé
1. Architecture

Copier après la connexion
Copier après la connexion
3. API d'intercepteur
Copier après la connexion
Copier après la connexion
Copier après la connexion
4. Configuration de l'intercepteur
Copier après la connexion
1 2 3 | <package name= "inter" namespace = "/" extends = "struts-default" ><interceptors><!-- 1.注册拦截器 --><interceptor name= "myInter3" class = "cn.itcast.a_interceptor.MyInterceptor3" ></interceptor><!-- 2.注册拦截器栈 --><interceptor-stack name= "myStack" ><!-- 自定义拦截器引入(建议放在20个拦截器之前) --><interceptor-ref name= "myInter3" ><!-- 指定哪些方法不拦截
<param name= "excludeMethods" >add, delete </param> --> <!-- 指定哪些方法需要拦截 --> <param name= "includeMethods" >add, delete </param></interceptor-ref><!-- 引用默认的拦截器栈(20个) --><interceptor-ref name= "defaultStack" ></interceptor-ref></interceptor-stack> </interceptors><!-- 3.指定包中的默认拦截器栈 -->< default -interceptor-ref name= "myStack" ></ default -interceptor-ref><action name= "Demo1Action_*" class = "cn.itcast.a_interceptor.Demo1Action" method= "{1}" ><!-- 为Action单独指定走哪个拦截器(栈)
<interceptor-ref name= "myStack" ></interceptor-ref>--><result name= "success" type= "dispatcher" >/index.jsp</result></action></package>
|
Copier après la connexion
2. balise struts2
1. Système de balises
1 | <!-- 补充知识:定义全局结果集 -->< global -results><result name= "toLogin" type= "redirect" >/login.jsp</result></ global -results>
|
Copier après la connexion
2. Structure des balises struts2
3. Balises de contrôle
Préparer l'action puis allez sur jsp pour pratiquer les balises struts2 
Commencez à pratiquer les balises de contrôle :
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Demo2Action extends ActionSupport { public String execute() throws Exception {
List<String> list = new ArrayList<>();
list.add( "tom" );
list.add( "jerry" );
list.add( "jack" );
list.add( "rose" );
list.add( "hqy" );
ActionContext.getContext().put( "list" , list); return SUCCESS;
}
}
|
Copier après la connexion
4. Balises de données
1 | <%@ taglib prefix= "s" uri= "/struts-tags" %><!-- 遍历标签 iterator --><!-- ------------------------------------- --><s:iterator value= "#list" ><s:property /><br></s:iterator><!-- ------------------------------------- --><hr><s:iterator value= "#list" var = "name" ><s:property value= "#name" /><br></s:iterator><!-- ------------------------------------- --><hr><s:iterator begin= "1" end = "100" step= "1" ><s:property />|</s:iterator><!-- ------------------ if else elseif ------------------- --><hr><s: if test= "#list.size()==4" >list长度为4!</s: if ><s: elseif test= "#list.size()==3" >list长度为3!</s: elseif ><s: else >list不3不4!</s: else >
|
Copier après la connexion
5. Balises de formulaire
1 | <!-- ------------------property 配合ognl表达式页面取值 ------------------- --><hr><s:property value= "#list.size()" /><s:property value= "#session.user.name" />
|
Copier après la connexion
6. Balises sans formulaire
Ajouter un message d'erreur en action
1 2 3 | <!-- struts2表单标签 --><!-- 好处1: 内置了一套样式. --><!-- 好处2: 自动回显,根据栈中的属性 --><!-- theme:指定表单的主题
xhtml:默认
simple:没有主题 --><s:form action= "Demo3Action" namespace = "/" theme= "xhtml" ><s:textfield name= "name" label= "用户名" ></s:textfield><s:password name= "password" label= "密码" ></s:password><s:radio list= "{'男','女'}" name= "gender" label= "性别" ></s:radio><s:radio list= "#{1:'男',0:'女'}" name= "gender" label= "性别" ></s:radio><s:checkboxlist list= "#{2:'抽烟',1:'喝酒',0:'烫头'}" name= "habits" label= "爱好" ></s:checkboxlist><s:select list= "#{2:'大专',1:'本科',0:'硕士'}" headerKey= "" headerValue= "---请选择---" name= "edu" label= "学历" ></s:select><s:file name= "photo" label= "近照" ></s:file><s:textarea name= "desc" label= "个人简介" ></s:textarea><s:submit value= "提交" ></s:submit></s:form>
|
Copier après la connexion
Supprimer le message d'erreur
1 | this.addActionError( "我是错误信息 哈哈哈" );
|
Copier après la connexion
3. Pratique : Fonction de connexion
Copier après la connexion
Code de base :
Code d'action :
Code de couche de service :
1 2 3 4 5 6 | public class UserAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); private UserService us = new UserServiceImpl(); public String login() throws Exception {
}
@Overridepublic User getModel() { return user;
}
}
|
Copier après la connexion
Code de couche Dao :
1 2 3 4 5 6 | public class UserServiceImpl implements UserService { private UserDao ud = new UserDaoImpl();
@Overridepublic User login(User user) {
}
}
}
}
|
Copier après la connexion
IV. Exercice : Vérifier l'intercepteur de connexion
Code principal :
1 2 3 4 | public class UserDaoImpl implements UserDao {
@Overridepublic User getByUserCode(String user_code) {
}
}
|
Copier après la connexion
Code du fichier de configuration struts.xml :
Connaissances supplémentaires : Vérifier si le La page parent de la page actuelle est la vôtre. Sinon, passez à la résolution du problème d'imbrication des pages.
1 2 3 4 5 6 | <?xml version= "1.0" encoding= "UTF-8" ?><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd" ><struts><!-- 指定struts2是否以开发模式运行
1.热加载主配置.(不需要重启即可生效)
2.提供更多错误信息输出,方便开发时的调试 --><constant name= "struts.devMode" value= "true" ></constant><package name= "crm" namespace = "/" extends = "struts-default" ><interceptors><!-- 注册拦截器 --><interceptor name= "loginInterceptor" class = "cn.itheima.web.interceptor.LoginInterceptor" ></interceptor><!-- 注册拦截器栈 --><interceptor-stack name= "myStack" ><interceptor-ref name= "loginInterceptor" ><param name= "excludeMethods" >login</param></interceptor-ref><interceptor-ref name= "defaultStack" ></interceptor-ref></interceptor-stack></interceptors><!-- 指定包中的默认拦截器栈 -->< default -interceptor-ref name= "myStack" ></ default -interceptor-ref><!-- 定义全局结果集 -->< global -results><result name= "toLogin" type= "redirect" >/login.jsp</result></ global -results>< global -exception-mappings><!-- 如果出现java.lang.RuntimeException异常,就将跳转到名为error的结果 --><exception-mapping result= "error" exception= "java.lang.RuntimeException" ></exception-mapping></ global -exception-mappings>
<action name= "CustomerAction_*" class = "cn.itheima.web.action.CustomerAction" method= "{1}" ><result name= "list" >/jsp/customer/list.jsp</result><result name= "toList" type= "redirectAction" > <param name= "actionName" >CustomerAction_list</param> <param name= "namespace" >/</param> </result></action><action name= "UserAction_*" class = "cn.itheima.web.action.UserAction" method= "{1}" ><result name= "toHome" type= "redirect" >/index.htm</result><result name= "error" >/login.jsp</result></action></package></struts>
|
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!