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的解耦合与耦合的方法。
 


 

 

转载于:https://www.cnblogs.com/sujulin/p/8472748.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值