2013年10月29日星期二

SSH2 server retention value , the question is not clear

Previously are using SSH, a recent project with the SSH2, build a good , the program can run , but found a problem , I really do not understand a bit , ask.

Maybe look at the title is not very clear what the problem is , or illustrate it:
In MODEL, ACTION, BO , the definition of the class


class XModel {
   private long id;
   private String name;
   //以下的get 、set的函数就不写了
   //......
}

class XAction extends ActionSupport{
    
     XBo xbo;
     XModel xmodel; 

     public String list(){

         List<XModel> l =xbo.getList(xmodel);
         //打印成为JSON......
         return null;

     } 
     //以下的get 、set的函数就不写了
     //......

}

class Bo{
   //.....
   public List<XModel> list(xmodel){
    
       String hql="...... ";
       /// 查询时,以model.id,xmodel.name作为条件
       List<XModel> l;
       if(!nullToSpace(xmodel.name).equal("")){
           hql +=" where name=? ";
           l=this.xdao.find(hql,new Object[]{xmodel.name}); 
       }else
            l=this.xdao.find(hql);

      return l;
   }
   //......

}


So I use the computer A, when the query is initiated at the front end , submitted a query : xmodel.name = xx1,

Then my computer B , the access to this inquiry page, did not submit any query ; but found that the server retains the value of this xmodel.name = xx1 , returned results with the results on the computer the same as A this is what is wrong ?
------ Solution ---------------------------------------- ----
first , the second request in the execute method , the received xmodel object print look ( before the query )
Second, add a breakpoint to setXmodel way , look into a second did .
------ Solution ---------------------------------------- ----
struts request is a separate thread , so you will not have a shared module questions, suggestions, carefully testing .
------ Solution ---------------------------------------- ----
this question is one step debug it. A submission form is on the first or direct access to the url, direct url to access your words are executed get. Also you put that on the A value is set to 2 , then B and then visit to try to see if it will turn into 2
------ Solution -------------- ------------------------------

  
first request , I submitted to the parameters of the xmodel.name = xx1, XACTION variables xmodel be instantiated,   
second request , we have to submit anything , theoretically xmodel should be NULL ( because if my first request, if you do not submit xmodel.name = xx1, then xmodel == null), but the print out or xmodel.name = xx1   
 
The second time I said to setXmodel () method to add a breakpoint or add print statements to see if the implementation , you do not ?
------ Solution ---------------------------------------- ----
tSysDept What the hell , why is static.
------ Solution ---------------------------------------- ----
I feel this relationship with ssh2 did not set it ! It should be a matter of procedure , or debug it to find the problem , the top !
------ Solution ---------------------------------------- ----
sometimes less or more than a headache to write this ah.
------ For reference only -------------------------------------- -
this situation has appeared many times , is not configured deal with the problem ?
struts interceptor configuration

  <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> 


struts.properties file configuration

### Struts default properties
###(can be overridden by a struts.properties file in the root of the classpath)
###

### Specifies the Configuration used to configure Struts 
### one could extend org.apache.struts2.config.Configuration
### to build one's customize way of getting the configurations parameters into Struts
# struts.configuration=org.apache.struts2.config.DefaultConfiguration

### This can be used to set your default locale and encoding scheme
# struts.locale=en_US
struts.i18n.encoding=utf-8

### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
###       Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here  
struts.objectFactory = spring

### specifies the autoWiring logic when using the SpringObjectFactory.
### valid values are: name, type, auto, and constructor (name is the default)
struts.objectFactory.spring.autoWire = name

### indicates to the struts-spring integration if Class instances should be cached
### this should, until a future Spring release makes it possible, be left as true
### unless you know exactly what you are doing!
### valid values are: true, false (true is the default)
struts.objectFactory.spring.useClassCache = true

### if specified, the default object type determiner can be overridden here
### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
###       Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here
### Note: By default, com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer is used which handles type detection
###       using generics. com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer was deprecated since XWork 2, it's
###       functions are integrated in DefaultObjectTypeDeterminer now.
###       To disable tiger support use the "notiger" property value here.
#struts.objectTypeDeterminer = tiger
#struts.objectTypeDeterminer = notiger

### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=20971520

### Load custom property files (does not override struts.properties!)
# struts.custom.properties=application,org/apache/struts2/extension/custom

### How request URLs are mapped to and from actions
#struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper

### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
struts.action.extension=do

### Used by FilterDispatcher
### If true then Struts serves static content from inside its jar. 
### If false then the static content must be available at <context_path>/struts
struts.serve.static=true

