zoukankan      html  css  js  c++  java
  • STRUTS

    传统的Java web:

    Struts主要是代替Servlet写后台的,用于处理客户端请求。

    Struts框架抽象出后台处理的通用步骤,封装为一个框架,简化了后台编程。

    与Servlet相比,Struts具有先进的架构、编程思想。

    Struts的功能

    • 自动封装参数
    • 参数校验
    • 结果处理(转发、重定向)
    • 国际化
    • 显示等待页面
    • 防止表单重复提交

    Struts1、2的区别

    • Struts1、2技术上关系并不大
    • Struts1基于Servlet,而Servlet是线程不安全的,所以Struts1线程不安全
    • Struts2基于Filter,前身是WebWork

    IDEA下使用Struts2示例

    1、创建项目

    需要先配好jdk、tomcat。

    把struts2核心的8个jar包添加进来,并不推荐Download,可能会出问题。

    2、打开项目结构,修复问题

    3、打开web.xml

    随着Struts的版本更替,Struts核心过滤器类的位置也在变化,需要手动修复。

    删掉,输入StrutsPrepare就出来了

    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>

    4、编写前端页面,用Action处理请求,在struts.xml中配置Struts(主要是action)。

    比如我们在index.jsp中写一个表单:

    1 <form>
    2     请选择登录角色:<br />
    3     <input type="radio" name="role" value="student">学生
    4     <input type="radio" name="role" value="teacher">教师<br />
    5     <button type="submit" >登录</button>
    6   </form>

    src下新建包action,包下新建类LoginAction:

    复制代码
     1 public class LoginAction extends ActionSupport {
     2     private String role;
     3 
     4     public void setRole(String role) {
     5         this.role = role;
     6     }
     7 
     8     public String getRole() {
     9         return role;
    10     }
    11 
    12     @Override
    13     public String execute() throws Exception {
    14         if (role.equals("teacher"))
    15             return "teacher";
    16         else if (role.equals("student"))
    17             return "student";
    18         else
    19             return "error";
    20     }
    21 }
    复制代码

    需要继承ActionSupport类,重写execute()方法。当请求提交到这个action时,会自动调用execute()来处理。

    将要处理的字段写成成员变量,并设置对应的setter、getter方法,成员变量名需要和请求传过来的参数名相同。上面的表单会传递一个参数role,这个action接受到请求时,会调用setter方法把请求参数赋给相应的成员变量。我们可直接使用某个字段,使用时会自动调用getter方法获取对应的值。

    execute()需要返回一个String类型的值,可以自己写,也可以使用Struts预定义的常量,比如SUCCESS即"success"。

    在struts.xml中配置action:

    复制代码
    1 <struts>
    2     <package name="test" namespace="/" extends="struts-default">
    3         <action name="login" class="action.LoginAction">
    4             <result name="teacher">/teacher.jsp</result>
    5             <result name="student">/student.jsp</result>
    6             <result name="error">/error.jsp</result>
    7         </action>
    8     </package>
    9 </struts>
    复制代码

    <package>配置一个包,name即包名,namespace、extends都是固定的值。

    <action>配置一个action,name指定action名称,一般使用action类名的Action之前部分的camel写法,class指定action所在的类。

    <result>设置视图。action相当于控制器servlet,处理请求,并调用相应的视图来显示结果。

    设置表单的action属性:

    action="login.action"

    用指定的action来处理表单。

    如果首页不是index,还需要在web.xml中配置首页:

    <welcome-file-list>
            <welcome-file></welcome-file>
        </welcome-file-list>

    ok。

  • 相关阅读:
    电信网络拓扑图自动布局之总线
    长短链接区别-2
    TCP长连接与短连接的区别
    memset(&a, 0, sizeof(struct customer))函数
    linker command failed with exit code 1
    iOS “[App] if we're in the real pre-commit handler we can't actually add any new fences due
    iOS 获取屏幕某个区域的截图-b
    iOS-集成支付宝支付、微信支付简单总结
    邓白氏码的申请-iOS公司开发者账号准备
    iOS 自定义导航栏 和状态栏
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/11211275.html
Copyright © 2011-2022 走看看