内置对象的取得和多人开发 一 内置对象的取得 在使用的 servlet 的时候可以通过 HttpServletResquest 获取到一些内置对象, 但是在 struts2 中为了方便取得内置对象, 专门提供了一个 ServletActionContext 这个类取得取得内置对象, 观察如下方法 public static javax.servlet.jsp.pagecontext() 取得 pagecontext 内置对象 public static javax.servlet.html.httpservletrequest getrequest() 取得 request 内置对象 public static javax.servlet. HttpServletResponse getresponse () 取得 response 内置对象 public static javax.servlet. ServletContext getservletcontext() 取得 servletcontext 内置对象 范例 : 取得内置对象 public String execute() throws Exception { // 取得 request 内置对象 HttpServletRequest req = ServletActionContext.getRequest(); System.out.println(req); // 取得 session 的内置对象 HttpSession session = req.getsession(); System.out.println(session.getId()); // 取得 response 内置对象 HttpServletResponse resp = ServletActionContext.getResponse(); System.out.println(resp); // 取得 ServletContext 内置对象 ServletContext stc = ServletActionContext.getServletContext(); System.out.println(stc); this.msg = "ECHO:" + this.msg; return Action.SUCCESS;// 返回跳转的映射为 key 以上是 servlet 内置对象的取得的基本方法 二 多人开发
在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问题 可以用用户定义对个配置文件, 之后在 struts.xml 文件中进行合并 我们可以将原来你的 struts.xml 文件拷贝出来, 将名字修改为自己的内容, 之后可以编写自己的内容, 最后整合所有 的 struts.xml 文件 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <include file="struts-sun.xml"/> </struts> 如果配置多个就添加多个 include 三 解决乱码 如果在项目中使用的编码都是统一的 utf-8 就不必要进行编码的处理, 但是我还要这里讲解一下 目的是为了说一下配置文件, 如果要进行乱码的解决实际上是进行 struts2.xml 的属性配置, 既 然是属性配置文件, 那么就应该咋 src 目录下添加 struts.properties 的文件 struts.i18n.encoding=utf-8 struts.locale=zh_cn 只要写上以上的代码就可以在项目中使用任何的编码开发了, 但是此时有个问题 struts 利用的 过滤器完成处理哦, 所以要想过滤器解决乱码, 或者解决用户登录就显得不方便 范例 : 在 src 下定义 Messages.properties 文件 Info.msg= 欢迎 :{0,{1,{2 修改 struts.properties 文件 struts.i18n.encoding=utf-8 struts.locale=zh_cn # 设置要加载的国际化资源文件, 以逗号分隔. struts.custom.i18n.resources=messages,pages,validata 之后在 Action 中读取资源文件的读取 范例 : 读取文件资源 public String execute() throws Exception { String msg = super.gettext("info.msg", new String[] {"hello","word","java"); System.out.println(msg); this.msg = "ECHO:" + msg; return "echo.page";// 返回跳转的映射为 key
四 集合 vo 输入 范例 : 定义两个 vo 类并且设置关系 package com.sun.vo; import java.io.serializable; public class Dept implements Serializable { private String dname; private Integer deptno; public String getdname() { return dname; public void setdname(string dname) { this.dname = dname; public Integer getdeptno() { return deptno; public void setdeptno(integer deptno) { this.deptno = deptno; public String tostring() { return "Dept [dname=" + dname + ", deptno=" + deptno + "]"; public Dept() { package com.sun.vo; import java.io.serializable; import java.util.date; public class Emp implements Serializable { private Integer empno; private String ename; private Double sal;
private Date hiredate; private Dept dept = new Dept(); public Integer getempno() { return empno; public void setempno(integer empno) { this.empno = empno; public String getename() { return ename; public void setename(string ename) { this.ename = ename; public Double getsal() { return sal; public void setsal(double sal) { this.sal = sal; public Date gethiredate() { return hiredate; public void sethiredate(date hiredate) { this.hiredate = hiredate; public Dept getdept() { return dept; public void setdept(dept dept) { this.dept = dept; public String tostring() { return "Emp [empno=" + empno + ", ename=" + ename + ", sal=" + sal + ", hiredate=" + hiredate + ", dept=" + dept + "]"; public Emp() { 范例 : 在 struts.xml 文件中添加 Action 的映射路径 <action name="empaction" class="com.sun.action.empaction"> <result name="emp.insert">emp_insert.jsp</result> </action>
范例 : 定义 emp_insert.jsp 页面 <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>insert title here</title> </head> <body> <form action="empaction.action" method="post"> <fieldset> <legend> 登录 </legend> 雇员编号 :<input type="text" name="emp.empno" value="1008"><br/> 雇员姓名 :<input type="text" name="emp.ename" value=" 张三 "><br/> 基本工资 :<input type="text" name="emp.sal" value="10.9"><br/> 雇佣日期 :<input type="date" name="emp.hiredate"><br/> 部门编号 :<input type="text" name="emp.dept.deptno" value="2003"><br/> 部门名称 :<input type="text" name="emp.dept.dname" value=" 开发部 "><br/> <input type="submit" value=" 提交 "> </fieldset> </form> </body> </html> 范例 :EmpAction 类 package com.sun.action; import com.opensymphony.xwork2.actionsupport; import com.sun.vo.emp; @SuppressWarnings("serial") public class EmpAction extends ActionSupport{ private Emp emp = new Emp(); public Emp getemp() { return emp; public void setemp(emp emp) { this.emp = emp; public String execute()throws Exception{ System.out.println(emp); return "emp.insert";
以上我们要将表单中的数据赋值给 servlet 中的属性的时候需要 request.getparameter () 方法来获取, 而且如果是属 servlet 中的属性不是字符串的类型, 还需要手工转换, 但是 struts2.x 不但了可以自动赋值还可以自动类型转换