zoukankan      html  css  js  c++  java
  • Struts(一)

    ===============================MVC====================================
    MVC(Model View Controller)
        1.Model:封装数据,进行业务处理,返回处理结果
        2.View:展示界面
        3.Controller:接受用户端请求,将模型和视图联系在一起以实现用户请求的功能

    思路:



    ==============================Struts===============================
    介绍:
        1.Struts2是一个MVC框架。Struts1 + WebWork
        2.Struts2兼容性好
        3.http://struts.apache.org

    步骤:
        1.加载类库
        2.配置Web.xml文件
        3.开发视图层页面
        4.开发控制层Action
        5.配置struts.xml文件
        6.部署、运行项目
        
        a.加载的基本jar包:
            struts2-core-xxx.jar        Struts 2框架的核心类库
            xwork-core-xxx.jar            XWork类库,Struts 2的构建基础
            ognl-xxx.jar                Struts 2使用的一种表达式语言类库
            freemarker-xxx.jar            Struts 2的标签模板使用类库
            javassist-xxx.GA.jar        对字节码进行处理
            commons-fileupload-xxx.jar    文件上传时需要使用
            commons-io-xxx.jar            Java IO扩展
            commons-lang-xxx.jar        包含了一些数据类型的工具类
            
        b.配置Web.xml

     1 <filter>
     2         <filter-name>struts2</filter-name>
     3         <filter-class>
     4             org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
     5         </filter-class>
     6 </filter>
     7         
     8 <filter-mapping>
     9         <filter-name>struts2</filter-name>
    10         
    11         <!--  将全部请求定位到指定的Struts2过滤器中 -->
    12         <url-pattern>/*</url-pattern>
    13 </filter-mapping>        


    Struts2访问Servlet API -- (即,登录成功后,使用session保存用户信息)
        访问方式:
            1.解耦
                a.对Servlet API进行封装
                    提供了三个Map对象访问request、session、application作用域
                b.通过ActionContext类获取这三个Map对象
                    1)Object get("request")
                    2)Map getSession()
                    3)Map getApplication()

            2.耦合
                a.通过ServletActionContext类获取Servlet API对象
                     1)ServletContext getServletContext()
                     2)HttpServletResponse getResponse()
                     3)HttpServletRequest  getRequest()
                     4)通过request.getSession()获取session对象
                b.通过xxx.setAttribute()和xxx.getAttribute() 功能,在不同的页面或Action中传递数据

    数据校验:
        1.继承ActionSupport类来完成Action开发
            validate()方法
        2.ActionSupport类不仅对Action接口进行简单实现,同时增加了验证、本地化等支持

    范例:
    1.index.jsp

     1 <%-- 引入JSP页面PAGE指令 --%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8"
     3     pageEncoding="UTF-8"%>
     4 <%-- 引入JSTL标签指令 --%>
     5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     6 <!DOCTYPE html>
     7 <html language="zh-CN">
     8 <head>
     9     <meta charset="utf-8">
    10     <!-- 设置浏览器渲染的引擎  -->
    11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    12     <!-- 设置支持移动设备  -->
    13     <meta name="viewport" content="width=device-width, initial-scale=1">
    14     <title>网页标题</title>
    15     <!-- 引用bootstrap样式 -->
    16     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
    17 </head>
    18 <body>
    19     <!-- 从session中读取数据 -->
    20     ${sessionScope.loginUser }
    21     
    22     ${msg }
    23     <div class="container-fluid">
    24         <form action="hello" method="post">
    25             请输入内容:<input name="msg" type="text" />
    26             请输入内容:<input name="address" type="text" />
    27             <input type="submit" value="提交"/>
    28         </form>
    29     </div>
    30     
    31     <!-- 引用外部JS文件  -->
    32     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
    33     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
    34 
    35 </body>
    36 </html>


    2.HelloJspAction类

     1 package com.Elastic.StrutsDemo1.ivy.action;
     2 import com.opensymphony.xwork2.Action;
     3 public class HelloJspAction implements Action{
     4     //与jsp中的属性name的值一样
     5     private String msg;
     6     private String address;
     7     
     8     public String getMsg() {
     9         return msg;
    10     }
    11 
    12     public void setMsg(String msg) {
    13         this.msg = msg;
    14     }
    15 
    16     public String getAddress() {
    17         return address;
    18     }
    19 
    20     public void setAddress(String address) {
    21         this.address = address;
    22     }
    23 
    24     /* (non-Javadoc)
    25      * @see com.opensymphony.xwork2.Action#execute()
    26      */
    27     @Override
    28     public String execute() throws Exception {
    29         System.out.println(msg);
    30         System.out.println(address);
    31         return "success";
    32     }
    33 }


    3.struts.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6     <!-- /:根目录 -->
     7     <package name="default" namespace="/" extends="struts-default">
     8     
     9         <!-- action中name的值与表单的action属性值对应  -->
    10         
    11         <!-- 请求地址:hello  class:action(servlet)地址-->
    12         <action name="hello" class="com.Elastic.StrutsDemo1.ivy.action.HelloJspAction">
    13             <result name="success">/index.jsp</result>
    14         </action>
    15         
    16         <action name="login" class="com.Elastic.StrutsDemo1.ivy.action.LoginAction">
    17             <!-- result中name的与Action中的execute()返回的值一样  -->
    18             <result name="success">/success.jsp</result>
    19             
    20             <!-- 登录失败 -->
    21             <result name="error">/error.jsp</result>
    22             
    23             <!-- 验证失败。不会返回validate -->
    24             <result name="input">/login.jsp</result>
    25         </action>
    26         
    27     </package>
    28 </struts>


    4.web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
     3   <display-name>StrutsDemo1_ivy</display-name>
     4   <welcome-file-list>
     5     <welcome-file>index.html</welcome-file>
     6     <welcome-file>index.htm</welcome-file>
     7     <welcome-file>index.jsp</welcome-file>
     8     <welcome-file>default.html</welcome-file>
     9     <welcome-file>default.htm</welcome-file>
    10     <welcome-file>default.jsp</welcome-file>
    11   </welcome-file-list>
    12  
    13   <!-- 配置Struts2的核心过滤器{Controller} -->
    14   <!-- 将全部请求定位到指定的Struts2过滤器中  -->
    15   <filter>
    16       <filter-name>Struts2</filter-name>
    17       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
    18   </filter>
    19   <filter-mapping>
    20       <filter-name>Struts2</filter-name>
    21       <url-pattern>/*</url-pattern>
    22   </filter-mapping>
    23 </web-app>


    5.index.jsp

     1 <%-- 引入JSP页面PAGE指令 --%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8"
     3     pageEncoding="UTF-8"%>
     4 <%-- 引入JSTL标签指令 --%>
     5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     6 <!DOCTYPE html>
     7 <html language="zh-CN">
     8 <head>
     9     <meta charset="utf-8">
    10     <!-- 设置浏览器渲染的引擎  -->
    11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    12     <!-- 设置支持移动设备  -->
    13     <meta name="viewport" content="width=device-width, initial-scale=1">
    14     <title>网页标题</title>
    15     <!-- 引用bootstrap样式 -->
    16     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
    17 </head>
    18 <body>
    19     <!-- 从session中读取数据 -->
    20     ${sessionScope.loginUser }
    21     
    22     ${msg }
    23     <div class="container-fluid">
    24         <form action="hello" method="post">
    25             请输入内容:<input name="msg" type="text" />
    26             请输入内容:<input name="address" type="text" />
    27             <input type="submit" value="提交"/>
    28         </form>
    29     </div>
    30     
    31     <!-- 引用外部JS文件  -->
    32     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
    33     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
    34 
    35 </body>
    36 </html>


    6.LoginAction类

     1 package com.Elastic.StrutsDemo1.ivy.action;
     2 
     3 import java.util.Map;
     4 
     5 import javax.servlet.http.HttpServletRequest;
     6 import javax.servlet.http.HttpSession;
     7 
     8 import org.apache.struts2.ServletActionContext;
     9 
    10 import com.Elastic.StrutsDemo1.ivy.entity.User;
    11 import com.opensymphony.xwork2.ActionContext;
    12 import com.opensymphony.xwork2.ActionSupport;
    13 //ActionSupport:数据验证    override:valid()
    14 public class LoginAction extends ActionSupport{
    15     /*private String userName;
    16     private String userPwd;
    17 
    18     public String getUserName() {
    19         return userName;
    20     }
    21 
    22     public void setUserName(String userName) {
    23         this.userName = userName;
    24     }
    25 
    26     public String getUserPwd() {
    27         return userPwd;
    28     }
    29 
    30     public void setUserPwd(String userPwd) {
    31         this.userPwd = userPwd;
    32     }*/
    33     
    34     //使用hibernate框架,建实体类
    35     private User user;
    36 
    37     public User getUser() {
    38         return user;
    39     }
    40 
    41     public void setUser(User user) {
    42         this.user = user;
    43     }
    44 
    45     /* (non-Javadoc)
    46      * @see com.opensymphony.xwork2.Action#execute()
    47      */
    48     @Override
    49     public String execute() throws Exception {
    50         if ("admin".equals(user.getUserName().trim()) && "123456".equals(user.getUserPwd().trim())) {
    51             //登录成功后,登录信息需要保存在session中
    52             
    53             //方法1.解耦方式(Map 对象)--推荐使用
    54             //从ActionContext中获取session
    55             Map<String, Object> session = ActionContext.getContext().getSession();
    56             //以key/value形式保存数据
    57             session.put("loginUser", user.getUserName());
    58             
    59             //方法2.耦合方式(原生Servlet API)--特殊功能
    60             /*HttpServletRequest request = ServletActionContext.getRequest();
    61             HttpSession session = request.getSession();
    62             //setAttribute()的方式保存数据
    63             session.setAttribute("loginUser", user.getUserName());*/
    64             return SUCCESS;
    65         }
    66         return ERROR;
    67     }
    68 
    69     @Override
    70     public void validate() {
    71         if (user.getUserName().trim().length() == 0) {
    72             //fieldName:最好是和字段名称一致
    73             this.addFieldError("userName", "用户名不能为空!");;
    74         }
    75     }
    76 }


    7.User类

     1 package com.Elastic.StrutsDemo1.ivy.entity;
     2 
     3 import java.io.Serializable;
     4 public class User implements Serializable{
     5     private String userName;
     6     private String userPwd;
     7     public String getUserName() {
     8         return userName;
     9     }
    10     public void setUserName(String userName) {
    11         this.userName = userName;
    12     }
    13     public String getUserPwd() {
    14         return userPwd;
    15     }
    16     public void setUserPwd(String userPwd) {
    17         this.userPwd = userPwd;
    18     }
    19 }


    8.success.jsp

     1 <%-- 引入JSP页面PAGE指令 --%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8"
     3     pageEncoding="UTF-8"%>
     4 <%-- 引入JSTL标签指令 --%>
     5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     6 <!DOCTYPE html>
     7 <html language="zh-CN">
     8 <head>
     9     <meta charset="utf-8">
    10     <!-- 设置浏览器渲染的引擎  -->
    11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    12     <!-- 设置支持移动设备  -->
    13     <meta name="viewport" content="width=device-width, initial-scale=1">
    14     <title>网页标题</title>
    15     <!-- 引用bootstrap样式 -->
    16     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
    17 </head>
    18 <body>
    19     
    20     <div class="container-fluid">
    21         <%-- <h1>${sessionScope.loginUser }登录成功</h1> --%>
    22         <div class="panel panel-primary">
    23             <div class="panel-heading">提示信息</div>
    24             <div class="panel-body text-center">
    25                 登录成功!<span id="time">10</span>秒后页面自动跳转到首页<br>
    26                 如果没有跳转,请点击<a href="index.jsp">此处</a>
    27             </div>
    28         </div>
    29     </div>
    30     
    31     <!-- 引用外部JS文件  -->
    32     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
    33     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
    34     <script type="text/javascript">
    35         var time = 10;
    36         function returnPage() {
    37             time --;
    38             if (time <= 0) {
    39                 window.location = 'index.jsp';
    40             }
    41             $('#time').html(time);
    42         }
    43         
    44         $(function() {
    45             window.setInterval(returnPage, 1000);
    46         });
    47     
    48     </script>
    49 </body>
    50 </html>


    9.error.jsp

     1 <%-- 引入JSP页面PAGE指令 --%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8"
     3     pageEncoding="UTF-8"%>
     4 <%-- 引入JSTL标签指令 --%>
     5 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     6 <!DOCTYPE html>
     7 <html language="zh-CN">
     8 <head>
     9     <meta charset="utf-8">
    10     <!-- 设置浏览器渲染的引擎  -->
    11     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    12     <!-- 设置支持移动设备  -->
    13     <meta name="viewport" content="width=device-width, initial-scale=1">
    14     <title>网页标题</title>
    15     <!-- 引用bootstrap样式 -->
    16     <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">
    17 </head>
    18 <body>
    19     <div class="container-fluid">
    20         <h1>登录失败</h1>
    21     </div>
    22     
    23     <!-- 引用外部JS文件  -->
    24     <script type="text/javascript" src="../js/jquery-2.2.4.js"></script>
    25     <script type="text/javascript" src="../js/bootstrap.min.js"></script>
    26 
    27 </body>
    28 </html>

       
    标签:
    1.将Action的错误信息在页面输出
        <%@ taglib prefix="s" uri="/struts-tags"%>
        
        常用表单标签:
            标  签                                说   明
            <s:form>…</s:form>                    表单标签
            <s:textfield>…</s:textfield >        文本输入框
            <s:password>…</s:password >            密码输入框
            <s:textarea>…</s:textarea >            文本域输入框
            <s:radio>…</s:radio >                单选按钮
            <s:checkbox>…</s:checkbox >            多选框
            <s:submit />                        提交标签
            <s:reset />                            重置标签
            <s:hidden />                        隐藏域标签

    2.使用Struts 2标签在页面中实现逻辑控制
        a.使用Struts 2的通用标签
        b.条件判断标签
        c.迭代标签

        常用通用标签:
            名称                        标  签                            说   明
            条件标签                <s:if>……</s:if>                    根据表达式的值,
            判断将要执行的内容        <s:elseif>……</s:elseif>
                                    <s:else>……</s:else>
            迭代                    <s:iterator>……</s: iterator >    用于遍历集合
    【注意:在实际开发中为了满足用户日益多变的需求。推荐使用原生的HTML以及EL表达式和JSTL标签来完成这些功能】




















  • 相关阅读:
    【Henu ACM Round#20 B】Contest
    【Henu ACM Round#20 A】 Fancy Fence
    【Henu ACM Round#19 F】Dispute
    【Henu ACM Round#19 E】 Om Nom and Candies
    【Henu ACM Round#19 D】 Points on Line
    【Henu ACM Round#19 C】 Developing Skills
    【Henu ACM Round#19 B】 Luxurious Houses
    【Henu ACM Round#19 A】 Vasya the Hipster
    【Codeforces Round #460 (Div. 2) D】Substring
    JQuery中attr ,html,text,val,的一些用法
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/5618265.html
Copyright © 2011-2022 走看看