zoukankan      html  css  js  c++  java
  • 【JavaEE】Struts基础

    最近刚刚接触SSH框架,接手别人的代码,要尽快熟悉以便日后维护,但感觉无从入手,一开始对着代码好几个小时连java类是怎么被调用的都不知道,从网上找的一些文章,大多都是教怎么配置而缺少解释。这两天查了些资料,把基本配置贴出来,解释一下部分代码,希望能给初学的人一些帮助。

    1.Struts

    这里按惯例我也用一个登陆界面为例。

    我使用的编译器是Myeclipse,首先要去官网下载struts的包(我下的版本是struts-2.2.3.1-all):http://struts.apache.org/

    嫌麻烦的话也可以不去下载,因为MyEclipse已经把这个放到了%MyEclipse for Spring%\MyEclipse for Spring 9\configuration\org.eclipse.osgi\bundles\95\1\.cp\data\2.1\core路径下面。

    新建web project,解压刚下载的struts包并将下面九个包放到lib目录下(保险的办法的把所有jar包全放过去,必须用到的是下面的几个,比较多的说法是引五个核心包,但只有那五个是不够的):

    commons-fileupload-1.2.2.jar(文件上传);

    commons-io-2.0.1.jar(输入输出流组建);

    commons-lang-2.5.jar(工具类);

    commons-logging-1.1.1.jar(日志包);

    freemarker-2.3.16.jar(UI标签模板);

    javassist-3.11.0.GA.jar(分析、编辑和创建Java字节码的类库);

    ognl-3.0.1.jar(语言包);

    struts2-core-2.2.3.1.jar(核心类库);

    xwork-core-2.2.3.1.jar(Xwork类库)。

    下面进行FilterDispatcher的配置:

    打开WebRoot/WEB-INF/web.xml文件,加入如下代码:

     1 <?xml version="1.0" encoding="UTF-8"?>
    2 <web-app version="2.5"
    3 xmlns="http://java.sun.com/xml/ns/javaee"
    4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    7 <display-name></display-name>
    8
    9 <!--=======================配置struts2============================-->
    10 <filter>
    11 <filter-name>struts2</filter-name>
    12 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    13 </filter>
    14 <filter-mapping>
    15 <filter-name>struts2</filter-name>
    16 <url-pattern>*.action</url-pattern>
    17 <url-pattern>*.jsp</url-pattern>
    18 </filter-mapping>
    19 <!--==============================================================-->
    20
    21 <welcome-file-list>
    22 <welcome-file>login.jsp</welcome-file>
    23 </welcome-file-list>
    24 </web-app>

    这里FilterDispatcher用来初始化struts2,并且处理以.action和.jsp结尾的web请求。

    在WebRoot下新建一个login.jsp,显示登陆界面(上面已配置该页面为本站点默认页面,提交给LoginAction类处理,实际上并不是直接提交给这个类,后面会介绍):

     1 <%@ page language="java"import="java.util.*" pageEncoding="gb2312"%>
    2 <%@ taglib uri="/struts-tags" prefix="s"%>
    3
    4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    5 <html>
    6 <head></head>
    7 <body>
    8 <s:form action="LoginAction.action">
    9 <s:textfield name="username" label="用户名:"></s:textfield>
    10 <s:password name="password" label="密码:"></s:password>
    11 <s:submit value="登陆"></s:submit>
    12 </s:form>
    13 </body>
    14 </html>

    在src中新建LoginAction类,处理登录请求:

     1 package action;
    2 import com.opensymphony.xwork2.ActionSupport;
    3
    4 @SuppressWarnings("serial")
    5 public class LoginAction extends ActionSupport {
    6 private String username =null;
    7 private String password =null;
    8 @Override
    9 public String execute() throws Exception {
    10 // TODO Auto-generated method stub
    11 if(username.equals("admin") && password.equals("888888")){
    12 return SUCCESS;//Action类中的常量,值为字符串success
    13 }
    14 return LOGIN;//Action类中的常量,值为字符串login
    15 }
    16 public String getUsername() {
    17 return username;
    18 }
    19 publicvoid setUsername(String username) {
    20 this.username = username;
    21 }
    22 public String getPassword() {
    23 return password;
    24 }
    25 public void setPassword(String password) {
    26 this.password = password;
    27 }
    28 }

    下面编写登陆成功后的页面,在WebRoot下新建success.jsp:

     1 <%@ page language="java"import="java.util.*" pageEncoding="gb2312"%>
    2 <%@ taglib uri="/struts-tags" prefix="s"%>
    3
    4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    5 <html>
    6 <head></head>
    7 <body>
    8 <h1>欢迎回来&nbsp;<s:property value="username"/></h1>
    9 </body>
    10 </html>

    之后在src目录下建struts.xml,用来配置上面Action的信息:

     1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE struts PUBLIC
    3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    4 "http://struts.apache.org/dtds/struts-2.3.dtd">
    5 <struts>
    6 <package name="package"extends="struts-default">
    7 <global-results>
    8 <result name="login">/login.jsp</result>
    9 </global-results>
    10 <action name="LoginAction"class="action.LoginAction">
    11 <result name="success">/success.jsp</result>
    12 </action>
    13 </package>
    14 </struts>

    此时运行程序,打开浏览器预览,可以看到登陆界面,输入admin/888888,即可转到登陆成功的界面。

    这里解释一下struts.xml中的配置:

    package是一个类似对象的组件,name属性指定一个名字,便于被其他package引用;extends属性(可选)是说从继承哪个package的行为,struts-default.xml许多包里都有定义,这里的是源自struts2-core-2.2.3.1.jar;所有的result、action必须配置到package中。

    global-results指定所有的全局result,当返回结果为String类型的login(name属性的值)时,进入login.jsp页面。

    action指定一个类,当action.LoginAction(调用覆写的execute方法)返回字符串success时,即转到success.jsp页面。

    具体实现过程是:提交表单后,数据被提交到/struts2/下的一个.action程序,struts2截获这个请求(在web.xml中进行的配置,处理.action和.jsp结尾的请求),之后程序查找struts.xml文件,找到名为LoginAction的action,根据class名生成一个这个类的实例,将数据set到该实例中,调用execute方法,result标签则根据返回的结果进行页面的重定向,最后销毁这个action实例。

    到这儿,Struts的基本工作流程就进行完了,以后会把拦截器、数据校验那些贴出来用作参考,主要java web方面我没有找到一个像w3school那样有效地参考网站,如果哪位朋友有类似的参考网站,麻烦说一下,我也就懒得敲那么多东西了。

  • 相关阅读:
    Hologres如何支持亿级用户UV计算
    飞猪基于 Serverless 的云+端实践与思考
    高德打车构建可观测性系统实践
    程序员写好技术文章的几点小技巧
    配置审计(Config)变配报警设置
    进入中国内地第31年的麦当劳 ,为什么还能不断吸引新消费人群?
    OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心
    找出有序数组中缺失的数字
    删除值重复的结点
    想交链表----若有缘 必相见
  • 原文地址:https://www.cnblogs.com/smarterplanet/p/2182078.html
Copyright © 2011-2022 走看看