泰安千橙网站建设优化熊掌号,住建局官网网站,wordpress搬迁后多媒体库无法,小工厂怎么做网站访问Servlet APIAction搜索顺序动态方法调用指定多个配置文件默认ActionStruts 后缀接收参数处理结果类型1.访问Servlet API 首先我们了解什么是Servlet API httpRequest、httpResponse、servletContext 3个api对应jsp面向对象#xff1a;request、response、application …访问Servlet APIAction搜索顺序动态方法调用指定多个配置文件默认ActionStruts 后缀接收参数处理结果类型1.访问Servlet API 首先我们了解什么是Servlet API httpRequest、httpResponse、servletContext 3个api对应jsp面向对象request、response、application servlet中可以直接调用servlet api struts2 Action中execute没有任何参数也就是不存在servlet api Struts2框架底层是基本Servlet的所以我们肯定要去访问Servlet API而且开发Web应用不去访问Servlet API也是不可能的 所以我们Struts2框架提供了我们去访问Servlet API的方法; struts2 提供了3种方式访问servlet api ①:使用ServletActionContext访问Servlet API ActionContext类 ②:使用ActionContext访问ServletAPI ServletActionCotext类 ③:使用一些接口 如 ServletRequestAwa...; 实现***Aware接口 2.Action搜索顺序 我们来看一个路径 我们这里新建一个student.action 没有命名空间那么我们访问的路径就是 http://localhost:8080/ProjectName(项目的名字)/student.action 那么我们改成下面的路径 http://localhost:8080/ProjectName(项目的名字)/path1/path2/path3/student.action 在浏览器中访问也能访问到正确的页面 因此我们可以看出访问的顺序是从文件的上级 也就是最后一级包开始找 http://localhost:8080/ProjectName(项目的名字)/path1/path2/path3/student.action http://localhost:8080/ProjectName(项目的名字)/path1/path2/student.action http://localhost:8080/ProjectName(项目的名字)/path1/student.action http://localhost:8080/ProjectName(项目的名字)/student.action 从path3 一直到path1都找不到 最后在根目录下找到 如果找不到就会报错了 这就是action的搜索顺序 3.动态方法调用 在.net MVC中 我们在Controller中创建一个一个方法 只要在页面中指定相应的mvc路径 我们视图的一个url就能请求得到 在struts中 我们则需要手工进行配置 指定页面和后台方法的匹配 这里的动态方法调用就是为了解决一个Action对应多个请求得处理。以免Action太多像指定method属性的配置方式 动态调用有三种方式 这里指定method属性和感叹号方式(不推荐使用)不再说明 我们来说下常用的通配符方式 首先在struts.xml配置我们的参数 ?xml version1.0 encodingUTF-8?
!DOCTYPE struts PUBLIC -//Apache Software Foundation//DTD Struts Configuration 2.0//EN http://struts.apache.org/dtds/struts-2.0.dtd
strutspackage namedefault namespace/ extendsstruts-defaultaction nameHelloWorld2 classcom.HelloWorldActionresult/result.jsp/result/action!-- name 代表我们的action名也就是url里面的名字 class是指定我们的后台类文件method {1} 与name中的*对应--action namehelloworld_* method{1} classcom.HelloWorldActionresult /result.jsp/resultresult nameadd /add.jsp/resultresult nameupdate /update.jsp/result/action/package
/struts View Code 这里我们需要创建三个jsp文件 默认路径的result.jsp 还有add方法的add.jsp update方法的update.jsp 页面里面我们都用一句话简单区分 这样 启动Debug as Server 然后在浏览器中访问就可以对应到相应的路径了 这里struts.xml文件result标签值都改成{1}.jsp 一样的道理 这里可以随意加参数进行配置 4.指定多个配置文件 如果项目比较大 则需要比较多的配置 我们在入门二文件中看到注释可以用include来包含多个配置文件 include file***.xml /include
constant namestruts.i18n.encoding valueUTF-8 /constant ps:
1.被include的标签一定要符合struts的dtd规范。也就是说被include的xml文件的内部格式要符合struts的xml文件规范(跟struts.xml一摸一样)。
2.xml文件的编码格式要相同如果是utf-8那么都是utf-8。 5.默认Action 默认action是为了改善用户体验当用户输入的URL找不到对应的action,就会使用默认Action 【找不到默认action的原因和解决方法】 default-action-ref nameindex/default-action-refaction nameindexresult/error.jsp/result/action braction namelog_* method{1} classcom.wayne.action.LoginActionresult namelogin/login.jsp/resultresult namelogout/logout.jsp/result/action 将上面代码放到package标签中 这里定义了一个index的默认标签 通配符会覆盖掉默认action所以不能有【*_*】这样子的action要改成【log_*_*】这类型的命名否则【*_*】里面的第一个*就包括了所有的字符直接进入了这个action进行处理无法进入默认的action了。 6.Struts 后缀 三种方式 1.struts.properties中struts.action.extensionaction,do,struts2
2.struts.xml中增加常量constant
constant namestruts.action.extension valueaction,do,struts2/constant
3.在web.xml过滤器中配置intt-param参数
init-paramparam-namestruts.action.extension/param-nameparam-valuedo,action,strtus2/param-value
/init-param 7.接收参数 之前我们说到struts项目中 我们写了前台jsp页面 写了后台action页面 那么要想两者进行关联就需要在配置文件中配置关联关系真是麻烦。 下面我们用项目示例来说明下接收参数问题 首先我们建立一个login.jsp页面 1 % page languagejava contentTypetext/html; charsetutf-82 pageEncodingutf-8%3 !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd4 html5 head6 meta http-equivContent-Type contenttext/html; charsetutf-87 titleInsert title here/title8 /head9 body
10 form actionLoginAction.action methodpost
11 用户名input typetext nameusername /
12 密码input typepassword namepassword /
13 input typesubmit value提交/
14 /form
15 /body
16 /html View Code 然后我们创建一个后台Class LoginAction.java package com;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {public String login(){return SUCCESS;}
} View Code 然后我们在struts.xml配置文件中配置 ?xml version1.0 encodingUTF-8?
!DOCTYPE struts PUBLIC -//Apache Software Foundation//DTD Struts Configuration 2.0//EN http://struts.apache.org/dtds/struts-2.0.dtd
strutspackage namedefault namespace/ extendsstruts-defaultaction nameHelloWorld2 classcom.HelloWorldActionresult/result.jsp/result/actionaction nameLoginAction methodlogin classcom.LoginActionresult /success.jsp/result /action/package
/struts View Code 这里添加了一个过滤器 指定了访问LoginAction的login方法 然后我们如何通过action的属性获取form提交的值 第一种方式直接在action类中实现--使用Action的属性接收参数不利于面向对象 1 package com;2 3 import com.opensymphony.xwork2.ActionSupport;4 5 public class LoginAction extends ActionSupport {6 //创建两个属性的get set方法7 private String username;8 private String password;9
10 public String login(){
11 System.out.println(username);
12 return SUCCESS;
13 }
14
15 public String getUsername() {
16 return username;
17 }
18
19 public void setUsername(String username) {
20 this.username username;
21 }
22
23 public String getPassword() {
24 return password;
25 }
26
27 public void setPassword(String password) {
28 this.password password;
29 }
30
31
32 } View Code 然后访问http://localhost:8080/StrutsDemo/login.jsp 输入用户名密码 提交 会发现控制台中打印输出了 用户名 第二种方式使用DomainModel接收参数 这里要把第一种属性声明的方式 单独放到一个类中去 建立一个User类 1 package com.po;2 3 public class User {4 //创建两个属性的get set方法5 private String username;6 private String password;7 8 public String getUsername() {9 return username;
10 }
11
12 public void setUsername(String username) {
13 this.username username;
14 }
15
16 public String getPassword() {
17 return password;
18 }
19
20 public void setPassword(String password) {
21 this.password password;
22 }
23 } View Code 然后action中去掉属性相关 声明一个user类 package com;import com.opensymphony.xwork2.ActionSupport;
import com.po.User;public class LoginAction extends ActionSupport {public User getUser() {return user;}public void setUser(User user) {this.user user;}private User user;public String login(){System.out.println(user.getUsername());return SUCCESS;} } View Code login.jsp页面中需要更改name的值 % page languagejava contentTypetext/html; charsetutf-8pageEncodingutf-8%
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd
html
head
meta http-equivContent-Type contenttext/html; charsetutf-8
titleInsert title here/title
/head
bodyform actionLoginAction.action methodpost用户名input typetext nameuser.username /密码input typepassword nameuser.password /input typesubmit value提交//form
/body
/html View Code 然后再次启动下 访问http://localhost:8080/StrutsDemo/login.jsp 输入用户名密码 提交 会发现控制台中同样打印输出了 用户名 第三种方式使用ModelDriven接收参数(推荐方式) 这里我们需要实现ModelDriven接口 package com;import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.po.User;public class LoginAction extends ActionSupport
implements ModelDrivenUser{private User usernew User(); //这里需要实例化 去掉了 get set方法 实现了ModelDriven的方法public String login(){System.out.println(user.getUsername());return SUCCESS;}Overridepublic User getModel() {// TODO Auto-generated method stubreturn user;} } View Code 这里我们也不再需要指定jsp中的name 对象 去掉user. % page languagejava contentTypetext/html; charsetutf-8pageEncodingutf-8%
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd
html
head
meta http-equivContent-Type contenttext/html; charsetutf-8
titleInsert title here/title
/head
bodyform actionLoginAction.action methodpost用户名input typetext nameusername /密码input typepassword namepassword /input typesubmit value提交//form
/body
/html View Code 如果我们传递一个List方式一样的道理 在jsp中 我们声明 书籍1input typetext nameBookList[0]/
书籍2input typetext nameBookList[1]/ 后台User类中我们创建List BookList对象 private ListString BookList;public ListString getBookList() {return BookList;}public void setBookList(ListString bookList) {BookList bookList;} View Code 这里我们就简单介绍这几种方式 最后做一个总结 1 接收参数2 1使用Action的属性接受参数在Action中定义需要接受的属性并写它的set/get方法。3 2使用DomainModel接受参数创建实体类定义需要接受的属性并set/get方法在Action中创建实体类名属性。并在界面进行指定。4 3使用ModelDriver接受参数在Action中实现ModelDriver实体类名接口并实现方法返回当前需要转换的对象删除set/get方法并对 对象 进行实例化并取消指定。5 4request6 5获取List集合中的参数。获取多个参数。7 8 第一种接收参数的方法直接在action类中创建相应的属性和getter和setter和前端的name名字相同。eg:前端的username在action类中就要建立一个private String username; Struts会自动映射为这个属性赋值9
10 第二种接受参数的方法使用DomainModel将username 和password两个属性封装为一个类User必须是标准的JavaBean在action中声明这个属性private User user; 同时为user设置getter和setter在前端中的name需要设置为user.name和user.password,才能映射成功
11
12 第三种接收参数的方法使用ModelDrivenT接口这个action必须实现这个接口的public T getModel()方法。此时声明的属性必须实例化eg: private User user new User(); 同时不需要getter和setter。前端的name也只需要写username和password就可以不需要再加域了。这种方法时最推荐的方法因为可以减少前后端的耦合 8.处理结果类型 我们来看一下struts.xml中过滤器的一句话 result namesuccess/result.jsp/result 这句话等同于result /result.jsp/result 说明name的默认值就是success 【Structs2处理流程】
用户请求Structs框架控制器(Action)Structs框架视图资源
返回String提供代码复用性有利于框架分离。
【Action中五种内置属性(com.opensymphony.xwork2.Action)】 转载于:https://www.cnblogs.com/DemoLee/p/6291341.html