所有struts的tld文件放在WEB-INF,除了平时引入的

2020-01-05 19:23 来源:未知

h1>登录(validator框架客户端验证(javascript))</h1>

        今天写一个简单的Struts+Spring例子。目前来说,很少有项目单独用一个框架的,Struts+Spring,这个应该是做Web开发的人都要学的。这段时间学了不少框架的知识,来写一个简单的先。

一 Input因为年龄输入错误自动跳转回输入界面

1准备工作:

<hr>

        环境:jdk1.5, Eclipse3.2, Tomcat5.5, struts1.0, spring1.2。所有struts的tld文件放在WEB-INFtld下。

1、struts.xml

除了平时引入的struts2的jar包以外,还需要引入struts2-json-plugin-2.1.8.1.jar;json-lib-2.1.jar这两个包。

<html:javascript formName="loginForm"/>

        这个例子还是简单的登录,如果用户名为"Jim"而且密码为"111"的话就显示出一些消息,否则就跳转到登录错误页面。这个例子我没有写关于验证的东西,有兴趣的朋友可以参照我以前写的验证例子。

<?xml version="1.0" encoding="UTF-8" ?>

2.建立我们的model:User

 <html:form action="login2.do" onsubmit="return validateLoginForm(this)">

        首先,我们来配置WEB-INF下的web.xml:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" ";>

package edu.tstc.model;

      username : <html:text property="username"/><br/>

<?

<struts>

public class User {

      password : <html:password property="password"/><br>

xml version="1.0" encoding="UTF-8"?>

        <package name="default" namespace="/" extends="struts-default">

private int id;

   <html:submit/>

<!

                <default-action-ref name="index"></default-action-ref>

private String username;

  </html:form>

DOCTYPE web-app

                <action name="index">

private String password;

 

PUBLIC

                        <result>/error.jsp</result>

public int getId() {

25、声明式异常

"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

                </action>

return id;

 

""

                

}

Action中

>

                <action name="*_*_*" method="{2}" class="com.cakin.{3}.{1}Action">

public void setId(int id) {

UserManager.getInstance().login(username, password);

<

                        <result>/result.jsp</result>

this.id = id;

       return mapping.findForward("success");

web-app>

                        <result name="add">/{2}.jsp</result>

}

 

<servlet>

                        <result name="update">/{2}.jsp</result>

public String getUsername() {

业务逻辑记得先建立两个异常类

<servlet-name>action</servlet-name>

                </action>

return username;

    public void login(String username, String password) {

<servlet-class>

                

}

//     if (!"admin".equals(username)) {

org.apache.struts.action.ActionServlet

                <action name="LoginAction" method="login" class="com.cakin.action.LoginAction">

public void setUsername(String username) {

//         throw new UserNotFoundException();

</servlet-class>

                        <result>/success.jsp</result>

this.username = username;

//     }

<init-param>

                        <result name="input">/login.jsp</result>

}

//     if (!"admin".equals(password)) {

<param-name>config</param-name>

                </action>

public String getPassword() {

//         throw new PasswordErrorException();

<param-value>/WEB-INF/struts-config.xml</param-value>

        </package>

return password;

//     }

</init-param>

</struts>   

}

//  }

<init-param>

2、User.java

public void setPassword(String password) {

 

<param-name>debug</param-name>

package com.cakin.po;

this.password = password;

Struts配置文件中

<param-value>0</param-value>

 

}

 

</init-param>

import java.util.List;

}

定义全局异常

<init-param>

 

3.建立我们的Action

 

<param-name>detail</param-name>

public class User {

这里是简单的演示struts-2与extjs的集成,所以全部的业务逻辑都放在Action中进行处理了。建立我们的LoginAction.当表单提交过来的时候我们也就能够在LoginAction中拿到数据了。

<global-exceptions>

<param-value>2</param-value>

        private String username;

package edu.tstc.action;

    <!-- 全局异常

</init-param>

        

import edu.tstc.model.User;

           <exception key="user.not.found" type="com.bjsxt.struts.UserNotFoundException" path="/login_error.jsp"/>

<load-on-startup>1</load-on-startup>

        private String password;

import com.opensymphony.xwork2.ActionSupport;

           <exception key="user.password.error" type="com.bjsxt.struts.PasswordErrorException" path="/login_error.jsp"/>

</servlet>

        

public class LoginAction extends ActionSupport{

     -->

<servlet-mapping>

        private int age;

private boolean success;

 

<servlet-name>action</servlet-name>

        

private String message;

定义action

<url-pattern>*.do</url-pattern>

        public int getAge() {

private User user;

<action-mappings>

</servlet-mapping>

                return age;

public String execute()throws Exception{

       <action path="/login"

<welcome-file-list>

        }

if(user.getUsername().equals("admin")&&user.getPassword().equals("admin")){

              type="com.bjsxt.struts.LoginAction"

<welcome-file>index.jsp</welcome-file>

        public void setAge(int age) {

this.success = true;

              name="loginForm"

</welcome-file-list>

                this.age = age;

this.message = "你的账号是:"+user.getUsername()+"密码为:"+user.getPassword();

              scope="request"

<taglib>

        }

}else{

              validate="false"

<taglib-uri>/tags/struts-html</taglib-uri>

        private List<User> booklist;

this.success = false;

              input="/login.jsp"<!-- 默认异常转向 -->

<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>

        

this.message = "对不起,未经授权的用户不能登录该系统!";

       >  

</taglib>

        public List<User> getBooklist() {

}

       <!--

<taglib>

                return booklist;

return SUCCESS;

           <exception key="user.not.found" type="com.bjsxt.struts.UserNotFoundException" path="/login_error.jsp"/>

<taglib-uri>/tags/struts-logic</taglib-uri>

        }

}

