1.新建一个web项目并加入Struts1.x的依赖库。
引用
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:语法分析器
2.配置web.xml文件
- <?xmlversion="1.0"encoding="UTF-8"?>
- <web-appversion="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>
- <!--StandardActionServletConfiguration-->
- <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>
- <!--StandardActionServletMapping-->
- <!--表 示servlet接收*.do的请求-->
- <servlet-mapping>
- <servlet-name>action</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- </web-app>
3.在WEB-INF下加入struts-config.xml文件
- <?xmlversion="1.0"encoding="utf-8"?>
- <!DOCTYPEstruts-configPUBLIC
- "-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.3//EN"
- "http://struts.apache.org/dtds/struts-config_1_3.dtd">
- <struts-config>
- <form-beans>
- <form-beanname="loginForm"type="com.yx.zzg.form.LoginActionForm"/>
- </form-beans>
- <!--配 置全局的转向,如果全局转向和局部转向都配有,会先找局部转向,局部转向没有找到才会去找全局转向-->
- <!--
- <global-forwards>
- <forwardname="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的值 来获取
- -->
- <actionpath="/login"type="com.yx.zzg.action.LoginAction"
- name="loginForm"scope="request"validate="false"attribute="loginForm">
- <!--配 置转向,redirect属性默认为false,表示是请求转发,如果将其设置 为true则表示重定向-->
- <forwardname="success"path="/success.jsp"/>
- <forwardname="failure"path="/failure.jsp"/>
- </action>
- <!--
- 指 定访问不存在页面,当访问一个不存在的页面时会跳到unknown.jsp页面,只对.do的 请求其作用。forward属性通常使用在没有具体的action实现的情况下,如一个转向
- -->
- <actionpath="/unknown"forward="/unknown.jsp"unknown="true"/>
- </action-mappings>
- </struts-config>
4.编写ActionForm类
- packagecom.yx.zzg.form;
- importjavax.servlet.http.HttpServletRequest;
- importorg.apache.struts.action.ActionErrors;
- importorg.apache.struts.action.ActionForm;
- importorg.apache.struts.action.ActionMapping;
- /**
- *登 录的ActionForm.
- *ActionForm 是做数据收集的
- *ActionForm 中的属性必须和表单输入域的名称一致
- *@authortoshiba
- *
- */
- publicclassLoginActionFormextendsActionForm{
- privateStringusername;
- privateStringpassword;
- publicStringgetUsername(){
- returnusername;
- }
- publicvoidsetUsername(Stringusername){
- this.username=username;
- }
- publicStringgetPassword(){
- returnpassword;
- }
- publicvoidsetPassword(Stringpassword){
- this.password=password;
- }
- @Override
- publicvoidreset(ActionMappingmapping,HttpServletRequestrequest){
- System.out.println("----------LoginActionForm.reset()---------");
- }
- @Override
- publicActionErrorsvalidate(ActionMappingmapping,
- HttpServletRequestrequest){
- System.out.println("----------LoginActionForm.validate()---------");
- returnnull;
- }
- }
5.编写异常类
- packagecom.yx.zzg.exception;
- publicclassPasswordErrorExceptionextendsRuntimeException{
- }
- packagecom.yx.zzg.exception;
- publicclassUserNotFoundExceptionextendsRuntimeException{
- }
6.编写业务类
- packagecom.yx.zzg.service;
- importcom.yx.zzg.exception.PasswordErrorException;
- importcom.yx.zzg.exception.UserNotFoundException;
- publicclassUserManager{
- privatestaticUserManagerinstance=newUserManager();
- privateUserManager(){
- }
- publicstaticUserManagergetInstance(){
- returninstance;
- }
- publicvoidlogin(Stringusername,Stringpassword){
- if(!"zzg".equals(username)){
- thrownewUserNotFoundException();
- }
- if(!"zzg".equals(password)){
- thrownewPasswordErrorException();
- }
- }
- }
7.编写Action类
- packagecom.yx.zzg.action;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importorg.apache.struts.action.Action;
- importorg.apache.struts.action.ActionForm;
- importorg.apache.struts.action.ActionForward;
- importorg.apache.struts.action.ActionMapping;
- importcom.yx.zzg.exception.PasswordErrorException;
- importcom.yx.zzg.exception.UserNotFoundException;
- importcom.yx.zzg.form.LoginActionForm;
- importcom.yx.zzg.service.UserManager;
- publicclassLoginActionextendsAction{
- publicActionForwardexecute(ActionMappingmapping,ActionFormform,
- HttpServletRequestrequest,HttpServletResponseresponse)
- throwsException{
- StringerrorInfo="";
- LoginActionFormlaf=(LoginActionForm)form;
- Stringusername=laf.getUsername();
- Stringpassword=laf.getPassword();
- //if("zzg".equals(username)&&"zzg".equals(password)){
- //request.setAttribute("username",username);
- //returnmapping.findForward("success");
- //}else{
- //returnmapping.findForward("failure");
- //}
- try{
- UserManager.getInstance().login(username,password);
- //request.setAttribute("username",username);
- returnmapping.findForward("success");
- }catch(UserNotFoundExceptionfnfe){
- fnfe.printStackTrace();
- errorInfo="用户名无效";
- }catch(PasswordErrorExceptionpee){
- pee.printStackTrace();
- errorInfo="密码错误";
- }
- request.setAttribute("errorInof",errorInfo);
- returnmapping.findForward("failure");
- }
- }
6.登录测试页面
- <%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%>
- <html>
- <head>
- <title> 登录</title>
- </head>
- <body>
- <formaction="login.do"method="post">
- 用 户名:
- <inputname="username"type="text"/>
- 密 码:
- <inputname="password"type="password"/>
- <inputtype="submit"value=" 登录"/>
- </form>
- </body>
- </html>