zoukankan      html  css  js  c++  java
  • 【java开发系列】—— struts2简单入门示例

    前言

      最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的。

      struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码。

      过去,我们用jsp和servlet搭配,实现展现时,大体的过程是:

      1 jsp触发action

      2 servlet接受action,交给后台class处理

      3 后台class跳转到其他的jsp,实现数据展现

      现在有了struts2,实现过程变为

      1 jsp出发action

      2 struts2拦截请求,调用后台action

      3 action返回结果,由不同的jsp展现数据

      

      下面我们看下,需要的jar包

      前面两个是apache commons的jar包,暂且忽略

      freemarker提供了另一种展现方式

      ognl提供了OGNL表达式

      struts2-core提供struts2核心包

      xwork-core由于struts2很多事基于webwork的,因此也需要这个的核心包

      我们提供了三个jsp

    登陆界面login.jsp

    复制代码
     1 <%@ page language="java" contentType="text/html; charset=GBK"
     2     pageEncoding="GBK"%>
     3 <%@taglib prefix="s" uri="/struts-tags"%>
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=GBK">
     7 <title><s:text name="loginPage"/></title>
     8 </head>
     9 <body>
    10 <s:form action="login">
    11     <s:textfield name="username" key="user"/>
    12     <s:textfield name="password" key="pass"/>
    13     <s:submit key="login"/>
    14 </s:form>
    15 </body>
    16 </html>
    复制代码

    登陆成功界面welcome.jsp

    复制代码
    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
        <title><s:text name="succPage"/></title>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    </head>
    <body>
        <s:text name="succTip">
            <s:param>${sessionScope.user}</s:param>
        </s:text><br/>
    </body>
    </html>
    复制代码

    登陆失败界面error.jsp

    复制代码
    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
        <title><s:text name="errorPage"/></title>
        <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    </head>
    <body>
        <s:text name="failTip"/>
    </body>
    </html>
    复制代码

      当login.jsp触发action时,就会向后抬发送login.action的请求,这个请求被后台拦截,交给struts.xml中配置的action处理

    复制代码
     1 <?xml version="1.0" encoding="GBK"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
     4     "http://struts.apache.org/dtds/struts-2.1.7.dtd">
     5 <struts>
     6     <!-- 指定全局国际化资源文件 -->
     7     <constant name="struts.custom.i18n.resources" value="mess"/>
     8     <!-- 指定国际化编码所使用的字符集 -->    
     9     <constant name="struts.i18n.encoding" value="GBK"/>
    10     <!-- 所有的Action定义都应该放在package下 -->
    11     <package name="test" extends="struts-default">
    12         <action name="login" class="com.test.action.LoginAction">
    13             <result name="error">/error.jsp</result>
    14             <result name="success">/welcome.jsp</result>
    15         </action>
    16     </package>
    17 </struts>
    复制代码

    下面是LoginAction的代码,可以看到成功登陆后,程序把username写入session中。以便于我们在welcome.jsp中利用${sessionScope.user}取得名字

    复制代码
     1 package com.test.action;
     2 
     3 import com.opensymphony.xwork2.ActionContext;
     4 import com.opensymphony.xwork2.ActionSupport;
     5 
     6 public class LoginAction extends ActionSupport {
     7     private String username;
     8     private String password;
     9 
    10     public String getUsername() {
    11         return username;
    12     }
    13 
    14     public void setUsername(String username) {
    15         this.username = username;
    16     }
    17 
    18     public String getPassword() {
    19         return password;
    20     }
    21 
    22     public void setPassword(String password) {
    23         this.password = password;
    24     }
    25 
    26     public String execute() throws Exception {
    27         if (getUsername().equals("xingoo") && getPassword().equals("123")) {
    28             ActionContext.getContext().getSession().put("user", getUsername());
    29             return SUCCESS;
    30         }else{
    31             return ERROR;
    32         }
    33     }
    34 }
    复制代码

      这里还要两个国际化文件,

      mess.properties 

    复制代码
    loginPage=loginPage
    errorPage=errorPage
    succPage=succPage
    failTip=sorry,login failed
    succTip=welcome{0},login success
    user=username
    pass=password
    login=login
    复制代码

      mess_zh_CN.properties

    复制代码
    loginPage=登陆界面
    errorPage=失败界面
    succPage=成功界面
    failTip=对不起,您不能登录!
    succTip=欢迎,{0},您已经登录!
    user=用户名
    pass=密 码
    login=登陆
    复制代码

      登陆界面

      登陆成功

      登陆失败

    from: http://www.cnblogs.com/xing901022/p/3961661.html

  • 相关阅读:
    jQuery attr 与 prop 区别最简单分析
    Js事件处理模型/周期
    canvas实现点击带水纹的按钮
    js作用域问题
    js 函数里的 this
    css3: scrollLeft,scrollWidth,clientWidth,offsetWidth 的区别
    C# 中的Async 和 Await 的用法详解
    1、Task的优势
    探秘C#中的yield关键字
    详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/5746822.html
Copyright © 2011-2022 走看看