           <exception key="user.password.error" type="com.bjsxt.struts.PasswordErrorException" path="/login_error.jsp"/>

<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>

        public void setBooklist(List<User> booklist) {

public boolean isSuccess() {

        -->  

</taglib>

                this.booklist = booklist;

return success;

           <forward name="success" path="/login_success.jsp"/>

<taglib>

        }

}

           <forward name="error" path="/login.jsp"/>

<taglib-uri>/tags/struts-bean</taglib-uri>

        public String getUsername() {

public void setSuccess(boolean success) {

       </action>

<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>

                return username;

this.success = success;

 

</taglib>

        }

}

Jsp页面

</

        public void setUsername(String username) {

public String getMessage() {

<html:errors/>

web-app>

                this.username = username;

return message;

 

        这个跟以前的web.xml并没有什么不同。然后我们来写struts-config.xml:

        }

}

声明式异常传递一个站位附的办法

<?

        public String getPassword() {

public void setMessage(String message) {

 

xml version="1.0" encoding="UTF-8"?>

                return password;

this.message = message;

异常类中

<!

        }

}

public class UserNotFoundException extends RuntimeException {

DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" ";

        public void setPassword(String password) {

public User getUser() {

 

<

                this.password = password;

return user;

    public UserNotFoundException(String msg) {

struts-config>

        }

}

       super(msg);

<data-sources />

}

public void setUser(User user) {

    }

<form-beans>

3、login.jsp

this.user = user;

}

<form-bean name="loginForm" type="src.LoginForm" />

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

}

 

</form-beans>

<%

}

业务调用中

<global-exceptions />

String path = request.getContextPath();

Action类中必须指定一个boolean类型的变量success,以及一个可选的String类型的变量msg,前者用于向ExtJS反馈整个的处理结果是否成功,而后者则是用于向用户提示信息。定义好这两个变量后还需要生成setter和getter方法。整个Action类正常反馈SUCCESS即可。

 

<global-forwards />

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

4.配置我们的struts.xml,注意extends=”json-default”

public void login(String username, String password) {

<action-mappings>

%>

<?xml version="1.0" encoding="UTF-8" ?>

//     if (!"admin".equals(username)) {

<action path="/login"

 

<!DOCTYPE struts PUBLIC

//         throw new UserNotFoundException(username);

name="loginForm"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

//     }

input="/login.jsp"

<html>

"">

//     if (!"admin".equals(password)) {

type="org.springframework.web.struts.DelegatingActionProxy">

  <head>

<struts>

//         throw new PasswordErrorException();

<forward name="success" path="/success.jsp" />

    <base href="<%=basePath%>">

<constant name="struts.i18n.encoding" value="UTF-8"/>

//     }

<forward name="failure" path="/failure.jsp" />

   

<package name="extjs" extends="json-default" namespace="/">

//  }

</action>

    <title>My JSP 'login.jsp' starting page</title>

<action name="Login" class="edu.tstc.action.LoginAction">

 

</action-mappings>

   

<result type="json"></result>

26、个性化异常处理

<message-resources parameter="src.ApplicationResource" />

        <meta http-equiv="pragma" content="no-cache">

</action>

 

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

        <meta http-equiv="cache-control" content="no-cache">

</package>

建立资源文件

<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />

        <meta http-equiv="expires" content="0">   

</struts>

 

</plug-in>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

result的type必须指定为json。一旦为某个Action指定了一个类型为json的Result,则该Result无须映射到任何视图资源,因为JSON插件会负责将Action里的信息序列化成JSON格式的字符串,并将该字符串返回给发出异步请求的浏览器页面。

user.login.success={0},登录成功

</

        <meta http-equiv="description" content="This is my page">

简单的说JSON插件允许我们在客户端页面的JavaScript中一步调用Action,而且Action不再需要使用视图资源去显示该Action里的状态信息,而是由JSON插件负责将Action里的状态信息返回给调用页面——通过这种方式,就可以完成Ajax交互。

user.not.found=用户不能找到,用户名称=[{0}]

struts-config>

        <!--

同时还有两个需要注意的地方:

user.password.error=密码错误

        注意,最后的plug-in里面说明了我们要用到spring的ContextLoaderPlugin,这个是用来分配不同的请求给不同的struts的action的,配置文件在value里面设置。我们这里就用到了一个ActionForm和一个Action,同时要注意,action-mapping里面,type改为了org.springframework.web.struts.DelegatingActionProxy,就是action的分发交由spring的DelegatingActionProxy代管。

        <link rel="stylesheet" type="text/css" href="styles.css">

1:在配置struts.i18n.encoding常量时需要指定为UTF-8编码,这是因为Ajax的POST请求都是以UTF-8的方式进行编码的;

永利平台娱乐,user.login.error=登录失败

        然后写一个login.jsp:

        -->

2:在配置包时,需要继承json-default,而不是原来的struts-default包,这是因为只有该包下才有json类型的Result。

 

<%@

 

一旦我们将某个逻辑配置成为json类型,这就意味着该逻辑视图无需指定物理视图资源,因为json插件会将该Action序列化后发送给客户端。

建立一个异常处理类

page language="java" contentType="text/html; charset=ISO-8859-1"

  </head>

5.在web.xml文件中配置struts2

TAG标签:
版权声明:本文由永利平台娱乐发布于永利平台娱乐,转载请注明出处:所有struts的tld文件放在WEB-INF,除了平时引入的