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

来源:互联网 发布:广电网络多少钱一年 编辑:程序博客网 时间:2024/06/05 05:13

技术这个东西就是一个积累的过程,从现在其我要通过点滴的学习和积累,努力从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);    }}

原创日志,请勿转载。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 反派摄政王有了读心术,我躺赢了 星际大佬在荒野求生综艺爆红 满级女配在恋爱综艺当咸鱼 救命!战神王爷对我动了情 全球角色等级考核 大雍女提刑 相府逃妾登基了 电竞:荣光归你 撩疯!禁欲傅总嗜我成瘾 惊!废材她捶了天道 病娇战神的醋坛子翻了 当npc成为天降娘亲后她佛了 女主修仙,法力无边 惊!疯批狐王哭着求我摸尾巴 穿成农女后拥有了一整片森林 锦鲤系统:小奶包她欧气爆棚 不可退出 傲娇殿下整天粘着我要入赘 路人甲她又又又上位了 鬼医王妃,带着医毒空间回来复仇 凤落人间千般好 我加载了怪谈游戏 大国体育 薄教授是个护妻狂魔 我在京都贫民巷当神医 我带着游戏账号回古代经商 暴君心尖宠她从天上来 在大理寺卿怀里假意娇嗔 软萌女法师 黑客大佬又被伪装奶狗缠上了 豪门大佬每天都在娱乐圈艰难求生 荒野攻略学长手札 端王殿下又在书房偷看我 我欲修仙,狗皇帝滚边 新鲜!乡下来的小娇娇震惊全球 穿越后,病弱王爷日夜娇哄我 穿成恶毒妃子后,靠弹幕洗白了 穿成炮灰后全家在古代逃荒求生 重生九零:替嫁傻妻成了大佬心头肉 夏日陷情 穿成万人迷文里的炮灰女配