web框架-Struts开始

问题:

为什么有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

 1 package com.ly.forms;
 2 
 3 //用户表单,用于填充数据
 4 import org.apache.struts.action.ActionForm;
 5 
 6 public class UserForm extends ActionForm {
 7 
 8     //属性定义(规范与jsp中的控件名一样)
 9     private    String  username; 
10     private String passwd;
11     
12     public String getUsername() {
13         return username;
14     }
15     public void setUsername(String username) {
16         this.username = username;
17     }
18     public String getPasswd() {
19         return passwd;
20     }
21     public void setPasswd(String passwd) {
22         this.passwd = passwd;
23     }
24     
25 }

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 是直接返回actionServletreturn 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

注意 表单中的setget方法

通过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 仅供学习。

 

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

转载于:https://www.cnblogs.com/ly199553/p/5392349.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加快上架方法

估计最近苹果app应用上架的比较多&#xff0c;审核比较慢&#xff0c;现在一个app从提交到上架短则7&#xff0c;8天&#xff0c;长则2&#xff0c;3个星期。我在实际上线应用时&#xff0c;总结了一个简单实用的小技巧&#xff0c;可以加快上架时间&#xff0c;最近使用这种方…

接口自动化测试 返回html,接口自动化测试实战(更新完毕)

前言自动化没练习的项目怎么办&#xff1f;自动化已经成为测试的必备技能之一了&#xff0c;所以&#xff0c;很多想跳槽的测试朋友都在自学&#xff0c;特别是最实用的接口自动化&#xff0c;但是很多人因为没有可以练手的项目而苦恼&#xff0c;最终导致缺乏实战经验&#xf…

Opencv 图像增强算法 图像检测结果及代码

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

php Hash Table(四) Hash Table添加和更新元素

HashTable添加和更新的函数&#xff1a; 有4个主要的函数用于插入和更新HashTable的数据: int zend_hash_add(HashTable *ht, char *arKey, uint nKeyLen,void **pData, uint nDataSize, void *pDest); int zend_hash_update(HashTable *ht, char *arKey, uint nKeyLen, void …

山寨“饿了么”应用中添加菜品数量按钮效果

山寨“饿了么”应用中添加菜品数量按钮效果 本人视频教程系类 iOS中CALayer的使用 最终效果&#xff1a; 山寨源头&#xff1a; 源码&#xff1a;&#xff08;此源码解决了重用问题&#xff0c;可以放心的放在cell中使用&#xff09; AddAndDeleteButton.h 与 AddAndDeleteBu…

html间数据传送,Express框架与html之间如何进行数据传递(示例代码)

关于Node.js 的Express框架介绍&#xff0c;推荐看菜鸟教程的Express框架&#xff0c;很适合入门&#xff0c;这里不再赘述&#xff0c;这里主要讲一下Express框架与html之间如何进行数据传递我采用的是JQuery的Ajax()向后台传参方式(url传参)1、Type属性为Get时&#xff1a;(1…

数字图像去噪典型算法及matlab实现

图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染&#xff0c;一般数字图像系统中的常见噪声主要有&#xff1a;高斯噪声&#xff08;主要由阻性元器件内部产…

pat1100. Mars Numbers (20)

1100. Mars Numbers (20) 时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard 作者CHEN, YuePeople on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars.The numbers 1 to 12 on Earch is called "jan, feb, …

【USACO1.1】Broken Necklace

题意 一个环形项链&#xff0c;有rbw三种珠子&#xff0c;r代表red&#xff0c;b代表blue&#xff0c;w代表white&#xff0c;从任意一个位置断开&#xff0c;两端分别取珠子&#xff0c;同一端取的珠子要相同颜色&#xff0c;w可以染成想要的颜色&#xff0c;即既可当作r也可以…

html+注释格式化,使用xml注释来生成格式化的html输出

我试图从我在xml文件中的注释中生成一个格式良好的html文档。目前我有一个xml文件&#xff0c;用于生成xml表格的html列表。为了让我添加有关表格的评论&#xff0c;我手动将注释添加到输出html文件中。使用xml注释来生成格式化的html输出我想如果可能将html代码放在xml文件中作…

图像增强-图像锐化

图像锐化主要影响图像中的低频分量&#xff0c;不影响图像中的高频分量。 图像锐化的主要目的有两个&#xff1a; 1.增强图像边缘&#xff0c;使模糊的图像变得更加清晰&#xff0c;颜色变得鲜明突出&#xff0c;图像的质量有所改善&#xff0c;产生更适合人眼观察和识别的图像…

[译]git revert

git revert git revert用来撤销一个已经提交了的快照. 但不是从项目历史中移除这个commit, 而是生成一个新的commit, 老的commit还是保留在历史项目里面的. 这样做的好处是防止了项目丢失历史. 用法 git revert <commit>生成一个新的commit, 撤销老的<commit>的所有…

图像二值化算法总结

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#xff…

html 替换反斜杠,在URL直接替换反斜杠反斜杠

我们有一个系统&#xff0c;基于Moodle的平台&#xff0c;在这里的文件是这样引用&#xff1a;在URL直接替换反斜杠反斜杠的http&#xff1a;// [服务器] /file.php/3/LR4/info/ index.html的现在&#xff0c;这个伟大的工程&#xff0c;但是我们的一些老师错误地使用落后的斜杠…

VMware桥接模式无法连网

2019独角兽企业重金招聘Python工程师标准>>> #VMware桥接模式无法连网 在VMware上装了个CentOS7&#xff0c;使用桥接模式连网&#xff0c;开始使用的时候没有问题&#xff0c;可以正常上网。最近打开的时候发现上不了网了&#xff0c; 使用ifconfig查看也没有分配到…

Java 7 中 NIO.2 的使用——第四节 文件和目录

Files类提供了很多方法用于检查在于你真正实际去操作一个文件或目录。这些方法强烈推荐&#xff0c;也非常有用&#xff0c;也能避免很多异常的发生。例如&#xff0c;一个很好的习惯就是在你试着移动一个文件从一个地方到另一个地方的时候&#xff0c;先检查文件是否存在。 检…

计算机二级access知识点6,2019年计算机二级ACCESS考试知识点:关系数据模型

【导语】2019年计算机二级考试备考正在进行中&#xff0c;为了方便考生及时有效的备考&#xff0c;那么&#xff0c;无忧考网为您精心整理了2019年计算机二级ACCESS考试知识点&#xff1a;关系数据模型&#xff0c;欢迎大家的关注。如想获取更多计算机二级考试的备考资料&#…

乘方取模计算(模幂计算)

乘方取模计算也称为模幂计算&#xff0c;在密码系统中经常使用&#xff0c;是不可缺少的。 使用本程序可以解HDU2035&#xff0c;只需要考虑输入和输出。 /** 乘方取模** 已知给定的正整数a、n和m&#xff0c;计算x的值&#xff0c;a^n x (mod m)。** 二分法用在这里也很有效果…

Moldflow中文版注塑流动分析案例导航视频教程

http://item.taobao.com/item.htm?spma1z10.5.w4002-9510581626.18.30lDTO&id43054534418 QQ&#xff1a;2911984429 http://aidem.lingw.net/

Jaxb annotation使用

JAXB&#xff08;Java Architecture for XML Binding) 是一个业界的标准&#xff0c;是一项可以根据XML Schema产生Java类的技术。该过程中&#xff0c;JAXB也提供了将XML实例文档反向生成Java对象树的方法&#xff0c;并能将Java对象树的内容重新写到XML实例文档。从另一方面来…