响应式网站模板 视差,南京cms建站系统,做兼职的网站贴吧,个人网站怎样申请本文是基于慕课网的《Struts2入门》视频教程笔记。 一.MVC模式controlviewmodel 1、jspjavaBeanmodel jsp里会嵌入大量的js片段和java代码#xff0c;可读性变差。 2、jspservletjavaBean 典型的MVC模式 二.MVC流程 在Struts2中#xff0c;action就是Controller。 …本文是基于慕课网的《Struts2入门》视频教程笔记。 一.MVC模式controlviewmodel 1、jspjavaBeanmodel jsp里会嵌入大量的js片段和java代码可读性变差。 2、jspservletjavaBean 典型的MVC模式 二.MVC流程 在Struts2中action就是Controller。 三.搭建struts2的环境步骤 1、下载相关jar包 struts基础jar包 2、创建Web项目 3、创建并完善相关配置 4、创建action并测试启动 创建一个action类继承ActionSupport类。继承本项目的 四.struts2核心文件 1、web.xml Web项目启动第一个加载的就是web.xml。 web.xml配置
?xml version1.0 encodingUTF-8?
web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://java.sun.com/xml/ns/javaee xsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd idWebApp_ID version3.0display-namestruts/display-namewelcome-file-list welcome-fileindex.jsp/welcome-file/welcome-file-list!-- 加过滤器 --
filterfilter-namestruts/filter-name!--指定struts的过滤器 --filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class
/filterfilter-mappingfilter-namestruts/filter-name!--过滤路径,/*表示所有路径都需要过滤 --url-pattern/*/url-pattern
/filter-mapping/web-app
2、struts2.xml 2.1.struts2.xml中包含的内容 全局属性 用户请求和相应Action之间的对应关系 Action可能用到的参数和返回结果 各种拦截器的配置
?xml version1.0 encodingUTF-8?
!DOCTYPE struts PUBLIC-//Apache Software Foundation//DTD Struts Configuration 2.1//ENhttp://struts.apache.org/dtds/struts-2.3.dtdstruts!--include节点是strut2中组件化的方式可以将每个功能模块独立到一个xml配置文件中然后用include节点引用 --include filestruts-default.xml/include!-- package提供了将多个Action组织为一个模块的方式package的名字必须是唯一的package可以扩展当 一个package扩展自另一个package时该package会在本身配置的基础上加入扩展package的配置父package必须在子package前配置name:package的名称extents继承父package的名称abstract:设置package的属性为抽象的package不能定义action值true/falsenamespace:定义package的命名空间该命名空间影响到url的地址例如命名空间为/test那么访问的是地址http://localhost:8080/struts2/test/XX.action--package namedefault namespace/ extendsstruts-defaultinterceptors!-- 定义拦截器name:拦截器名称class拦截器类路径--interceptor name class/interceptor!-- 定义拦截器栈 --interceptor-stack nameinterceptor-ref name/interceptor-ref/interceptor-stack/interceptors!-- 定义默认的拦截器每个Action都会自动引用如果Action中引用了其他拦截器默认拦截器将无效 --default-interceptor-ref name/default-interceptor-ref!-- 全局result配置 --global-resultsresult name/error.jsp/result/global-results!-- Action配置一个Action可以被多次映射只要action配置中的name不同name:action名字class对应的类的路径method调用Action中的方法名--action namehelloworld classsrc.action.HelloWorldAction method!-- 引用拦截器name拦截器名称或者拦截器栈名称--interceptor-ref name/interceptor-ref!-- 节点配置name:result名称和Action中返回的值相同type:resultl类型不写则选择superPackage的type struts-default.xml中默认为dispatcher --result name type/result.jsp/result!-- 参数设置name:对应action中的get/set方法 --param name/param/action/package/struts
3、struts2.properties struts2框架的全局属性文件自动加载。与struts2.xml放在一个目录下就可以了。该文件包含很多key-value对。 该文件完全可以配置在struts2.xml文件中使用constant元素。 示例
constant namestruts.devMode valuetrue“五.深入struts2 1、访问Servlet API 1.1、doGet和doPost方法里的两个参数就是Servlet API HttpServletRequest HttpServletResponse 1.2、Struts2中的Action的excute方法
Override
public String execute() throws Exception {// TODO Auto-generated method stubreturn super.execute();
}Action的excute方法没有参数不与servlet API耦合但是不去访问不去用request也是不可能的所以struts2提供了三种方式求访问servlet API。 1ActionContext 2实现**Aware接口 3ServletActionContext 2、Action搜索方式 1判断package是否存在 2如果存在判断action是否存在如果不存在则去默认的namespace的package里面寻找action如果还没有则报错 3检查上一级路径的package是否存在知道默认的namespace重复第1步。 3、动态方法调用 动态方法调用是为了解决一个Action对应多个请求的处理以免Action太多调用方法有以下三种 1制定method属性
action nameaddAction methodadd classcom.yan.action.HelloWorldActionresult/result.jsp/result
/action2感叹号方式不建议 先配置Struts.xml,开启一个功能
action nameaddAction methodadd classcom.yan.action.HelloWorldAction访问的时候加感叹号感叹号后面加方法名例如 http://localhost:8080/HelloWorld!add.action
3通配符方式
action namehelloworld_* method{1} classcom.yan.action.HelloWorldActionresult/result.jsp/resultresult nameadd/{1}.jsp/resultresult nameerror/{1}.jsp/result
/action{1}匹配*
action name*_* method{2} classcom.yan.action.{1}Actionresult/result.jsp/resultresult nameadd/{2}.jsp/resultresult nameerror/{2}.jsp/result
/action这种方式那么整个项目配置一个action就可以了。 4、指定多个配置文件
include filehelloWorld.xml/include不同的模块使用不同的配置文件。 配置编码
constant namestruts.i18n.encoding valueUTF-8/constant当有编码问题时可以试试把这个加上。 5、默认Action 当访问不到对应的网页系统会报错默认Action就是解决这个问题。
default-action-ref nameindex/default-action-ref
action nameindexresult/error.jsp/result
/action当访问不存在的网页时都将访问error.jsp
6、更改Struts2后缀.action
constan namestruts.action.extentsion valuehtml/constan上例将后缀名改为.html。如果不想要后缀直接将value值设置为空。 7、在action中接收参数 1使用Action的属性接收参数 form表单提交的方式在action类中定义想对应的属性并且生成对应的get/set方法。即可提取参数。 注也可以把这些属性放到一个类中使用面向对象的思想。即第2中方式。 2使用DomainModel接收参数 前后台的对象要对应。 例后台Action类中有属性 Private User user;可不实例化 注下面也必须有对应的get/set方法。 那么前台文本框里必须命名为如下
input typetext nameuser.username
input typetext nameuser.password3使用ModelDriven接收参数 必须先实现ModelDriven的接口即 implements ModelDriven 以及生成方法getModel()实现接口 Override
public User getModel() {// TODO Auto-generated method stubreturn user;
}注user必须实例化 优点不需要生成get/set方法且当后台对象名改变时不需要更改前台的对象名。是推荐使用的一种传参方式。
public class HelloWorldAction extends ActionSupport implements ModelDrivenUser{private User usernew User();Overridepublic String execute() throws Exception {System.out.println(执行Action);return SUCCESS;}Overridepublic User getModel() {// TODO Auto-generated method stubreturn user;}
}复杂类型接收参数 例1
input typetext namebooklist[0]
input typetext namebooklist[1]例2
input typetext namelist[0].username
input typetext namelist[1].username8、处理结果类型 8.1 struts2的处理流程 用户请求-Struts框架-控制器Action-Struts框架-视图资源
result name type/result.jsp/result如果省略name属性系统将采用默认的name属性值success. 注带“/”表示绝对路径开始就是项目的上下文路径 不带“/”表示相对路径开始是action的namespace指定的路径。 关于input代码演示
result nameinput/login.jsp/results:fielderror nameusername/s:fielderrorstruts2的默认标签添加
% taglib prefixs uri/struts-tags%当表单验证不正确的时候就会跳转到login.jsp页面。
input typetext nameuser.usernameifuser.getUsername()null||.equals(user.getUsername())){
this.addFieldError(username,用户名不能为空);
return INPUT;
}注这种方法必须写return INPUT才能跳转到错误界面如果不想这样的写的话我们需要重写validate方法如下
public void validate() { ifuser.getUsername()null||.equals(user.getUsername())){
this.addFieldError(username,用户名不能为空);
}
}8.2 处理结果根据位置不同可以分为两种结果 1局部结果将作为元素的子元素配置 2全局结果将作为元素的子元素配置 8.3 struts2支持多种视图技术例如jsp、Valocity、FreeMarker等 。
result name type/result.jsp/resultresult标签里的type属性就是为了定义支持的视图技术。
补充重定向会丢失请求参数。