### Used by FilterDispatcher
### This is good for development where one wants changes to the static content be
### fetch on each request. 
### NOTE: This will only have effect if struts.serve.static=true
### If true -> Struts will write out header for static contents such that they will
###             be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
###             headers).
### If false -> Struts will write out header for static contents such that they are
###            NOT to be cached by web browser (using Cache-Content, Pragma, Expires
###            headers)
struts.serve.static.browserCache=true

### Set this to false if you wish to disable implicit dynamic method invocation
### via the URL request. This includes URLs like foo!bar.action, as well as params
### like method:bar (but not action:foo). 
### An alternative to implicit dynamic method invocation is to use wildcard 
### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
struts.enable.DynamicMethodInvocation = true

### Set this to true if you wish to allow slashes in your action names.  If false,
### Actions names cannot have slashes, and will be accessible via any directory
### prefix.  This is the traditional behavior expected of WebWork applications.
### Setting to true is useful when you want to use wildcards and store values
### in the URL, to be extracted by wildcard patterns, such as 
### <action name="*/*" method="{2}" class="actions.{1}"> to match "/foo/edit" or 
### "/foo/save".
struts.enable.SlashesInActionNames = false

### use alternative syntax that requires %{} in most places
### to evaluate expressions for String attributes for tags
struts.tag.altSyntax=true

### when set to true, Struts will act much more friendly for developers. This
### includes:
### - struts.i18n.reload = true
### - struts.configuration.xml.reload = true
### - raising various debug or ignorable problems to errors
###   For example: normally a request to foo.action?someUnknownField=true should
###                be ignored (given that any value can come from the web and it
###                should not be trusted). However, during development, it may be
###                useful to know when these errors are happening and be told of
###                them right away.
struts.devMode = false

### when set to true, resource bundles will be reloaded on _every_ request.
### this is good during development, but should never be used in production
struts.i18n.reload=false

### Standard UI theme
### Change this to reflect which path should be used for JSP control tag templates by default
struts.ui.theme=xhtml
struts.ui.templateDir=template
#sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix=ftl

### Configuration reloading
### This will cause the configuration to reload struts.xml when it is changed
struts.configuration.xml.reload=false

### Location of velocity.properties file.  defaults to velocity.properties
struts.velocity.configfile = velocity.properties

### Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
struts.velocity.contexts =

### Location of the velocity toolbox
struts.velocity.toolboxlocation=

### used to build URLs, such as the UrlTag
struts.url.http.port = 80
struts.url.https.port = 443
### possible values are: none, get or all
struts.url.includeParams = get

### Load custom default resource bundles
# struts.custom.i18n.resources=testmessages,testmessages2

### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
### often used for WebLogic, Orion, and OC4J
struts.dispatcher.parametersWorkaround = false

### configure the Freemarker Manager class to be used
### Allows user to plug-in customised Freemarker Manager if necessary
### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager

### Enables caching of FreeMarker templates
### Has the same effect as copying the templates under WEB_APP/templates
struts.freemarker.templatesCache=false

### Enables caching of models on the BeanWrapper
struts.freemarker.beanwrapperCache=false

### See the StrutsBeanWrapper javadocs for more information
struts.freemarker.wrapper.altMap=true

### configure the XSLTResult class to use stylesheet caching.
### Set to true for developers and false for production.
struts.xslt.nocache=false

### A list of configuration files automatically loaded by Struts
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml

### Whether to always select the namespace to be everything before the last slash or not
struts.mapper.alwaysSelectFullNamespace=false

------ For reference only ----------------------------------- ----


first request , I submitted to the parameters of the xmodel.name = xx1, XACTION variables xmodel be instantiated,
second request , we have to submit anything , theoretically xmodel should be NULL ( because if my first request, if you do not submit xmodel.name = xx1, then xmodel == null), but the print out or xmodel.name = xx1

------ For reference only ---------------------------------- -----


according to your ideas,
Results same as the original :
1, ACTION code is:

2, the first visit with GOOLE browser , submitted
tSysDept.id = 111
tSysDept.deptName = deptName01
results are as follows :

3, a second visit with IE, submit only tSysDept.id = 123
results are as follows :


Obviously, when user A when the application is made ​​inquiries , submitted tSysDept.deptName = deptName01, then the user B, after making inquiries in the A
server returns the result is tSysDept.deptName = deptName01 search results for the query condition is A needs to query results, rather than B needs to query results unless B query, submitted tSysDept.deptName =, in order to empty the server records the value of tSysDept.deptName


why not ! ! ! ? ? ? ? ?
------ For reference only -------------------------------------- -
himself atop solving
------ For reference only ----------------------------- ----------
alas , the principle is struts2 thread safety issues , depressed, the configuration properties in the ACTION add scope = "prototype" on it
---- - For reference only ---------------------------------------
knot stickers, thread all scores

没有评论:

发表评论