Struts1学习笔记总结
Struts1学习笔记总结

Struts1学习笔记总结
Struts1 (1)
Struts1和Servlet的关系 (1)
创建第一个Struts1项目 (1)
例子1: (3)
总结重点:struts1的工作流程(基于MVC模式的) (7)
ActionForm和VO的区别:
一样的内容,不一样的作用
ActionForm只接收前台表单传来的数据
VO是conga后台提取的数据向前台传递
创建第一个Struts1项目
新建一个web项目,选择1.4即可
右键----MyEclipse----Add Struts Capacity
---------------Struts控制文件的路径
一.普通的Servlet的工作流程 (7)
二.Structs1的工作流程(和上面的对比记忆) (8)StFra bibliotekuts标签 (9)
Bean标签 (9)
html标签 (10)
logic标签(逻辑标记) (12)
i18n(国际化) (13)
Struts1
Struts1和Servlet的关系
Jsp+Servlet+Javabean
TLD(标签)
1)
2):显示信息
3):逻辑标签
struts-config.xml
Struts笔记

Struts概念4、struts是一个开源的框架1、为什么有Struts?2、Struts的好处为什么是Web层框架Struts原理手写一个Struts//定义属性【这里有一个规范:就是我们定义属性的时候,//应该和jsp页面的控件属性一样。
如果有人提出疑问:说表单的属性名是不是一定和控件名一样?//只要保证set 和get 方法与属性名存在关联】4.Action5.Filter处理中文乱码public class MyFilter1 extends HttpServlet implements Filter {public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubarg0.setCharacterEncoding("utf-8");//设置接受的编码arg2.doFilter(arg0, arg1);//}public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub}}<!-- 配置过滤器 --><filter><filter-name>MyFilter1</filter-name><filter-class>com.mhy.filters.MyFilter1</filter-class> </filter><filter-mapping><filter-name>MyFilter1</filter-name><url-pattern>/*</url-pattern></filter-mapping>使用工具开发struts完全使用工具开发5.创建表单截图创建ActionMysqlJava EE 中三种标签标签的选择Struts jstl标签技术为什么有?Jstl标签的好处常用标签引入标签<% taglib %>Java EE 5 Libraries->jstl-1.2.jar->META-INF->c.tld案例讲解c标签c:out标签<%//这句话本应放在控制器中//如果我们的域对象中有相同的属性名,c:out 优先级是pageContext>request>session>applicationrequest.setAttribute("abc","你好1<a href=''>百度</a>") ;//session.setAttribute("abc","你好2") ;//application.setAttribute("abc","你好3") ;//pageContext.setAttribute("abc","你好4") ;User u=new User();u.setName("马海燕");u.setAge(30);request.setAttribute("user",u);%><c:out value="hello world"></c:out><h1>如何输出request/session/application/pageContext域对象的数据</h1><!-- escapeXml 用于指定按照html样式显示,默认为true【表示文本】false【html样式】 --><c:out value="${abc}" default="没有值" escapeXml="false"></c:out><h1>如何输出对象</h1><c:out value="${}"></c:out> ||<c:out value="${user.age}"></c:out><br/>${} @@ ${user.age*20}c:set 标签<body><c:set var="abc" value="你好!" scope="request"></c:set><%//上面的标签等价于//request.setAttribute("abc","你好!");%><c:out value="${abc}"></c:out></body>c:remove<body><%request.setAttribute("a","你好!中国。
struts1学习笔记

