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