zoukankan      html  css  js  c++  java
  • struts的解耦合与耦合(Struts2访问Servlet API)

    struts的解耦合与耦合都是基于struts基础案例的,所以前面的引入依赖等就不一一列举了。

    解耦合

    解耦就是把代码的关键逻辑脱离耦合,也就是这一部分代码可以脱离struts2使用。当然不可能全部解耦,例如和画面相关的部分不可能解耦。但是核心逻辑脱离是很简单的。

    第一种方法

    servlet api解耦合方法一 对Servlet API进行封装,借助ActionContext

    定制Action    要想让一个类成为action就应该继承Action

    public class UserInfo {
    private String username;
    private String password;

    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }

    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    }

    action方法
    public class LoginBeanLoginModel01 implements Action,ModelDriven<UserInfo> {
    private UserInfo info=new UserInfo();
    public String execute() throws Exception {
    if (info.getUsername().equals("admin")&& info.getPassword().equals("admin")){
    // 获取session对象
    Map<String, Object> map = ActionContext.getContext().getSession();
    map.put("username",info.getUsername());
    //获取application对象
    Map<String, Object> application = ActionContext.getContext().getApplication();
    application.put("user",info.getUsername());
    //获取request对象
    ActionContext context = ActionContext.getContext();
    context.put("users",info.getUsername());
    return SUCCESS;
    }else {
    return LOGIN;
    }
    }
    public UserInfo getModel() {
    return info;
    }

    public UserInfo getInfo() {
    return info;
    }
    public void setInfo(UserInfo info) {
    this.info = info;
    }
    }

    struts.xml的action
    <action name="loginbeanmodel01" class="cn.sjl.day01.controller.LoginBeanLoginModel01">
    <result name="success">day01/success.jsp</result>
    <result name="login">day01/loginbeanmodel01.jsp</result>
    </action>


    jsp页面
    <%@taglib prefix="s" uri="/struts-tags" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body>
    <s:form name="form1" namespace="/" method="post" action="loginbeanmodel01">
    请输入用户名: <s:textfield name="username"></s:textfield> <br/>
    <s:password name="password"></s:password><br/>
    <s:submit value="登陆"></s:submit>
    </s:form>
    </body>
    </html>


    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
    <title>成功 </title>
    </head>
    <body>
    登录成功${username},${user},${users}
    </body>
    </html>

    
    



    第二种方法
    servlet api解耦合方法二  向Action中注入ServletAPI对象对应的Map对象
    Struts2向Action注入ServletAPI对象对应的Map对象 实现SessionAware
    定制Action
    public class UserInfo {
    private String username;
    private String password;

    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }

    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    }
    action方法
    public class LoginBeanLoginModel02 implements Action,ModelDriven<UserInfo>,SessionAware{
    private Map<String, Object> map;
    private UserInfo info=new UserInfo();
    public String execute() throws Exception {
    if (info.getUsername().equals("admin")&& info.getPassword().equals("admin")){
    map.put("username",info.getUsername());
    return SUCCESS;
    }else {
    return LOGIN;
    }
    }
    public UserInfo getModel() {
    return info;
    }

    public UserInfo getInfo() {
    return info;
    }
    public void setInfo(UserInfo info) {
    this.info = info;
    }

    public void setSession(Map<String, Object> map) {
    this.map=map;
    }
    }


    struts.xml的action
    <action name="loginbeanmodel02" class="cn.sjl.day01.controller.LoginBeanLoginModel02">
    <result name="success">day01/success.jsp</result>
    <result name="login">day01/loginbeanmodel02.jsp</result>
    </action>


    jsp页面
    <%@taglib prefix="s" uri="/struts-tags" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body>
    <s:form name="form1" namespace="/" method="post" action="loginbeanmodel02">
    请输入用户名: <s:textfield name="username"></s:textfield> <br/>
    <s:password name="password"></s:password><br/>
    <s:submit value="登陆"></s:submit>
    </s:form>
    </body>
    </html>

    耦合
    耦合是指紧密结合的意思。简单的理解,如果你使用了或者继承了j2ee的部分,那么你的代码在非j2ee环境就不能使用。你使用了struts2的包和类,那么你的代码在spring mvc中就不可用。
    第一种方法
    通过ActionContext的子类ServletActionContext实现
    定制Action
    public class UserInfo {
    private String username;
    private String password;

    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }

    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    }

    action方法
    public class LoginBeanLoginModel03 implements Action{
    private UserInfo info;
    public String execute() throws Exception {
    if (info.getUsername().equals("admin")&& info.getPassword().equals("admin")){
    HttpSession session = ServletActionContext.getRequest().getSession();
    session.setAttribute("username",info.getUsername());
    return SUCCESS;
    }else {
    return LOGIN;
    }
    }
    public UserInfo getInfo() {
    return info;
    }
    public void setInfo(UserInfo info) {
    this.info = info;
    }

    }

    struts.xml的action配置文件
    <action name="loginbeanservlet01" class="cn.sjl.day01.controller.LoginBeanLoginModel03">
    <result name="success">day01/success.jsp</result>
    <result name="login">day01/loginbeanservlet01.jsp</result>
    </action>

    jsp页面
    <%@taglib prefix="s" uri="/struts-tags" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body>
    <s:form name="form1" namespace="/" method="post" action="loginbeanservlet01">
    请输入用户名: <s:textfield name="info.username"></s:textfield> <br/>
    <s:password name="info.password"></s:password><br/>
    <s:submit value="登陆"></s:submit>
    </s:form>
    </body>
    </html>

    第二种方法
    向Action实例注入Servlet API对象  继承ServletRequestAware
    定制Action
    public class UserInfo {
    private String username;
    private String password;

    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }

    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    }
    acction方法
    public class LoginBeanLoginModel04 implements Action,ServletRequestAware{
    private UserInfo info;
    private HttpServletRequest request;
    public String execute() throws Exception {
    if (info.getUsername().equals("admin")&& info.getPassword().equals("admin")){
    HttpSession session = request.getSession();
    session.setAttribute("user",info.getUsername());
    return SUCCESS;
    }else {
    return LOGIN;
    }
    }
    public void setServletRequest(HttpServletRequest httpServletRequest) {
    this.request=httpServletRequest;
    }
    public UserInfo getInfo() {
    return info;
    }
    public void setInfo(UserInfo info) {
    this.info = info;
    }
    }

    struts.xml的action配置文件
    <action name="loginbeanservlet02" class="cn.sjl.day01.controller.LoginBeanLoginModel04">
    <result name="success">day01/success.jsp</result>
    <result name="login">day01/loginbeanservlet02.jsp</result>
    </action>

    jsp页面
    <%@taglib prefix="s" uri="/struts-tags" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body>
    <s:form name="form1" namespace="/" method="post" action="loginbeanservlet02">
    请输入用户名: <s:textfield name="info.username"></s:textfield> <br/>
    <s:password name="info.password"></s:password><br/>
    <s:submit value="登陆"></s:submit>
    </s:form>
    </body>
    </html>
     访问方式和第一个类似,这里就不一一写出来了。以上就是struts2的解耦合与耦合的方法。
     


     
  • 相关阅读:
    Win10 .Net Framework 3.5 安装错误 0x800F0954
    论如何去掌握一门新技术
    SpringBoot入门(二):日志及自定义属性
    SpringBoot入门(一):从HelloWorld开始
    【总结】Java面试题
    【SpringBoot-创建项目】一.通过Idea创建SpringBoot项目
    130道 Java多线程面试题汇总
    100道精选Redis面试题,最新Java面试题
    最新Redis面试题,附答案
    Little定律
  • 原文地址:https://www.cnblogs.com/sujulin/p/8472748.html
Copyright © 2011-2022 走看看