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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值