欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  Struts笔记2
 
  Struts2-配置文件result元素
 
  作用:为动作指定结果视图
 
  name属性:逻辑视图的名称,对应着动作方法的返回值。默认值是success
 
  type属性:结果类型,指的就是用什么方式转到定义的页面,默认是dispatcher
 
  result中type的取值有四种类型
 
  dispatcher 默认值使用请求转发,转向一个页面
 
  redirect 使用重定向,转向一个页面
 
  chain 转发到另一个相同名称空间的动作,转发到不同名称空间的动作
 
  redirectAction 重定向到另一个相同名称空间的动作,重定向到不同名称空间的动作
 
  result元素转发与重定向
 
  dispatcher:是转发到一个页面(jsp)
 
  chain:是转发到一个action
 
  redirect:重定向一个页面
 
  redirectAction:重定向到另一个action
 
  img
 
  img
 
  自定义结果类型
 
  上面的重定向,转发都是结果类型
 
  结果类型就是一个类,这些类都是些com.opensymphony.xwork2.Result接口,或者继承自接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport
 
  这些类都有一个doExecute方法,用于执行结果视图,struts的内部实现就是Servlet
 
  自定义验证码结果类型
 
  packagecom.gyf.web.result;
 
  importjavax.servlet.http.HttpServletResponse;
 
  importorg.apache.struts2.ServletActionContext;
 
  importorg.apache.struts2.dispatcher.StrutsResultSupport;
 
  importcom.opensymphony.xwork2.ActionInvocation;
 
  importcn.dsna.util.images.ValidateCode;
 
  publicclassCAPTCHAResultextendsStrutsResultSupport{
 
  privateintwidth;
 
  privateintheight;
 
  @Override
 
  protectedvoiddoExecute(Stringarg0,ActionInvocationarg1)throwsException{
 
  //生成验证码
 
  //创建一个验证码对象
 
  ValidateCodecode=newValidateCode(width,height,4,6);
 
  //获取response对象,因为要返回给客户端
 
  HttpServletResponseresponse=ServletActionContext.getResponse();
 
  code.write(response.getOutputStream());//write方法可以把图片写回给客户端,但是需要一个输出流
 
  }
 
  publicintgetHeight(){
 
  returnheight;
 
  }
 
  publicintgetWidth(){
 
  returnwidth;
 
  }
 
  publicvoidsetWidth(intwidth){
 
  this.width=width;
 
  }
 
  publicvoidsetHeight(intheight){
 
  this.height=height;
 
  }
 
  }
 
  <?xmlversion="1.0"encoding="UTF-8"?>
 
  <!DOCTYPEstrutsPUBLIC
 
  "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"
 
  "http://struts.apache.org/dtds/struts-2.3.dtd">
 
  <struts>
 
  <!--配置开发模式-->
 
  <constantname="struts.devMode"value="true"></constant>
 
  <packagename="p1"extends="struts-default"namespace="/n1">
 
  <!--声明一个结果类型-->
 
  <result-types>
 
  <result-typename="captcha"class="com.gyf.web.result.CAPTCHAResult"></result-type>
 
  </result-types>
 
  <!--配置action-->
 
  <actionname="checkcode">
 
  <resulttype="captcha">
 
  <paramname="width">150</param>
 
  <paramname="height">60</param>
 
  </result>
 
  </action>
 
  </package>
 
  </struts>
 
  result元素-全局视图和局部视图
 
  img
 
  img
 
  Struts2-动作类中的servletapi访问讲解
 
  第一种方式
 
  packagecom.gyf.web.action;
 
  importjavax.servlet.ServletContext;
 
  importjavax.servlet.http.HttpServletRequest;
 
  importjavax.servlet.http.HttpServletResponse;
 
  importjavax.servlet.http.HttpSession;
 
  importorg.apache.struts2.ServletActionContext;
 
  importcom.opensymphony.xwork2.ActionSupport;
 
  publicclassTestActionextendsActionSupport{
 
  publicStringtest(){
 
  //获取servlet的api方式
 
  //第一种方式:通过ServletActionContext
 
  //response
 
  HttpServletResponseresponse=ServletActionContext.getResponse();
 
  //request
 
  HttpServletRequestrequest=ServletActionContext.getRequest();
 
  //session
 
  HttpSessionsession=request.getSession();
 
  //application[ServletContext]
 
  ServletContextapplication=ServletActionContext.getServletContext();
 
  System.out.println(request);
 
  System.out.println(response);
 
  System.out.println(session);
 
  System.out.println(application);
 
  //NONE相当于不用跳转页面,也就是相当于不用找result标签,
 
  returnNONE;
 
  }
 
  }
 
  第二种方式
 
  packagecom.gyf.web.action;
 
  importjavax.servlet.ServletContext;
 
  importjavax.servlet.http.HttpServletRequest;
 
  importjavax.servlet.http.HttpServletResponse;
 
  importjavax.servlet.http.HttpSession;
 
  importorg.apache.struts2.ServletActionContext;
 
  importorg.apache.struts2.interceptor.ServletRequestAware;
 
  importorg.apache.struts2.interceptor.ServletResponseAware;
 
  importorg.apache.struts2.util.ServletContextAware;
 
  importcom.opensymphony.xwork2.ActionSupport;
 
  publicclassTestAction2extendsActionSupportimplementsServletRequestAware,ServletResponseAware,ServletContextAware{
 
  HttpServletResponseresponse;
 
  HttpServletRequestrequest;
 
  ServletContextapplication;
 
  publicStringtest(){
 
  //第二种方式,通过实现接口,让Struts自动注入
 
  System.out.println(request);
 
  System.out.println(response);
 
  System.out.println(application);
 
  //NONE相当于不用跳转页面,也就是相当于不用找result标签,
 
  returnNONE;
 
  }
 
  @Override
 
  publicvoidsetServletResponse(HttpServletResponseresponse){
 
  this.response=response;
 
  }
 
  @Override
 
  publicvoidsetServletRequest(HttpServletRequestrequest){
 
  this.request=request;
 
  }
 
  @Override
 
  publicvoidsetServletContext(ServletContextapplication){
 
  this.application=application;
 
  }
 
  }
 
  Action接收请求参数
 
  通过Servlet和Action的属性set方法注入获取参数
 
  packagecom.gyf.web.action;
 
  importjavax.servlet.ServletContext;
 
  importjavax.servlet.http.HttpServletRequest;
 
  importjavax.servlet.http.HttpServletResponse;
 
  importjavax.servlet.http.HttpSession;
 
  importorg.apache.struts2.ServletActionContext;
 
  importcom.opensymphony.xwork2.ActionSupport;
 
  publicclassLoginActionextendsActionSupport{
 
  //第二种方式通过属性的set注入
 
  privateStringusername;
 
  privateStringpassword;
 
  publicStringlogin(){
 
  //第一种方式:通过ServletActionContext
 
  //request
 
  //HttpServletRequestrequest=ServletActionContext.getRequest();
 
  //Stringusername=request.getParameter("username");
 
  //Stringpassword=request.getParameter("password");
 
  System.out.println(username);
 
  System.out.println(password);
 
  //NONE相当于不用跳转页面,也就是相当于不用找result标签,
 
  returnNONE;
 
  }
 
  publicStringgetUsername(){
 
  returnusername;
 
  }
 
  publicvoidsetUsername(Stringusername){
 
  this.username=username;
 
  }
 
  publicStringgetPassword(){
 
  returnpassword;
 
  }
 
  publicvoidsetPassword(Stringpassword){
 
  this.password=password;
 
  }
 
  }
 
  第三种方式通过Action的属性的set模型的形式注入
 
  第四种方式通过模型驱动在action里实现一个模型驱动接口
 
  实现步骤:
 
  在action里实现一个模型驱动接口
 
  提供一个模型属性,并一定要赋值
 
  实现原理:是因为有个模型驱动的拦截器在处理,ModelDrivenIngetrceptor,处理过程中给User赋予值
 
  packagecom.gyf.web.model;
 
  publicclassUser{
 
  privateStringusername;
 
  privateStringpassword;
 
  publicStringgetUsername(){
 
  returnusername;
 
  }
 
  publicvoidsetUsername(Stringusername){
 
  this.username=username;
 
  }
 
  publicStringgetPassword(){
 
  returnpassword;
 
  }
 
  publicvoidsetPassword(Stringpassword){
 
  this.password=password;
 
  }
 
  @Override
 
  publicStringtoString(){
 
  return"User[username="+username+",password="+password+"]";
 
  }
 
  }
 
  <%@pagelanguage="java"contentType="text/html;charset=UTF-8"
 
  pageEncoding="UTF-8"%>
 
  <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
 
  <html>
 
  <head>
 
  <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
 
  <title>Inserttitlehere</title>
 
  </head>
 
  <body>
 
  <!--第四种方式-->
 
  <formaction="${pageContext.request.contextPath}/login.action">
 
  用户名<inputtype="text"name="username"><br>
 
  密码<inputtype="password"name="password"><br>
 
  <inputtype="submit"name="登录">
 
  </form>
 
  <!--第三种方式-->
 
  <!--
 
  <formaction="${pageContext.request.contextPath}/login.action">
 
  用户名<inputtype="text"name="user.username"><br>
 
  密码<inputtype="password"name="user.password"><br>
 
  <inputtype="submit"name="登录">
 
  </form>
 
  -->
 
  </body>
 
  </html>
 
  packagecom.gyf.web.action;
 
  importjavax.servlet.ServletContext;
 
  importjavax.servlet.http.HttpServletRequest;
 
  importjavax.servlet.http.HttpServletResponse;
 
  importjavax.servlet.http.HttpSession;
 
  importorg.apache.struts2.ServletActionContext;
 
  importcom.gyf.web.model.User;
 
  importcom.opensymphony.xwork2.ActionSupport;
 
  importcom.opensymphony.xwork2.ModelDriven;
 
  publicclassLoginActionextendsActionSupportimplementsModelDriven<User>{
 
  publicStringlogin(){
 
  System.out.println(user);
 
  returnNONE;
 
  }
 
  privateUseruser=newUser();
 
  @Override
 
  publicUsergetModel(){
 
  returnuser;
 
  }
 
  }

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56950.shtml