struts1开发学习笔记使用一个简单的例子记录struts1开发过程。
0、 描述主要功能描述:index 界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。
newProduct.jsp 是录入的界面,searchProduct.jsp 是查询列表的界面。
ProductAction.java 是处理逻辑的action简单描述流程图:1、 构建环境在Myeclipse 中,新建一个工程StrutsTest ,选择该工程,右键Myeclipse->add srutscapapibality ,弹出界面,选择struts1.2支持。
如下图所示:添加完struts 支持后,lib 目录下会增添struts 的jar 包、增添struts 的配置文件:/WEB-INF/struts-config.xml 、同时在web.xml 中增添了struts 的配置。
2、 代码编写2)创建工具类Util.java,从数据库连接池中获得连接。
需要两个步骤第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源,第二步:在util类中读取配置获得连接,util.java如下:3)创建工具类EncodingFilter.java,自定义过滤器,并在web.xml中配置,参考web.xml配置中内容。
EncodingFilter.java的内容如下:4)修改web.xml,指定首页为index.jsp。
文件内容如下:最后定义了一个fileld 的过滤器,是用来过滤字符编码的,后面会提到。
6)index.jsp中提到productAction.action?method=viewAddForm,需要在在配置文件中配置了action的实现类,以及作为上传数据时用来保存数据的form:productForm10)searchProduct.jsp是查询结果界面,代码如下:http://localhost:8080/StrutsTest即可访问。
[计算机软件及应用]struts笔记
![[计算机软件及应用]struts笔记](https://img.taocdn.com/s3/m/86fb3752c950ad02de80d4d8d15abe23482f0323.png)
Struts学习笔记xml描述数据本身xsl修饰xmlDOMSAXstup 通过协议骨架远程对象典型的proxy代理struts:学j2ee应该朝domain model,FrameWork,Parttern,架构模式方向发展,才能深入了解掌握。
一、Domain Model领域模型:是对现实世界的对象模型是从现实世界抽取出来的一般是先把领域模型设计出来DDD领域驱动设计不像以前,上来先设计数据库,数据库是面向关系的,而java是面向对象的,先面向关系再面向对象,有点别扭ORM自动的把实例类自动转换成数据表实体对象概念,user就是实体概念,有标识值对象概念,属于实体对象的一部分,不是跟数据库的对应二、Parttern模式遇到什么事情用什么方案解决?1、设计模式,GOF设计模式,对象思维,就是把现实中的实体抽象成对象工厂,策略,代理很重要,掌握了设计模式,就有了对象的概念2、架构模式MVC架构模式3、分析模式RBAC(Roles Base Access Control)基于角色的访问控制,对权限设计的处理模型who谁用这些权限what针对哪些资源设计权限how授权给谁,怎么样授权三、FrameWork 框架框架不是一个成熟的产品,是个半成品,struts spring是给开发人员用的,是基础性的服务,就是提供基础组件,封装的是基础性的服务,才可以在各个行业通用。
是大师级的人物写出来的框架,如果我们不用框架,自己就得先写框架,然后再开发具体业务,那就太费时,用框架,我们就只考虑具体业务设计开发,struts就是一个mvc框架。
领域模型对象表现层-业务层-持久层struts spring hibernate以前:jsp -实体bean现在:jsp -采用DTO 或者VO宜于扩展:OCP,只增加相应的实现类,不用修改以前的类两层的一般是:C/S以前大量的存储都用存储过程,不适合跨平台思想B/S:呈现层,业务层,持久层,数据库层可以把界面交给界面组做业务层交给业务开发做数据库交给数据库开发做分层好处,jsp就是显示用的,不参与业务实现,javabean实现业务,分层可以复用,客户端可以是pc,也可以是手机,只是前端采用不同的html,wml实现,业务层不变JDO有收费的也有开源的,但是开源的不太好hibernate 是开源的,用的比较多springstruts 我们用struts1.2是非常经典的mvc框架webwork分析struts的源代码,深入了解mvc在javaProject下建struts目录切换 workspace 到struts建一个test_servlet项目servlet特性:前面必须有“/”<url-pattern>/servlet/TestServlet</url-pattern><url-pattern>/TestServlet</url-pattern><url-pattern>*.action</url-pattern>敲任意字符.action,如果有*了前面不用加“/”<url-pattern>*.do</url-pattern>敲任意字符.do,如果有*了前面不用加“/”<url-pattern>/servlet/*</url-pattern>servlet/后面跟什么都可以访问servlet充当一个控制的角色,mvc中的c角色配置成*.do,通过request.getRequestURI判断请求的user.do,item.do,与配置文件里配置的参数比较,通过策略模式,派发到相应的servlet类(UserServlet,ItemServlet)servlet根据请求转到对应的manager类处理,然后转到实体类,dao层统称为model层,处理的结果转到jsp页面显示MVC:jsp 充当一个显示的界面mvc中的V(view)servlet mvc中的C(control)业务逻辑层 mvc中的M(Model)structs就是实现mvc面向请求的驱动Struts1.x struts2.x webwork面向事件的驱动M2就是MVC模式drp采用的是M1,业务逻辑和表示逻辑混合,jsp充当的角色太重,不适合多于10人开发M2适合大型项目开发,MVC,jsp(v)+servlet(c)+model(m)分层的概念servlet:接受业务参数,调用model层完成操作,然后转到jsp显示结果UserManager就是一个模型,如果UserManager封装的好哪怕改成swing也可以照用,那样才体现分层的思想实体类:贫血模型,vo,pojo设置模型:UserManager就是模型层的概念,增删改查最主要区别:M1没有分层M2是细粒度分层M1适合小型项目开发M2适合大型项目开发M model ,业务逻辑view jsp,显示层,呈现层UI Layercontroller servletswing:也是分层概念,mvc观察者模式tree,model通过浏览器访问某一个servlet接受参数,把参数组织打包,形成用户对象,调用model层处理完成后,返回给servlet层,servlet传递给jsp视图层,返回给浏览器,那样用户可以看到结果。
Struts1[1].X学习笔记
![Struts1[1].X学习笔记](https://img.taocdn.com/s3/m/0d846f1c59eef8c75fbfb3ed.png)
Struts基本原理1、Action什么时候初始化?Action请求时初始化,不是在读取配置时初始化。
2、每个Action共用一个实例,只初始化一次,所有请求共享一个action实例。
3、Struts1.2中Action是线程不安全,Struts2线程安全。
4、怎么实现Action的安全性编程?●注意不要用实例变量或类变量共享只是针对某个请求的数据●注意资源操作的同步性。
5、应用:统计action的访问次数。
设计一个实例变量,在调用action时该变量加1。
Integer count = 0;synchronized(count){ // 安全锁count++;}6、ActionForward:Redirect属性:false|no RequestDispatcher.forward跳转(默认)。
ture|yes HttpServletResponse.sendRedirect跳转。
为ture时路为绝对路径,网站外跳转要加协议名。
7、Attribute:用来存取form的关键字,缺省值与name一样8、validate是用于控制是否校验表单,true(缺省值):校验,false:不校验9、input 如果表单验证失败,则跳转到该值指定的位置(容器内跳转)。
Validate为true时才生效。
10、全局跳转:<global-forwards><forward name=”error” path=”/Error.jsp” /></global-forwards>11、ActionForm工作原理1) 检查Action的映射,确定Action中已经配置了对ActionForm的映射。
2)根据name属性,查找form bean的配置信息。
3)检查Action的formbean的使用范围,确定在此范围下(request,sess),是否已经有此formbean的实例4)假如当前范围下,已经存在了些formbean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。
Struts学习笔记

Struts工作原理与核心配置在使用JSP/Servlet时,原理为:JSP→web.xml中配置的servlet与servlet-mapping→Servlet(接收参数,验证,调用DAO操作)→然后跳转不同的页面。
使用Struts时,原理为:JSP→web.xml→ActionServlet(url-pattern:*.do)→struts-config.xml(根据path路径找到对应的Action与ActionForm)→ActionForm→validate方法验证,如果通过进入Action,否则返回input错误页)→Action→调用DAO进行判断→成功时跳转某个页面(Struts-config.xml:forward),失败时可以返回错误页(input)。
Struts-config.xml中的配置组成:所有的<form-bean>都要在<form-beans>里面包含<form-bean>包含两个属性:name:该bean的名称,为唯一标识Type:该bean的包类名。
这是Action的配置Action-mapping中包含多个ActionAction的属性:Name、Attribute表示该Action对应的ActionForm的名称,一个Action 只能对应一个ActionForm,一个ActionForm可以对应多个Action.Input:用来作为错误页的,当validate方法执行后有错误,则自动跳转到该页面。
”/”表示从WebRoot开始寻找页面。
Path:表示该Action的虚拟路径,必须加/,而且不需要加.do的后缀Scope=”request”:表示Action所保存的属性范围。
在Action中可以包含不同的forward路径Forward属性:Name:该forward的唯一标识,在Action中执行跳转时,需要通过该name 查找对应的路径。
Struts1几个知识点

Struts1几个知识点1:struts1的请求流程答:当视图中有表单提交时,通过表单的action属性传递提交的路径,一般以XXX.do结尾。
(1)当表单提交后容器(tomcat为例)会判断路径是否以.do结尾,如果是则转到中央控制器ActionServlet。
(2)再由web.xml中config找到struts1的struts-config.xml文件,在该文件中的action属性中查找path对应的值是否有前面视图中的请求路径(去掉.do),(3)如果有则判断此action中是否有name属性.(4)有则在struts-config.xml查找<form-beans>中有与name的属性值对应的FormBean类.(5)有则将视图提交的表单中的数据封装到该FormBean类中。
(6)此后在查找该action中是否有attribute键值,有则将封装好的FormBean对象放到以attribute的值为键,以该对象为值的键值对中,请求范围默认为session,但可以通过scope属性设置。
(7)之后,通过该action的type属性找到对应的类,再通过反射得到该类的对象并放到内存中。
(8)执行该类的execute方法,该方法中有四种参数,分别为:ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse,其中ActionMapping对象执行程序运行结束后反向问题,通过findForward(String name)方法去到struts-config.xml 中查找上述action中的forward属性中键name对应的文件,返回到该文件。
该方法中的ActionForm参数对象保存的即为上述经过封装的表单数据。
至此,struts1请求流程完毕。
2:解释为什么用formbean(ActionForm),如何用?答:当通过表单提交数据过多,获取就会变得繁琐和重复,在对应的应用控制器的execute方法中就得多次通过request.getParameter()方法获取表单中的数据。
struts1笔记

的实例。
public static ActionForm createActionForm(HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet) {
String attribute = mapping.getAttribute();
LoginForm loginForm=new LoginForm(); loginForm.setUsername("西门崔雪");
Байду номын сангаас
session.setAttribute("loginForm"loginForm)
ActionForm的底层代码
//获取ActionForm实例 -----
//获取ActionForm实例 ----3)检查该表单Bean的使用范围,查找在该范围内,是否已存在该Bean的实例。 如果已经存在,那么就重用该实例。 否则,就重新创建一个。 protected ActionForm processActionForm(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) {
private static ActionForm lookup String attribute, String ActionForm instance = nu HttpSession session = nu
if ("request".equals(sco instance = (ActionFo } else { session = request.ge instance = (ActionFo } return (instance);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts1 (1)Struts1和Servlet的关系 (1)创建第一个Struts1项目 (1)例子1: (3)总结重点:struts1的工作流程(基于MVC模式的) (7)一.普通的Servlet的工作流程 (7)二.Structs1的工作流程(和上面的对比记忆) (8)Struts标签 (9)Bean标签 (9)html标签 (10)logic标签(逻辑标记) (12)i18n(国际化) (13)Struts1Struts1和Servlet的关系Jsp+Servlet+JavabeanActionForm和VO的区别:一样的内容,不一样的作用ActionForm只接收前台表单传来的数据VO是conga后台提取的数据向前台传递创建第一个Struts1项目新建一个web项目,选择1.4即可右键----MyEclipse----Add Struts Capacity---------------Struts控制文件的路径TLD(标签)1)<html>2)<bean>:显示信息3)<login>:逻辑标签struts-config.xml<struts-config><data-sources/><!-- 连接数据库 --><form-beans><!--ActionForm的映射 --><form-bean name=""type=""></form-bean><!--name是ActionForm的名字,type是“包名.类名” --></form-beans><global-exceptions/><!--全局表达式 --><global-forwards><!--全局跳转,即可跳请求也可以跳页面 --><forward name=""path=""></forward><!--相当于public static final String success="" Action处理完毕后的转发对象--></global-forwards><action-mappings><!-- 必须有 --><action path=""forward="" ----局部的type=""></action><!-- 包名.类名 --></action-mappings><message-resources parameter=""/><!-- 资源文件 --></struts-config>担任Controller的是ActionServlet,所有的客户端请求都通过它来完成转发,必须在web.xml 中配置:注意:1)设定config参数的作用是设定struts-config.xml(包括了所有的Struts的相关请求转发及一些资源设定)的文档来源2)Servlet-mapping将所有以*.do结尾的请求将给ActionServlet来处理例子1:1)index.jsp<form action="user.do"method="post"><table><tr><td>用户名:</td><td><input type="text"name="username"></td></tr><tr><td>密码:</td><td><input type="password"name="pwd"></td></tr><tr><td colspan="2"><input type="submit"value="submit"><input type="reset"value="reset"></td></tr></table></form>2)struts-config.xml<struts-config><form-beans><form-bean name="userForm"type="erForm"></form-bean></form-beans><action-mappings><action path="/user"type="erAction" name="userForm"><forward name="success"path="/success.jsp"></forward><forward name="error"path="/error.jsp"></forward> </action></action-mappings></struts-config>3)UserFormpublic class UserForm extends ActionForm{private String username;private String pwd;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}}4)UserActionpublic class UserAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception {//1.得到表单中方的数据UserForm userform = (UserForm) form;String username = userform.getUsername();String pwd = userform.getPwd();//2.往后台传数据System.out.println(username+"======"+pwd);boolean flag = UserDao.getInstance().findByUser(username, pwd);if(flag){return mapping.findForward("success");}else{return mapping.findForward("error");}}}5)UserDao//单例模式public class UserDao {private static UserDao instance = new UserDao();private UserDao(){}public static UserDao getInstance(){return instance;}public boolean findByUser(String username,String pwd){return false;}}6)连接数据库(DBConnection 和UserDao)public boolean findByUser(String username,String pwd){boolean flag = false;DBConnection db = new DBConnection();String sql = "select username,password from users where username=? and password=?";try {Connection conn = db.connection();PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, username);pst.setString(2, pwd);ResultSet rs = pst.executeQuery();if(rs.next()){flag = true;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return flag;}7)获取信息:在页面上可以使用EL表达式8)在UserForm中新加入两种方法://和表单中按钮的作用是一样的public void reset(ActionMapping mapping, HttpServletRequest request) {System.out.println("reset");}//验证框架public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {System.out.println("验证框架");return super.validate(mapping, request);}顺序:先清空,再放值,再验证9)动态获取表单的数据①struts-config.xml将原来的form-bean去掉<form-bean name="userForm"type="org.apache.struts.action.DynaActionForm"><form-property name="username"type="ng.String"></form-property><form-property name="pwd"type="ng.String"></form-property></form-bean>②将UserAction改为:public class UserAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception {//1.得到表单中方的数据DynaActionForm userForm = (DynaActionForm) form;System.out.println(userForm.get("username")+"*******"+userForm.get("pwd"));String username = (String) userForm.get("username");String pwd = (String) userForm.get("pwd");//2.往后台传数据boolean flag = UserDao.getInstance().findByUser(username, pwd);if(flag){request.setAttribute("username", username);return mapping.findForward("success");}else{return mapping.findForward("error");}}}总结重点:struts1的工作流程(基于MVC模式的)一.普通的Servlet的工作流程1. web客户端发送一个request到tomcat2. tomcat接受请求,3. new HttpServletRequest对象4. new HttpServletResponse 对象5. 发送doGet/doPost到相应的servlet6. servlet截取到相应的URL7. 根据URL找到相应(文件/数据)8. 调用相应的业务逻辑—就是调用相应的Dao9. 对数据的操作—10. 返回给Dao一个结果11. 将Dao返回的结果返回到相应的servlet12. servlet会根据返回的结果找到跳转的页面13. 在tomcat会根据结果生成页面14. 将页面返回给web客户端二.Structs1的工作流程(和上面的对比记忆)1 web客户端发送一个request到tomcat2 tomcat接受请求3 new HttpServletRequest对象4 new HttpServletResponse对象5 发送doGet/doPodt方法到相应的ActionServlet6 ActionServlet会读取struts-config.xml文件7 截取url信息8 根据url的配置信息,取得数据(从struts中的Action标签的内容放到ActionMapping当中)9 New ActionForm对象(作用:会收集表单数据,进行存取)10 ActionServlet会取得表单数据11 New Action12 会执行Actiion中的execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)13 从ActionForm中取得数据14 调用相应的模型层15 返回数据搭配Action16 通过ActionForward返回到ActionServlet17 通过forward到视图层(jsp)生成jsp18 返回response到web客户端Struts标签Bean标签标签头在哪找到:struts包下的打开即写成<%@ taglib uri="/tags-bean" prefix="bean"%>1)BeanActionpublic class BeanAction extends Action{public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception {request.setAttribute("hello", "测试一下");request.setAttribute("hello1", "<font color='red'>测试一下</font>");return mapping.findForward("show");}}2)struts-config.xml<action path="/bean"type="com.cstp.action.BeanAction"><forward name="show"path="/success.jsp"></forward> </action>3)success.jsp<bean:write name="hello"/><br><bean:write name="hello1"filter="true"/><br><bean:write name="hello1"filter="false"/><br>结果:其他标签:复制标记<bean:define>显示Bean属性<bean:write>标记<bean:message>标记注意:filter为true是不支持html代码html标签(只要是html就可以改成struts1的代码)和相同说明:生成的结果取决于Struts应用程序所位于的服务器的locale。