学习笔记1:Struts 2框架的搭建

原创 2015年11月21日 11:41:04

技术这个东西就是一个积累的过程,从现在其我要通过点滴的学习和积累,努力从IT小菜鸟成长为一个合格的计算机技术人员。

废话不多说,前几天学习了Struts,Spring和Spring JDBC搭建框架,在这里进行记录,为需要的人还有自己提供一点方便。

Struts 是第一步,可以通过web.xml,struts.xml等文件的配置,完成网站的框架的配置,和网页之间在不同条件下的切换。其实,在框架中,配置文件才是核心,也是比较容易出问题的。

我建立的文件目录和导入的包:
文件目录
导入的jar包
先看下web.xml,也是打开一个网站时,后台服务器首先查看的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
<filter>   
   <filter-name>struts-cleanup</filter-name>   
    <filter-class>   
     org.apache.struts2.dispatcher.ActionContextCleanUp   
    </filter-class>   
 </filter>   
 <filter>   
   <filter-name>struts2</filter-name>   
   <filter-class>   
     org.apache.struts2.dispatcher.FilterDispatcher   
    </filter-class>   
</filter>   
 <filter-mapping>   
    <filter-name>struts-cleanup</filter-name>   
    <url-pattern>/*</url-pattern>   
 </filter-mapping>   
 <filter-mapping>   
    <filter-name>struts2</filter-name>   
    <url-pattern>/*</url-pattern>   
 </filter-mapping>   

 <welcome-file-list>   
    <welcome-file>Login.jsp</welcome-file>   
 </welcome-file-list>   
 </web-app>  

如果需要配置其他信息的话,可以在网上查找web.xml的详细配置方式,但是请注意web.xml对于各种配置的顺序是有要求的。

通过web.xml文件中,welcome-file-list的配置,我们看到,打开网站首先看到的是Login.jsp网页。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %> 
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

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

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <body>
  <h1>用户登录:</h1>
    <form action="example2/login.action"  method="post">   
     <I><font face="楷体_GB2312" color="#FF0000"><s:fielderror />   
     </font>   
     </I>   
     <!-- 读取显示提示信息 -->   
     <table align="left">   
      <tr>   
       <td> 用户名: </td>   
       <td><input type="text" name="login.userName"></td>   
      </tr>   
      <tr>   
       <td> 密码:</td>   
       <td><input type="password" name="login.password"></td>   
      </tr>
       <tr>
       <s:submit value="注册"></s:submit>
       </tr> 
       <tr> 
        还没有账号,现在<a href="javascript:deleteUser('${list.userid }')">注册</a> :
       </tr>
      </table>   
     </form>   
  </body>
</html>

另外一个网页是Register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %> 
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

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

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
  <h1>用户注册:</h1>
    <form action="example/register.action"  method="post">   
     <I><font face="楷体_GB2312" color="#FF0000"><s:fielderror />   
     </font>   
     </I>   
     <!-- 读取显示提示信息 -->   
     <table>
     <tr>   
       <td> ID: </td>   
       <td><input type="text" name="user.id"></td>   
      </tr>      
      <tr>   
       <td> 用户名: </td>   
       <td><input type="text" name="user.userName"></td>   
      </tr>   
      <tr>   
       <td> 密码:</td>   
       <td><input type="password" name="user.password"></td>   
      </tr>   
      <tr>   
       <td> 确认密码:</td>   
       <td><input type="password" name="user.rePassword"> </td>   
      </tr>      
      <tr>   
       <td colspan="2">   
        <s:submit value="注册"></s:submit>   
       </td>   
      </tr>   
     </table>   
    </form>  
  </body>
</html>

还有两个网页作为返回的结果。
Congratulation.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

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

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    congratulations!${user.userName} <br> 
    Your id is ${user.id}<br><br> 
  </body>
</html>

Welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

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

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    congratulations!${user.userName} <br> 
  </body>
</html>

Struts 2框架中,另外一个核心的配置文件就是struts.xml文件,这类文件可以只是一个文件,也可以是一系列文件,一定注意文件名的书写,不要出错。
struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />

    <constant name="struts.multipart.maxSize" value="10000000000" />
    <constant name="struts.multipart.saveDir" value="/tmp" />
    <!-- 登陆 -->
    <include file="struts-example.xml"/>
    <include file="struts-example2.xml"/>
</struts> 

struts-example.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

    <package name="example" namespace="/example" extends="struts-default">
         <action name="register" class="org.kingtoon.action.RegisterAction" method="examplEexecute">   
            <result name="success">/Congratulation.jsp</result>   
            <result name="input">/Register.jsp</result>   
         </action>  
    </package>
</struts>

struts-example2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">        
<struts>
    <package name="example2" namespace="/example2" extends="struts-default">
         <action name="login" class="org.kingtoon.action.LoginAction" method="examplEexecute">   
            <result name="success">/Welcome.jsp</result>   
            <result name="input">/Login.jsp</result>   
         </action>  
    </package>
</struts>

从这些文件中,定义了两个action,通过jsp文件中的标签链接,将jsp文件的表单提交给action文件和action-validation文件
LoginAction.java

package org.kingtoon.action; 

import javax.servlet.http.HttpServletRequest;   
import org.apache.struts2.ServletActionContext;   
import org.kingtoon.bean.User;   
import com.opensymphony.xwork2.ActionSupport; 

public class LoginAction extends ActionSupport {
    private User user;   
    public String examplEexecute() throws Exception {   
        if(!user.getUserName().endsWith("root")&&!user.getPassword().endsWith("1234567890")){
            this.addActionMessage("鐧诲綍澶辫触锛岀敤鎴峰悕鎴栧瘑鐮侀敊璇紒");
            return "input";
        }    
        else{    
            HttpServletRequest request = ServletActionContext.getRequest ();   
            request.setAttribute("user", user);   
            return SUCCESS;   
        }   
    }   
}

RegisterAction.jsp

package org.kingtoon.action;   
import javax.servlet.http.HttpServletRequest;   
import org.apache.struts2.ServletActionContext;   
import org.kingtoon.bean.User;   
import com.opensymphony.xwork2.ActionSupport;   
public class RegisterAction extends ActionSupport {       
    private User user;   
    public String examplEexecute() throws Exception {   
        if(!(user.getPassword().equals(user.getRePassword()))){   
            this.addFieldError("password", "两次输入的密码不同   ");
            return "input";   
        }    
        else{    
            HttpServletRequest request = ServletActionContext.getRequest ();   
            request.setAttribute("user", user);   
            return SUCCESS;   
        }   
    }   
    public User getUser() {   
        return user;   
    }   
    public void setUser(User user) {   
        this.user = user;   
    }   
}  

两个action类里,对前台的操作进行一起判断和操作。action是对jsp最先进行操作的,如果有validation文件,先在这个文件中,进行验证,一般是对格式等进行检验。也可以不写这个文件,这些验证可以放到action类里。
LoginAction-validation.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC 
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
          "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">  
<validators>   
 <field name="user.userName">   
    <!-- 验证字符串不能为空 -->   
    <field-validator type="requiredstring">   
     <!-- 去空格 -->   
     <param name="trim">true</param>   
     <!-- 错误提示信息 -->   
     <message>未输入用户名!</message>   
   </field-validator>   

    <!-- 验证字符串长度 -->   
    <field-validator type="stringlength">   
     <param name="minLength">2</param>   
     <param name="maxLength">20</param>   
     <message>用户名格式错误!</message>   
    </field-validator>    
    </field>   

     <field name="user.password">   
        <field-validator type="requiredstring">   
         <param name="trim">true</param>   
        <message>未输入密码!</message>   
        </field-validator>   

        <field-validator type="stringlength">   
         <param name="minLength">6</param>   
         <param name="maxLength">18</param>   
         <message>密码格式错误!</message>   
        </field-validator>   
     </field>   
</validators>  

RegisterAction-validation.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC 
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
          "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">  
<validators>   
 <field name="user.userName">   
    <!-- 验证字符串不能为空 -->   
    <field-validator type="requiredstring">   
     <!-- 去空格 -->   
     <param name="trim">true</param>   
     <!-- 错误提示信息 -->   
     <message>用户名不能为空</message>   
   </field-validator>   

    <!-- 验证字符串长度 -->   
    <field-validator type="stringlength">   
     <param name="minLength">2</param>   
     <param name="maxLength">20</param>   
     <message>用户名长度应在2到18个字符间</message>   
    </field-validator>    
    </field>   

     <field name="user.password">   
        <field-validator type="requiredstring">   
         <param name="trim">true</param>   
        <message>密码不能为空</message>   
        </field-validator>   

        <field-validator type="stringlength">   
         <param name="minLength">6</param>   
         <param name="maxLength">18</param>   
         <message>密码长度应在6到18个字符之间</message>   
        </field-validator>   
     </field>   
</validators>  

差点忘记Java最核心的一个类User.java

package org.kingtoon.bean;   
import java.text.DateFormat;
import java.util.Date;   
public class User {
    private int id;
    private String userName;   
    private String password;  
    private String rePassword; 
    private String CreateTime;
    public int getid() {   
        return id;   
    }   
    public void setid(int id) {   
        this.id= id;   
    }  
    public String getPassword() {   
        return password;   
    }   
    public void setPassword(String password) {   
        this.password = password;   
    }  
    public String getRePassword() {   
        return rePassword;   
    }   
    public void setRePassword(String rePassword) {   
        this.rePassword = rePassword;   
    }   
    public String getUserName() {   
        return userName;   
    }   
    public void setUserName(String userName) {   
        this.userName=userName;
    }
    public String getCreateTime(){
        return CreateTime;
    }
    public void setCreateTime(){
        Date now = new Date(); 
        DateFormat d1 = DateFormat.getDateInstance();
        CreateTime = d1.format(now);
    }
}

原创日志,请勿转载。

Java Web SSH-Struts 2框架复习

Java Web SSH-Struts 2框架复习 一、   自定义MVC框架 1.        Struts2和MVC Struts2是一种基于MVC的Web应用框架,下面看看Strut...

Struts 2框架总结

struts2尝试提供平台给开发者快速的开发一般的任务。 struts2是MVC框架的实现,在struts2中model代码struts2中的action,view代码struts2中的result...

Struts 2框架的输入校验

Struts 2框架的输入校验 1.服务器端输入校验 1.1使用编码进行输入校验 使用validate()方法进行输入校验时,会对当前Action中的所有的方法有效。由于Struts 2框架可以...

第1讲 Struts 2框架入门

第1讲 Struts 2框架入门 Struts2简介 Struts2下载与安装 Struts2项目的基本组成 Struts2的配置文件 搭建Struts2开发环境 使用MyEclips...

Struts 2框架整合Spring

Struts 2框架整合Spring很简单,下面是整合的步骤。(1)复制文件。复制struts2-spring-plugin-x-x-x.jar和spring.jar到WEB-INF/lib目录下。其...

struts 2框架的使用和访问数据库的公共方法

Struts2工作流程 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。 一、核心控制器FilterDi...

Struts2 校验框架学习笔记

  • 2016年01月29日 16:41
  • 306KB
  • 下载

使用Struts 2框架实现文件下载

从服务器发送一个文件到浏览器需要以下几个步骤 把HTTP响应里的ContentType标头设置为被下载文件的内容类型。ContentType标头的作用是表明数据包里的数据是什么类型, 它由一个多...

第500篇---Struts 2框架实现的“Hello word”

第一步:为项目添加Struts 2支持 1.修改web.xml

Struts 2框架介绍

在我的前一篇博客你是否混谈MVC和三层>>层介绍过MVC模式,既然了解了MVC模式,再次我们就来了解一下实现MVC的框架--Struts框架.   一.Struts2 框架简介 Struts2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习笔记1:Struts 2框架的搭建
举报原因:
原因补充:

(最多只允许输入30个字)