Struts 1.x入门

1.新建一个web项目并加入Struts1.x的依赖库。
[quote]
commons-beanutils-1.8.0.jar: 动态的获取/设值Java Bean的属性
commons-digester-1.8.jar: 基于规则的XML文档解析,主要用于XML到Java对象的映射
commons-fileupload-1.1.1.jar: struts中上传文件要用到
commons-validator-1.3.1.jar: struts的验证框架
commons-logging-1.0.4.jar:日志处理
commons-chain-1.2.jar: 处理HTTP请求处理的基础机制
struts-core-1.3.10.jar: struts的核心库
struts-extras-1.3.10.jar: struts的扩展库
oro-2.0.8.jar: 文本处理工具
antlr-2.7.2.jar:语法分析器
[/quote]

2.配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Standard Action Servlet Configuration -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 以下的几个init-param都可以不用配置 -->
<init-param>
<!--
缺省情况下就是/WEB-INF/struts-config.xml,可以不用配置,只有当文件名称不是struts-config.xml或路径不在WEB-INF下时需要配置
-->
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<!-- 表示对servlet日志输出的等级 -->
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<!-- 最好留着,表示Servlet的初始化时间,在这里表示在tomcat启动的时候进行初始化 -->
<load-on-startup>2</load-on-startup>
</servlet>


<!-- Standard Action Servlet Mapping -->
<!-- 表示servlet接收*.do的请求 -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>


3.在WEB-INF下加入struts-config.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.yx.zzg.form.LoginActionForm" />
</form-beans>
<!-- 配置全局的转向,如果全局转向和局部转向都配有,会先找局部转向,局部转向没有找到才会去找全局转向 -->
<!--
<global-forwards>
<forward name="failure" path="/failure.jsp" />
</global-forwards>
-->
<action-mappings>
<!-- path定义action的名字,一定要以“/”开头 -->
<!-- type指定action类的完整路径 -->
<!-- name指定用的是哪个ActionForm -->
<!--
struts默认ActionForm放在session范围内,这里需要通过scope手动指定成request,所以在前台可以通过<%
LoginActionForm
laf=(LoginActionForm)request.getAttribute("loginForm");
%>拿到ActionForm
-->
<!-- 指定ActionForm中的validate是否执行,默认情况下是执行的 -->
<!--
attribute如果没有设置,在前台获取ActionForm就通过ActionForm的name来获取,如果设置了attribute就通过attribute的值来获取
-->
<action path="/login" type="com.yx.zzg.action.LoginAction"
name="loginForm" scope="request" validate="false" attribute="loginForm">
<!-- 配置转向,redirect属性默认为false,表示是请求转发,如果将其设置为true则表示重定向 -->
<forward name="success" path="/success.jsp" />
<forward name="failure" path="/failure.jsp" />
</action>
<!--
指定访问不存在页面,当访问一个不存在的页面时会跳到unknown.jsp页面,只对.do的请求其作用。forward属性通常使用在没有具体的action实现的情况下,如一个转向
-->
<action path="/unknown" forward="/unknown.jsp" unknown="true" />
</action-mappings>
</struts-config>


4.编写ActionForm类

package com.yx.zzg.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/**
* 登录的ActionForm.
* ActionForm是做数据收集的
* ActionForm中的属性必须和表单输入域的名称一致
* @author toshiba
*
*/
public class LoginActionForm extends ActionForm {

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

@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
System.out.println("----------LoginActionForm.reset()---------");
}

@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
System.out.println("----------LoginActionForm.validate()---------");
return null;
}

}


5.编写异常类

package com.yx.zzg.exception;

public class PasswordErrorException extends RuntimeException {

}


package com.yx.zzg.exception;

public class UserNotFoundException extends RuntimeException {

}


6.编写业务类

package com.yx.zzg.service;

import com.yx.zzg.exception.PasswordErrorException;
import com.yx.zzg.exception.UserNotFoundException;

public class UserManager {
private static UserManager instance=new UserManager();
private UserManager(){

}
public static UserManager getInstance(){
return instance;
}

public void login(String username,String password){
if(!"zzg".equals(username)){
throw new UserNotFoundException();
}
if(!"zzg".equals(password)){
throw new PasswordErrorException();
}
}

}


7.编写Action类

package com.yx.zzg.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.yx.zzg.exception.PasswordErrorException;
import com.yx.zzg.exception.UserNotFoundException;
import com.yx.zzg.form.LoginActionForm;
import com.yx.zzg.service.UserManager;

public class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String errorInfo="";
LoginActionForm laf = (LoginActionForm) form;
String username = laf.getUsername();
String password = laf.getPassword();
// if ("zzg".equals(username) && "zzg".equals(password)) {
// request.setAttribute("username", username);
// return mapping.findForward("success");
// } else {
// return mapping.findForward("failure");
// }
try{
UserManager.getInstance().login(username, password);
//request.setAttribute("username", username);
return mapping.findForward("success");
}catch(UserNotFoundException fnfe){
fnfe.printStackTrace();
errorInfo="用户名无效";
}catch(PasswordErrorException pee){
pee.printStackTrace();
errorInfo="密码错误";
}
request.setAttribute("errorInof", errorInfo);
return mapping.findForward("failure");
}

}


6.登录测试页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>登录</title>
</head>

<body>
<form action="login.do" method="post">
用户名:
<input name="username" type="text" />
密码:
<input name="password" type="password" />
<input type="submit" value="登录" />
</form>
</body>
</html>
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 华为移动服务(Huawei Mobile Services,简称 HMS)是一个全面开放的移动服务生态系统,为企业和开发者提供了丰富的工具和 API,助力他们构建、运营和推广应用。其中,HMS Scankit 是华为推出的一款扫描服务 SDK,支持快速集成到安卓应用中,能够提供高效且稳定的二维码和条形码扫描功能,适用于商品扫码、支付验证、信息获取等多种场景。 集成 HMS Scankit SDK 主要包括以下步骤:首先,在项目的 build.gradle 文件中添加 HMS Core 库和 Scankit 依赖;其次,在 AndroidManifest.xml 文件中添加相机访问和互联网访问权限;然后,在应用程序的 onCreate 方法中调用 HmsClient 进行初始化;接着,可以选择自定义扫描界面或使用 Scankit 提供的默认扫描界面;最后,实现 ScanCallback 接口以处理扫描成功和失败的回调。 HMS Scankit 内部集成了开源的 Zxing(Zebra Crossing)库,这是一个功能强大的条码和二维码处理库,提供了解码、生成、解析等多种功能,既可以单独使用,也可以与其他扫描框架结合使用。在 HMS Scankit 中,Zxing 经过优化,以更好地适应华为设备,从而提升扫描性能。 通常,ScanKitDemoGuide 包含了集成 HMS Scankit 的示例代码,涵盖扫描界面的布局、扫描操作的启动和停止以及扫描结果的处理等内容。开发者可以参考这些代码,快速掌握在自己的应用中实现扫码功能的方法。例如,启动扫描的方法如下: 处理扫描结果的回调如下: HMS Scankit 支持所有安卓手机,但在华为设备上能够提供最佳性能和体验,因为它针对华为硬件进行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值