一。

首先服务器接收到url请求之后,会先到web.xml中运行过滤器,看看符合什么样的请求可以被接受。

<filter>
      <filter-name>Struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>Struts2</filter-name>
      <url-pattern>*</url-pattern>
  </filter-mapping>

像*这种的话说明只要是url输入的请求都可以被接受运行,如果是*.action的话说明只有后缀为action的请求才会被处理。

然后再到struts.xml中去匹配是否有配置此action,如果有的话就去执行。比如说我们的请求路径为localhost:8080/a/b/register.action,那么就会去struts.xml中看有没有此路径下的action,如果没有的话就看localhost:8080/a/register.action里面有没有,知道没有找到为止。这就涉及到命名空间的问题

找到相应的action之后就去处理相应的请求

 

二。

如果有涉及到表单提交的问题,我们一般是先获得表单提交的页面(不是先过滤请求),这个的话只要部署了项目,我们自然可以访问得到,然后点击“提交”的时候就会去处理form表单的action,看看这个请求是否满足过滤器的要求,然后接着做“一”的步骤

这个时候url会由访问时候的路径变成web.xml中过滤器要求的url,实现了跳转。

 

报错及解决办法

 

Unable to load configuration. - action - file:/D:/workspace/Struts2_0100/WebRoot/WEB-INF/classes/struts.xml:38:66
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Disp
9 27, 2011 4:07:17 午後 org.apache.catalina.core.StandardContext filterStart
重大: フィルタ struts2 の起動中の例外です
Unable to load configuration. - action - file:/D:/workspace/Struts2_0100/WebRoot/WEB-INF/classes/struts.xml:38:66
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:437)
   
    at java.lang.Thread.run(Unknown Source)
Caused by: Unable to load configuration. - action - file:/D:/workspace/Struts2_0100/WebRoot/WEB-INF/classes/struts.xml:38:66
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)
出现问题的原因:是jar包的问题,那个spring-struts-plugin.jar没有自动发布到服务器上,然后我手动添加到服务器上就没问题了


 2.

    <constant name="struts2.objectFactory" value="spring" />   !表示交给Spring管理
    <package name="Spring_Hibernate" extends="struts-default">
        <action name="register" method="execute" class="userAction">   !class的名字是bean里面的id名
            <result name="success">/success.jsp</result>
            <result name="fail">/fail.jsp</result>
        </action>
        

3.解决插入数据库的中文乱码的问题

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

只要保持所有的编码都是统一的就不会出现乱码的问题,一般采用UTF-8也能处理中文,一个中文字用utf-8处理是3个字节