徐州三院肿瘤科怎么样:struts2看视频后整理

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 19:24:29
1、复制新项目注意点
在eclipse空间中拷贝项目时,需要注意修改一个地方,找到新项目的properties/MeEclipse/web/Context Root将web Context-root的值改改成新项目的名称。否则不能正常访问
2、命名空间_namespace
      1.namespace的值必须以/开头
      2.namespace 决定了action的访问路径,默认为"",表示无论地址栏中输入/aaa/index.action或/aaa/bbb/index.action或其它的,返回结果,都会转向action=index这样一个视图(也就是,没有找到精确的namespace,就会自动找到默认的namespace下的action去执行。也就是它嚷括了其它package处理 不了的action!)。可以接收所有路径的action
     3.namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action
     4.namespace最好也用模块来进行命名
3、默认action
默认action:指在找不到匹配的action时,会自动转到默认的action对应的视图资源。

如何配置书写默认action:
在struts.xml文件中的package标签下写上:
 
 
    /index.jsp
 


说明:如果用户在地址栏内输入一个不存在的action,就会自动找到这个标签所对应的name属性匹配的action标签中的name属性所返回的视图资源index.jsp.(先根据默认值的action,然后找到对应的action进行跳转显示)

struts.xml中action标签配置中的各项默认值:
      1.如果没有为action指定calss,则默认的class类是ActionSupport类
      2.如果没有为action指定method,则默认执行action类中的execute()方法
      3.如果没有指定result标签的name属性,则默认值为success
4、result_type类型
在struts.xml文件中的action子标签中的result标签type属性:

1.默认情况下type=dispatcher,服务器端跳转。只能跳转到页面。即运用服务器跳转(jsp forward)。地址栏会变成action地址.

2.type=rediredt,客户端跳转。也只能跳转到视图页面。地址栏的地址会变成相应的视图地址.注意:重定向时,肯定不能重定向到项目的WEB-INF目录下,因为这个目录是被保护的,一般不允许客户端进行访问它。

3.type=chain,服务器端跳转。用forward方式跳转到一个action。注意packageName/actionName之间的起始位置不要加/。
如:/actionName/packageName/actionName写法都是错误。

4.type=redirectAction,客户端跳转到另外一个action。同样注意packageName/actionName之间的起始位置不要加/。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1.跳转方式

dispatcher和chain是服务器端跳转,所以客户端只发起一次请求,产生一个action;

redirect和redirectAction是客户端跳转,所以客户端发起两次请求。

2.跳转内容

dispatcher和redirect跳转的是views(一般是jsp页面);

chain和redirectAction跳转的是一个action。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:
/view.jsp?id=${id}
在项目中,当使用重定向跳转(redirect)时,经常采用此方法将参数传过去。在view.jsp页面中使用${param.id}或request.getParameter("id")即可取出传递过来的能数。

redirectAction:
1.如果重定向于同一个包(package)下的action,则在result标签之间直接写上action的name名称即可;
如:
   
        /empployeeadd.jsp
   

   
        list            //这个地方要注意,它会调用上面的action
   

   


2.如果重定向于不同的包(package)下的action,则需要在result标签之间写入相应参数。
如:

   
        /empployeeadd.jsp
   

       //默认的class是ActionSupport,默认的方法是execute()
       
            xxx
            /control/department
       
           
   




   
        hello.jsp   
   



5、struts2的action属性接收参数及为action属性注入值
struts2的action中有3种接收参数方法:

1.属性接收法。在自定义的action类(需要继承ActionSupport类)中写上属性,并生成相应set,get方法

2.域模型法(domain model)。思路是将action类(需要继承ActionSupport类)中的属性封装成一个类并创建该类(UserVO),在该类(UserVO)中写上相应的属性并生成相应的set,get方法。还需要在action类中定义该类(UserVO)并生成该类(UserVO)的相关的get,set方法。如果前端提交的页面中的表单采用"对象.属性"的格式,那么,还需要在UserVO类中写上一个默认的构造方法。当然,如果遇到前端页面提交的表单元素,与类(域模型)中的字段不一致时,可以用第1种方法接收。

3.模型驱动法(model Driven)。这种做法少用。思路是将自定义的action类(需要继承ActionSupport类)并且需要实现ModelDriven这个接口(它属于xwork包中的),并且在该action类中需要手动new一个User类的对象。当然也需要创建一个User类来封装该类的属性。



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

通过struts.xml配置文件的action标签来为action类中的属性注入值:步骤如下
比如,
1.在一个action类中定义一个成员属性private String savePath,并且生成相应的get,set方法;
2.在strtus.xml配置文件中,在action标签对之间写上参数标签对
 
   
        /images    //为action的成员属性注入值
        /message.jsp
   



 


3.在message.jsp文件中,通过该表达式 ${savePath} 直接访问action的属性来取出上一步为action的属性注入的值。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
传智播客:请求参数接收。两种方式
1.采用基本类型接收请求参数(get/post)
   在action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名属性

2.采用复合类型接收请求参数(内部流程是当页面表单提交到action时,struts2的拦截器会根据请求参数的名称去访问对应的属性对象(比如表单采用"对象.属性"的方式),如果该对象为空,则struts2会利用反射技术调用对象所属的类的默认构方法去实例化,实例化后,对象通过反射技术为该对象的相应属性注入值。)
   先要创建一个实体类,在该类中定义成员属性并生成相应set,get方法。如果该类中有带参数的构造方法,必须显示地定义一个无参数的构造方法来供反射机制来生创建该类的实例
   再在action类中定义实体类的一个实例,并生成该对象的set,get方法


~~~~~~~~~~~~~~~~~~
关于struts2.1.6接收中文请求参数乱码问题:
struts2.1.6版本中存在一个bug,即接收到的中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数后才调用HttpServletRequest的setCharacterEncoding()方法进行编码设置,导致应用使用的就是乱码请求参数。这个bug在struts2.1.8中已经被解决,如果你的是struts2.1.6,要解决这个问题,你可以这样做:新建一个Filter,把这个Filter放置在struts2的Filter之前,然手在doFilter()方法里添加以下代码:
public void doFilter(){
  HttpServletRequest req = (HttpServletRequest)reauest;
  req.setCharacterEncoding("UTF-8");//根据你使用的编码替换UTF-8
  filterchain doFilter(request,response);


}
  
6、struts2的作用
struts2作用:把请求与视图分开
7、带参数结果集
一次request请求,只有一次值栈。

而服务器端的forward(对于客户端,只有一次rquest)是不需要手动带参数传递的,会自动带过去,哪怕是不同的action之间跳转。
所以,当result的type=redirect时,如果需要将参数传给下一个页面,则必须手动传递参数。如:
/next.jsp?t=${message},这样的话,在next.jsp文件中,就可以取到message的值了。
取值方法是(从actioncontext中取):或传统的request.getParameter("t")或${param.t}
message变量,是请求到达的action中定义的成员变量。