怎么说呢,可以说是很懒了。记得以前一天一篇,现在.........,争取以后把每天的收获都记录到博客中,下面说正题。
一.什么是MVC?
mvc就是一种编程模式,全名是Model -View -Controller。是模型-示图-控制器 的缩写。通常模型(Model)对
象用于从数据库汇总存取数据,示图(View)通常用于将数据显示到用户界面,控制器(Controller)通常负责从用
户界面读取数据,控制用户输入,并向模型发送数据。
二.什么是Struts2框架?
struts2框架是一种MVC框架,是一种开源的框架。所谓的框架就是一些方法的集合。它主要负责Controller部分,
用于从用户界面获取数据,并在action中获取数据用户界面传过来的值。
三.Struts2框架的应用
1)要想使用Struts2框架的功能,那么第一步导入jar包是必不可免的。一般的jar包如下:
2)导入jar包后,先创建一个index.jsp用于向后端传递数据,注意:jsp只有放在WebContent下,外部才能直
接访问。
3)之后创建控制器Action,它要实现ActionSupport类,并复写其中的execut()方法。在该方法里接收数据
并进行操作。
4)创建web.xml,用于配置项目的过滤器。通常过滤器会默认去src下找一个叫struts.xml的文件,用于将所过
滤的url进行操作,但是如果struts.xml没在src下该怎么办呢?那么就要在过滤器声明中添加一个参数。代码如下:
5)创建struts.xml文件。这个文件默认应该放在src下,可以用来跳转页面。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- <constant name="" value=""></constant> 用于修改struts中默认的常量 -->
<package name="com.java.Controller" extends="struts-default" namespace="/">
<action name="MyAction" class="com.java.Controller.MyAction">
<result name="success" type="redirect">/index.jsp</result>
</action>
<action name="ActionTwo" class="com.java.Controller.ActionTwo">
<result name="success" type="redirect">index.jsp</result>
</action>
</package>
</struts>
上述代码中,有一个最外层的struts标签,里面用于配置package。下面我们来说说各种标签和属性的功能。
(1)package标签,方便进行模块化开发。里面的name属性一定要写,是唯一的,标记一个包。extends
属性的值一般继承struts-default ,简单来说,不继承该包,就无法使用struts2框架提供的一些核心功能。struts-default
包在struts-default.xml中有配置,在加载自己的struts.xml之前,框架就已经加载了struts-default.xml配置文件,所以我
们可以使用。namespace属性称为命名空间,一般默认为“/”,namespace和name共同构成了用户所要访问的url。
例如:
那么这个action的访问路径就应该是/user/hello.action。
关于namespace的顺序搜索问题:
(2)action标签,它的name属性值是用户在url中要访问的action,class属性值要是action类的路径名。可
以说name就是class类的别名,通过这个别名,就能够访问所要想访问的action。其中method方法,是action中所需
要执行的方法,默认执行execute()方法。
(3)result标签,其中有一个name属性,它其中的值要和action中的return 值相对应,一旦对应之后,那么
就会跳转到result标签中书写的jsp页面。这里的type=“dispatcher”是默认值,执行的是转发操作,页面跳转时,url并不
发生改变,如果页面跳转时想进行重定向,那么就改为 type="redirect"。
四.在action中获取前台页面中值的方 法
1)属性驱动:在所需要所传的参数较少时,可以使用属性驱动,通过超链接传递参数,然后在action中定义
同名属性,通过set方法来获取从前台传递过来的参数,通过get方法来向前台传递参数。
package com.java.Controller;
import com.java.Bean.Dopt;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class MyAction extends ActionSupport{
/*
* 前台和后台的交互有3种方式:
* 一.属性驱动
* 二.对象驱动
* 三.模型驱动
* */
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String execute(){
//属性驱动
System.out.println(name);
return "success";
}
}
2)对象驱动:通过对象驱动,获取值。定义一个对象属性,生成它的get,set函数,通过emp.eid(对象.属性)
的方式来传递和过去参数。
3)模型驱动:要想用模型驱动来传递参数,就要先实现ModelDriven<>接口,里面的泛型存放模型的类型,
并要重写getModel()方法。只需要定义一个model模型,不需要定义get,set函数,就可以接收前台传进来的值。
而前台传值的时候不需要用对象.属性的方式,而是 直接用 属性=Value的形式来传递。
五.创建action所遇到的问题
也不知道是什么问题,今天遇到一个脑袋疼的问题,写的java文件有的竟然不能加载!!!!!!!!!!!
java文件在 工作区间 中的src中存在,但是build文件中却没有一些class文件,相应的,在tomcat服务器中也没有相应
java的.class文件,也就出现了,在启动服务器的时候,会出现类找不到的情况。虽然不知道什么原因,但是我们可以
在eclipse上进行重新编译,并且经过两次clear操作清除项目在 工作区间 和 tomcat中的缓存,之后在部署的方式可以
将为被编译的java文件进行重新编译。如下:
这个问题也帮助我理解java文件在 工作区间 和 tomcat 中的位置了。