问题:

为什么有structs

作为一种框架(frameset)可以与传统的mvc进行比较?

MVC是一种模式数据处理、显示和数据输入分开,来规范开发,但是却又并不规范。可以这样想:有三家公司,他们对于MVC有自己的理解和编写方式所以编写的方式却又并不相同,这样structs应运而生。

Structs是一种基于MVC的规范来进行开发。这样再编程的过程中可以发现:

1.程序规范化了

2.程序编写效率高

3.程序同时可维护性提高且可读性增强。

但我们可以根据任何事物不能完全的原则,所以这样的方法也有缺陷,这里就不细说了。

简单的提以下几点供读者考虑:

下面是struts的关键点:

struts如果仅仅只是会用工具然后点击生成,那样只能叫“点”过,不能叫学过。

任何程序开发需要明白流程,只有真正的原理才能在使用工具时明白底层的调用关系,在后续的遇到一些需要“真功夫”时才能拿得出手。

整个用structs进行测试的开发步骤(注:整个程序考虑是struts1.3.10  struts2在此基础上改进):

1.建立工程

2.引入jar包

3.建立登录login.jsp提交相应的数据表单

4.编写actionform和action(关于login)

5.编写struct-config.xml 用于配置actionform对应关系和跳转的位置

6.编写跳转成功页面wel.jsp和失败页面error.jsp

7.配置web.xml进行配置关键的actionservlet

8.进行测试

核心代码:

1.跳转到主界面:index.jsp (这样具有更好的保密性)

2.登录界面login.jsp

3.增加表单actionform

 package com.ly.forms;

 //用户表单,用于填充数据
import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm { //属性定义(规范与jsp中的控件名一样)
private String username;
private String passwd; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
} }

4.表单对应的action

package com.ly.actions;
//这是一个action 需要继承action
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import com.ly.forms.UserForm; public class LoginAction extends Action { //execute可被自动调用 类似servlet dopost()方法 public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub //把form强转成对应的userform类
UserForm userform=(UserForm)form; System.out.println("用户名="+userform.getUsername()+"密码="+userform.getPasswd());
//return super.execute(mapping, form, request, response); //简单验证
if(userform.getPasswd().equals("123"))
{
//把用户名放到request 对象域中
request.setAttribute("username", userform.getUsername()); //密码123是合法用户mapping 是直接返回actionServlet
return mapping.findForward("ok");
}
else
{
return mapping.findForward("err");
}
} //需要重写一个方法 }

5.添加struts配置文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 配置表单 -->
<form-beans>
<!-- name 表单名字随意 (小写) -->
<!-- type是表单的全路径 -->
<!-- 配置struts 中action 与actionForm的关系 -->
<form-bean name="userForm" type="com.ly.forms.UserForm"/>
</form-beans> <action-mappings>
<!-- 配置具体 action 其path:表示将来访问url -->
<!--name: action与对应 actionForm的对应-->
<!-- path:action全路径 -->
<action path="/login" name="userForm" type="com.ly.actions.LoginAction">
<!-- 这里配置跳转关系 --> <!-- name是结果名称 path是转发页面 -->
<forward name="ok" path="/WEB-INF/wel.jsp"/>
<forward name="err" path="/WEB-INF/error.jsp"/>
</action>
</action-mappings>
</struts-config>

6.(省略wel.jsp 和error.jsp 只需简单写写就行必要时再添加)

进行web配置 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">
<!-- 配置structs -->
<!-- 用actionServlet控制 -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 指明 配置文件 strcts-config路径 -->
<init-param> <param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

struts配置细节

一个简单的登陆测试

下面是流程的截图(仅供参考):

actionServlet进行了实例化对象(反射机制),这样才能对表单进行添加数据(actionform)

注意 表单中的set和get方法

通过actionservlet来明细整个流程会对整个流程更加清晰

考虑:在此基础上增加在成功界面显示登录者的用户名

但是会出现中文乱码问题(在wel.jsp中添加语句并不会有太多的用 考虑:整个流程在actionservlet中已然已经把数据添加到表单了)

(考虑使用过滤器)--记得在web.xml配置过滤器

主要代码:

package com.ly.filters;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyFilter1 extends HttpServlet implements Filter { public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub //过滤方法
arg0.setCharacterEncoding("utf-8"); //设置接收编码 arg2.doFilter(arg0, arg1); //必须(否则停止前进) arg1.setContentType("/text/html;charset=utf-8");
} public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }

在web.xml中添加  

效果:

以上仅是一个小的demo 仅供学习。

  日进一小步,月过一大步~~加油!!

