struts1 知识总结

来源:互联网 发布:淘宝400客服电话是多少 编辑:程序博客网 时间:2024/06/05 20:17

  学到现在,发现不会的越来越多,想学的也越来越多。在JAVA世界里,技术层出不穷。要是一样一样学过去,估计这辈子就过去了。那些老师们说得很对,我们要学习那些不变的地方,往往这些地方就是技术的根本,从而以不变应万变。学习struts1的时候一直都觉得学习它的思想最重要。下面对我这三天的学习内容做一个总结。


1.struts是什么

 struts的目标是提供一个开发Web应用的开源框架,struts鼓励基于M2模式(即MVC设计模式)来开发程序。


2.基本原理图

     

  我们可以对这张图中的各个节点与MVC中的概念相对应起来。节点JSP就是View,表现层;节点ActionServlet可以理解为Controller,在struts中ActionServlet已经为我们做好了封装,至于如何转向,由什么类处理我们只要在配置文件中进行描述就可以了。这个配置文件就是struts-config.xml;节点Model+节点Action可以理解为MVC中的Model,java中可以看做是Java-bean。

  流程描述图:



3.重要知识点

  ActionServlet:该类控制导航流。

  ActionForm:是一个JavaBean,需继承org.apache.struts.action.ActionForm类,它捕获通过HTTP请求传送的参数。它针对每个HTML表单中的字段具有一个对应的属性。ActionServlet匹配请求中的参数和ActionForm中的属性,并调用ActionForm中的setter方法,将参数传入ActionForm。这个类还可以帮助我们做好数据类型的转换。

  ActionForward:Action在完成业务逻辑后,返回一个ActionForward 对象,ActionServlet根据ActionForward对象中的路径来调用页面完成响应

  Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个请求URI,当请求路径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMapping对象将告诉ActionServlet哪个Action类会被调用、哪个ActionForm类被用于传递页面数据以及哪些ActionForward将被用于转向

  有关Action、ActionForward、ActionForm的信息都是通过配置文件来定义的。


4.login简单实例的实现

  struts只能再web项目中使用。使用的时候我们需要先引入struts的jar包到WEB-INF/lib文件夹下。如图:


然后在web.xml文件下添加如下配置

<servlet>    <servlet-name>action</servlet-name>    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>    <load-on-startup>2</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>action</servlet-name>    <url-pattern>*.do</url-pattern>  </servlet-mapping>

把struts-config.xml文件放在WEB-INF/lib文件下:

<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE struts-config PUBLIC          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"><struts-config><form-beans><form-bean name="loginForm" type="com.bjpowernode.struts.loginActionForm"></form-bean></form-beans><action-mappings><action path="/login"type="com.bjpowernode.struts.loginAction"name="loginForm"scope="request"><forward name="success" path="/login_success.jsp"></forward><forward name="error" path="/login_error.jsp"></forward></action></action-mappings></struts-config>

具体代码:

view层:

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><%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 'index.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>     <a href="login.jsp">登录</a>  </body></html>

login.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><body><form action="login.do" method="post">用户:<input type="text" name="username" /> <br>密码:<input type="password" name="password" /> <br><input type="submit" value="登录"/></form></body></html>
login_success.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><body>登录成功!</body></html>
login_error.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><body>登录失败!</body></html>


package:com.bjpowernode.struts

LoginActionForm类:

package com.bjpowernode.struts;import org.apache.struts.action.ActionForm;@SuppressWarnings("serial")public class loginActionForm extends ActionForm {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
LoginAction类:

package com.bjpowernode.struts;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;/** *  * @author wyj * */public class loginAction extends Action {@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {loginActionForm lgf = (loginActionForm)form;String username = lgf.getUsername();String password = lgf.getPassword();if("admin".equals(username) && "admin".equals(password)) {return mapping.findForward("success");}else{return mapping.findForward("error");}}}

 这个login的小例子非常简单,没有Model层。但是非常适合刚入门学习struts的人。

5.总结:这只是struts入门级别的宏观总结。struts是一个开源的MVC框架。它帮我们做好了封装,有助于提高开发效率。对“约定大于配置”这句话有了一些理解。




0 0
原创粉丝点击