struts的理解

工作流程

 

1.客户端提交一个HttpServletRequest请求(action或JSP页面)。

 

2.请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等。

 

3.FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器。

 

4.请求被发送到FilterDispatcher后,FilterDispatcher询问ActionMapper时候需要调用某个action来处理这个Request。

 

5.如果ActionMapper决定需要调用某个action,FilterDispatcher则把请求交给ActionProxy进行处理。

 

6.ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到调用的action类。

 

7.ActionProxy创建一个ActionInvocation实例,通过代理模式调用Action。

 

8.action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Intercepter拦截器。

 

9.最后ActionInvocation实例,负责根据struts.xml中配置result元素,找到与之相对应的result,决定进一步输出。

 

 

 

基本简要流程:


1、客户端向Servlet容器(例如Tomcat)发送请求

2、这个请求经过一系列的过滤器(Filter)

3、接着FilterDispatcher(现已过时)被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。(此处采用了AOP,一系列的拦截器即通知,Action的方法为切入点)

8、Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper




struts2项目配置流程


1.新建web static project



如果没有tomcat的类库,需要添加。

 

2.将struts2的jar文件复制到WebContent/WEB-INF/lib目录中

 


 

3.配置web.xml文件



 <?xml version="1.0" encoding="UTF-8"?>

Xml代码   收藏代码
  1. <web-app xmlns="http://java.sun.com/xml/ns/javaee"   
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  4.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">  
  5.   
  6.     <display-name>SSH2</display-name>  
  7.   
  8.     <filter>  
  9.         <filter-name>struts2</filter-name>  
  10.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  11.     </filter>  
  12.   
  13.     <filter-mapping>  
  14.         <filter-name>struts2</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  
  17.   
  18.     <welcome-file-list>  
  19.         <welcome-file>index.html</welcome-file>  
  20.         <welcome-file>index.jsp</welcome-file>  
  21.     </welcome-file-list>  
  22. </web-app>  

web.xml中url-pattern的3种写法 

① 完全匹配
  <url-pattern>/test/list.do</url-pattern>  

② 路径匹配
  <url-pattern>/*</url-pattern> struts2匹配根路径下的全部请求

③ 扩展名匹配
  <url-pattern>*.do</url-pattern> struts1
  <url-pattern>*.html</url-pattern> 匹配全部html结尾的请求
  <url-pattern>*</url-pattern> 不能用*,否则报错

 


4.新建login.jsp,error.jsp,welcome.jsp文件

 

login.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"

Jsp代码   收藏代码
  1.     pageEncoding="UTF-8"%>  
  2. <%@taglib prefix="s" uri="/struts-tags" %>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <title>用户登录</title>  
  7. </head>  
  8. <body>  
  9. <s:form action="login">  
  10.     <s:textfield name="username" key="user"></s:textfield>  
  11.     <s:textfield name="password" key="pwd"></s:textfield>  
  12.     <s:submit key="login"/>  
  13. </s:form>  
  14. </body>  
  15. </html>  

 welcome.jsp

Java代码   收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@taglib prefix="s" uri="/struts-tags" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <title>用户登录</title>  
  8. </head>  
  9. <body>  
  10. 登录成功  
  11. </body>  
  12. </html>  

 error.jsp

Java代码   收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@taglib prefix="s" uri="/struts-tags" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <title>用户登录</title>  
  8. </head>  
  9. <body>  
  10. 登录失败  
  11. </body>  
  12. </html>  
 

 

5.src目录下新建struts.xml、message.properties文件

 

struts.xml

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.   
  8.     <constant name="struts.enable.DynamicMethodInvocation" value="true" />  
  9.     <constant name="struts.devMode" value="true" />  
  10.       
  11.     <constant name="struts.custom.i18n.resources" value="message" />  
  12.     <constant name="struts.i18n.encoding" value="UTF-8" />  
  13.   
  14.     <!-- Add packages here -->  
  15.     <package name="auth" extends="struts-default">  
  16.         <action name="login" class="com.tim4lover.ssh2.auth.action.LoginAction">  
  17.             <result name="input">/login.jsp</result>  
  18.             <result name="error">/error.jsp</result>  
  19.             <result name="success">/welcome.jsp</result>  
  20.         </action>  
  21.     </package>  
  22. </struts>  

 message.properties

Java代码   收藏代码
  1. loginPage=登录页面  
  2. errorPage=错误页面  
  3. successPage=成功页面  
  4. failTip=对不起,您不能登录!  
  5. successTip=欢迎,{0},您已经登录!  
  6. user=用户名  
  7. pwd=密码  
  8. login=登录  
 

 

message.properties文件的编码格式为utf-8,还必须用native2ascii命令来处理该国际化资源文件。

src目录下新建 toUTF-8.bat,运行。

 

toUTF-8.bat

Java代码   收藏代码
  1. native2ascii -encoding UTF-8 message.properties message_zh_CN.properties  
 

运行,生成message_zh_CN.properties

 

6.新建action类  

Java代码   收藏代码
  1. package com.tim4lover.ssh2.auth.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionContext;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5.   
  6. public class LoginAction extends ActionSupport {  
  7.     private static final long serialVersionUID = 1L;  
  8.   
  9.     private String username;  
  10.     private String password;  
  11.   
  12.     @Override  
  13.     public String execute() throws Exception {  
  14.         if("admin".equals(username) && "123456".equals(password)) {  
  15.             ActionContext.getContext().getSession().put("user", getUsername());  
  16.             return SUCCESS;  
  17.         }else {  
  18.             return ERROR;  
  19.         }  
  20.     }  
  21.   
  22.     public String getUsername() {  
  23.         return username;  
  24.     }  
  25.   
  26.     public void setUsername(String username) {  
  27.         this.username = username;  
  28.     }  
  29.   
  30.     public String getPassword() {  
  31.         return password;  
  32.     }  
  33.   
  34.     public void setPassword(String password) {  
  35.         this.password = password;  
  36.     }  
  37.       
  38. }  
 

 

7.配置struts.xml,action到jsp的映射。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
   1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的action去处理。    一个扩展知识点:struts的配置文件可以有多个,可以按模块配置各自的配置文件,这样可以防止配置文件的过度膨胀;    2. ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean对象呢?看配置文件。    3.要说明的是, ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定,(看配置文件)作者为什么将这里命名为input属性,而不是error属性,我们后面结合实际的运行效果进行分析。    4.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值