web框架-Struts开始的更多相关文章

  1. JAVA web 框架集合

    “框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...

  2. Spring 4 官方文档学习(十三)集成其他web框架

    重点是通用配置,非常建议看一下!有助于理解Spring的ApplicationContext与Servlet Container的关系! 1.介绍 Spring Web Flow SWF目标是成为we ...

  3. Spring与其他Web框架集成

    Spring与多种流行Web应用框架(Struts.JSF和DWR)集成的方法. Spring强大的IoC容器和企业支持特性使其十分适于实现Java EE应用的服务和持续层. 对于表现层,可以在许多不 ...

  4. 读《架构探险——从零开始写Java Web框架》

    内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...

  5. 调查:Java程序员最亲睐的Web框架

    这是关于Java的第二个调查,第一个调查请点这里查看. 这一次,我们要讨论的是web框架. 只有少数几种语言像Java一样提供了各种各样的web框架,上面的统计图就是一个证据.下面是其他开发者所使用w ...

  6. 自己动手写web框架----1

    本文可作为<<自己动手写struts–构建基于MVC的Web开发框架>>一书的读书笔记. 一个符合Model 2规范的web框架的架构图应该如下: Controller层的Se ...

  7. 十三、MVC的WEB框架(Structs2)

    一.Structs2的应用 Structs2是基于MVC的WEB框架.一般基于框架的程序要运行成功,对于JAR包的版本,配置文件的正确性有着苛刻的要求,一个地方错了,都会导致框架程序运行出错. 1.首 ...

  8. java web框架发展的新趋势--跨界轻型App

    “跨界(cross over)在汽车界已然成风,将轿车.SUV.跑车和MPV等多种不同元素融为一体的混搭跨界车型,正在成为汽车设计领域的新趋势.从个人而言,当包容.多元的审美要求和物质要求越来越强烈时 ...

  9. Java Web学习总结(32)——Java程序员最亲睐的Web框架

    这一次,我们要讨论的是web框架. 只有少数几种语言像Java一样提供了各种各样的web框架,上面的统计图就是一个证据.下面是其他开发者所使用web框架列表: spring MVC/Spring Bo ...

随机推荐

  1. Python接口自动化--requests 1

    # _*_ encoding:utf-8 _*_ import requests #请求博客园首页,无参数的get请求 r = requests.get('http://www.cnblogs.com ...

  2. Tarjan-割点&桥&双连通

    $Tarjan$求割点 感觉图论是个好神奇的东西啊,有各种奇奇怪怪的算法,而且非常巧妙. 周末之前说好回来之后进行一下学术交流,于是wzx就教了$Tarjan$,在这里我一定要说: wzx  AK   ...

  3. [Luogu 3707] SDOI2017 相关分析

    [Luogu 3707] SDOI2017 相关分析 前言 Capella 和 Frank 一样爱好天文学. 她常在冬季的夜晚,若有所思地望着东北方上空的五边形中,最为耀眼的一个顶点. 那一抹金黄曾带 ...

  4. 【转】Tomcat连接器:Coyote框架

    不论Tomcat的容器设计得如何精妙,本质上Tomcat就是个http服务器,需要从socket中获得HTTP数据流:另一方面,容器只能处理封装好的org.apache.coyote.Request ...

  5. [luogu3198] 玩具装箱

    题面 ​ 最近在搞dp, 发现自己的dp还是太弱了, 做的题比较少, 也有一些东西没学, 这道题算是我独立做的第一道斜率优化dp, 写篇题解纪念一下吧. ​ dp式比较简单, 就是一个线性的dp, 设 ...

  6. Pyspider抓取静态页面

    近期,我想爬一批新闻资讯的内容.新闻类型的网址很多,我想看看有没有一个网页上能包罗尽可能多的新闻网站呢,于是就发现了下面这个网页 http://news.hao123.com/wangzhi 这个页面 ...

  7. [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)

    有关SSBA库的资源比较少,我是在Github上搜索下载的,具体的GitHub官方下载地址为:SSBA 下载后在SSBA解压文件夹下新建文件夹build. 打开cmake gui,在source co ...

  8. HDU - 4118 Holiday&#39;s Accommodation

    Problem Description Nowadays, people have many ways to save money on accommodation when they are on ...

  9. Git与TortoiseGit基本操作

    Git与TortoiseGit基本操作 1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(C ...

  10. 1.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——编辑命令

    在编辑模式中,命令行包括几个重复之前命令的功能.这些以及其他很多命令功能时常设计键盘上的特殊键,所以给出Table 1作为参考,给出了许多键在典型的Macintosh键盘上的标记符号.若你的键盘不太一 ...