Home PC Games Linux Windows Database Network Programming Server Mobile  
           
  Home \ Programming \ ActionContext and ServletActionContext Summary     - Actual SSH port forwarding (Linux)

- Shell Script: create a function and specify a directory for download (Programming)

- Upgrading to Debian 7.6 glibc 2.15 (Linux)

- How to use the Linux kill command to kill the process / program is not responding (Linux)

- Mac OS X 10.9 compiler OCI8 module (Programming)

- How comprehensive resist attacks from the network (Linux)

- CentOS 7 install Hadoop-cdh-2.6 (Server)

- Upgrading Oracle 11.2.0.1.0 to 11.2.0.3.0 (Database)

- DataGuard the MRP can not start to analyze and solve problems (Database)

- Oracle in the add & split partition on the impact of global & local index (Database)

- Oracle 12C RAC optimizer_adaptive_features cause of data into overtime (Database)

- Linux system package manager (rpm, yum, source packages installation) (Linux)

- Django 1.8 TEMPLATE_DIRS configuration and STATICFILES_DIRS (Server)

- CentOS Linux Optimization and real production environment (Linux)

- Linux, MySQL / MariaDB Galera Cluster Setup Process (Database)

- Configuring Sublime Text Python runtime environment 2 (Linux)

- Android Studio quick overview of Gradle (Programming)

- Build ASP.NET 5 development environment in Ubuntu (Server)

- How to Check notebook CPU temperature in Ubuntu (Linux)

- Oracle 11g users to create, authorize and import dmp file (Database)

 
         
  ActionContext and ServletActionContext Summary
     
  Add Date : 2018-11-21      
         
         
         
  1. ActionContext

In Struts2 development, in addition to the request parameters are automatically set to the Action field, we often need direct access request (Request) or Session (Session) some information in Action, or even require direct JavaServlet Http request (HttpServletRequest) ., the response (HttpServletResponse) operation we need to get the value of the request parameter request "username" in the Action:

ActionContext context = ActionContext.getContext ();
Map params = context.getParameters ();
String username = (String) params.get ( "username");
ActionContext (com.opensymphony.xwork.ActionContext) is executed in the context of Action, the context can be seen as a container (in fact, we have here the container is just a Map), which is stored in the implementation of Action need to use objects. generally, our ActionContext through: ActionContext context = (ActionContext) actionContext.get (); to get a look at us here actionContext create object:

static ThreadLocal actionContext = new ActionContextThreadLocal ();

ActionContextThreadLocal is to achieve an internal ThreadLocal class .ThreadLocal be named "thread-local variable", which use the variable for each thread provides a copy of the value of a variable so that each thread can independently change their copy, and not a copy of conflicts with other threads. thus, we ActionContext in the property only in the corresponding current request thread visible, so as to ensure that it is thread safe.

By ActionContext get HttpSession: Map session = ActionContext.getContext () getSession ();.

2. ServletActionContext

ServletActionContext (. Com.opensymphony.webwork ServletActionContext), this class directly inherited ActionContext we described above, which provides direct access to the object associated with the Servlet functionality, it can be made the object are:

(1) javax.servlet.http.HttpServletRequest: HTTPservlet request object

(2) javax.servlet.http.HttpServletResponse: HTTPservlet corresponding object

(3) javax.servlet.ServletContext: Servlet context information

(4) javax.servlet.ServletConfig: Servlet configuration object

(5) javax.servlet.jsp.PageContext: Http page context

How to get Servlet related objects from ServletActionContext in:

(1) obtain the HttpServletRequest object: HttpServletRequest request = ServletActionContext getRequest ();.

(2) to obtain the HttpSession object: HttpSession session = ServletActionContext getRequest () getSession ();..

3. ServletActionContext and ActionContext Contact

ServletActionContext and ActionContext has some duplicate functions in our Action, which is how to choose what principles we follow are:? If ActionContext to achieve our function, it is best not to use ServletActionContext on, let's try not to direct the Action Servlet to access related objects.

Note: When using ActionContext One thing to note: Do not use ActionContext.getContext in the constructor's in Action (), because some of the values ​​in this time ActionContext may not set, then the value may be obtained by ActionContext null; similarly, HttpServletRequest req = ServletActionContext.getRequest () constructor should also be avoided, and do not directly req as a class variable to their assignment. As for the reason, I think it was mentioned above the static ThreadLocal actionContext = new ActionContextThreadLocal (), from here we can see ActionContext is thread-safe, but ServletActionContext inherited from ActionContext, so ServletActionContext also thread-safe, thread-safety requirements for each thread are independent, so creating req also requires independent, so ServletActionContext.getRequest () this sentence not in the constructor, and do not directly on the class, and should be placed on each specific method body (eg : login (), queryAll (), insert (), etc.), so as to ensure the establishment of an independent req generated each time the object.

4. struts2 obtained request, response, and session

(1) Non-IoC way

Method One: Use org.apache.struts2.ActionContext class, gets the current Action context object through its static methods getContext ().

ActionContext ctx = ActionContext.getContext ();

ctx.put ( "liuwei", "andy"); //request.setAttribute("liuwei "," andy ");
Map session = ctx.getSession (); // session

HttpServletRequest request = ctx.get (org.apache.struts2.StrutsStatics.HTTP_REQUEST);
HttpServletResponse response = ctx.get (org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
Careful friends can find here the session is a Map object, Struts2 in the bottom of the session it has been packaged in a Map type. We can directly manipulate objects on the Map session of the write and read operations, without having to directly manipulate HttpSession object.

Method 2: Use org.apache.struts2.ServletActionContext class

public class UserAction extends ActionSupport {
    
    // Other code fragment
    
    private HttpServletRequest req;
// Private HttpServletRequest req = ServletActionContext.getRequest (); this statement is wrong in this position, this same statement in the constructor method is wrong.

    public String login () {
        req = ServletActionContext.getRequest (); // req obtained must be implemented in specific method
        user = new User ();
        user.setUid (uid);
        user.setPassword (password);
        if (userDAO.isLogin (user)) {
            . Req.getSession () setAttribute ( "user", user);
            return SUCCESS;
        }
        return LOGIN;
    }
    public String queryAll () {
        req = ServletActionContext.getRequest (); // req obtained must be implemented in specific method
        uList = userDAO.queryAll ();
        req.getSession () setAttribute ( "uList", uList).;
        return SUCCESS;
    }
    
    // Other code fragment
}

(2) IoC mode (ie using Struts2 Aware interceptors)

To use IoC way, we must first tell IoC container (Container) want to get the wishes of an object, by implementing the appropriate interface to do so.

public class UserAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {

    private HttpServletRequest request;
    private HttpServletResponse response;

    public void setServletRequest (HttpServletRequest request) {
        this.request = request;
    }

    public void setServletResponse (HttpServletResponse response) {
        this.response = response;
    }

    public String execute () {
        HttpSession session = request.getSession ();
        return SUCCESS;
    }
}
     
         
         
         
  More:      
 
- Sshuttle A VPN-based transparent proxy that uses ssh (Server)
- Linux System Getting Started Learning: Linux command in w (Linux)
- findmnt- Looking mounted file system (Linux)
- Setting grep Highlight Matches (Linux)
- Dynamic programming Android (Programming)
- Linux non-root user uses less than 1024 ports (Linux)
- Write perfect printf (Programming)
- Linux kernel panic (because glibc result) Repair (Linux)
- To setup CentOS LAMP environment (Server)
- Linux / BSD firewall M0n0wall Profile (Linux)
- File permissions under Linux (Linux)
- Oracle 11g principle study Dataguard (Database)
- RT-11SJ run at ambient PDP-11 MACRO-11 assembly (Programming)
- Depth understanding of Python character set encoding (Programming)
- Redis logging system (Database)
- Linux System Getting Started Tutorial: How to automatically set the JAVA_HOME environment variable on Linux (Linux)
- Timing task Crontab under Linux system (Linux)
- Expert advice: Do not use the computer security IE browser (Linux)
- Linux distributed message queue RocketMQ deployment and monitoring - Dual Master (Server)
- Python method to traverse folders and file read and write (Programming)
     
           
     
  CopyRight 2002-2022 newfreesoft.com, All Rights Reserved.