logo资料库

韩顺平Struts笔记(全).doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
Struts视频笔记: Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由 为什么会有struts:因为我们队mvc理解的不同,可能造成不同公司写程序的时候,规范不统一,这样 不利于程序的维护和扩展,所以我们有必要用一个统一的规范来开发项目(struts) Struts 的好处: 程序更加规范化,开发效率提高了,可读性增加了,程序的可维护性增加了 运行原理:
一个请求从浏览器发送给web服务器,http://localhost:8080/web应用/action,web服务器首先解 析主机然后解析web应用的名称在解析出资源名转发给总司令ActionServlet(该类由struts 框架提供给我们的无需编写,只需配置)ActionServlet有一个文件struts-config.xml,该文件配置了 表单actionForm(军火库),还配置了action,以及他们之间的对应关系,当ActionServlet拿到命令后它 会查询struts-config.xml文件去填充数据,把用户的数据填充到表单里边,下个动作就是去调用 指定的action(小队长),action去从表单中读取数据,调用某个model(士兵,如service)完成任务, 完 成 任 务 把 结 果 返 回 给 ActionServlet 总 司 令 ( 返 回 一 个 执 行 的 结 果 ),--> 总 司 令 又 去 查 询 struts-config.xml文件,决定跳转到哪个jsp页面,返回一个执行结果(形成静态html文件)直接返 回给web服务器服务器再把静态页面以http响应给浏览器 ,登 录 小项 目 过 程 步骤: 新 建 w e b工 程 导 入struts 包 编 写login.jsp 编 写actionForm和 action配置struts-config.xml编写ok.jsp和err.jsp 配置web.xml 测试 Struts.config.xml中的中的scope指的是actionform的生命周期范围 struts中的 scope默认是session 配置过滤器 public class MyFilter extends HttpServlet implements Filter { @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { arg0.setCharacterEncoding("gb2312"); arg1.setCharacterEncoding("gb2312"); arg2.doFilter(arg0, arg1); } 配置web.xml MyFilter com.chao98.services.MyFilter MyFilter /* 上面这次比较浪费资源每次都要去实例化 但是下面这种过滤器不太彻底,往数据库里插入数据 时还是会经常出现乱码 public class MyFilter extends HttpServlet implements Filter { private String encoding; public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // arg0.setCharacterEncoding("gb2312"); //arg1.setCharacterEncoding("gb2312"); arg0.setCharacterEncoding(encoding); arg2.doFilter(arg0, arg1); } } 然后在web.xml中加入 public void init(FilterConfig arg0) throws ServletException { encoding=arg0.getInitParameter("encoding");
encoding GB2312 配置struts-config.xml action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml debug 2 detail 2 2 action *.action 写一个关于安全性的过滤器,用于过滤一些用户注册使用的关键字 private String keywords[]; arg1, { public void doFilter(ServletRequest arg0, ServletResponse FilterChain arg2) throws IOException, ServletException String username=arg0.getParameter("username"); System.out.println("this is safe filter !"); System.out.println(username); if(username!=null){ for(String key:keywords){ if(key.equals(username)){ arg0.setAttribute("err", username+" 被第 二个 管 理安全的过滤器拦截了"); arg0.getRequestDispatcher("/WEB-INF/tishi.jsp").forward(arg0, arg1); return ; } }
} arg2.doFilter(arg0, arg1); } public void init(FilterConfig arg0) throws ServletException { keywords=arg0.getInitParameter("keywords").split(";"); } 然后在web.xml配置过滤器还有设置要过滤的关键字 keywords xiaomao;xiaoxiao 每 个 action 是 单 态 的 , 包 括 actionserver, 对 网 站 并 发 性 有 影 响 若 要 证 明 的 话 在 ***action.java中声明一个静态变量,每次访问自加 什么是单态: 单态是指在整个运行过程中,始终是一个对象; struts-config.xml默认放在WEB-INF目录下,也可以放到其他地方,只需要在web.xml中的 config /WEB-INF/struts-config.xml HTML PUBLIC XHTML "-//W3C//DTD 页 面 有多个struts-config.xml只需用","号隔开 java 中 插 入 数 据 库 的 语 句 需 要 注 意 标 点 st.executeUpdate("insert into user(username,password) values("+"'"+u.getUsername()+"'"+","+"'"+u.getPassword()+"'"+")"); jstl(jsp startand tag liblary) jsp标准标签库: 可以提高开发速度,代码简洁 升 级 jsp Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 8.5myeclipse: D:\Program\Files\Myeclipse\Common\plugins\com.genuitec.eclipse.wizards_8.5.0.me201 003052220.jar\templates\jsp\jsp.vtl的 6.5myeclipse:D:\ProgramFiles\MyEclipse6.5\myeclipse\eclipse\plugins\com.genuitec.e clipse.wizards_6.5.0.zmyeclipse650200806\templates\jsp 这样比 较符合现在的开发潮流 各个jstl标签 : 等同于request.getAttribute("user").toString(); escapeXml表示是否安装html样式显示 默认是true:表示以文本显示 如何输出request,session,application, pageContext域对象的数据 替 换 1.0 <% request.setAttribute("hello","request你好!"); session.setAttribute("hello","session你好!"); application.setAttribute("hello","application你好"); pageContext.setAttribute("hello","pageContext 你 href='http://www.baidu.com'>百度"); 们
%> 这里有个优先级的问题,pageContext>request>session>application 如果是在同一个页面,那么这段代码输出pageContext你们好百度 value="${user.username}"> <% User u=new User(); u.setUsername("admin"); u.setPassword("admin"); request.setAttribute("user",u); %> : 移除 之后 中国北京将不再显示 : <%int i=3/0; %> | | : ok <% request.setAttribute("a","hello"); request.setAttribute("age","22"); %> 判断字符串: hello 判断数值 年龄大于12 小于30 ${age } <% ArrayList al=new ArrayList(); User u1=new User(); u1.setUsername("陈超"); u1.setPassword("tiger"); User u2=new User(); u2.setUsername("system"); u2.setPassword("manager"); al.add(u1); al.add(u2); request.setAttribute("alluser",al); %> ${u.username} ${u.password}
第一种迭代 ${i}  
Strtus标签: goto 如果没有给超链接设置则默认跳到百度(如上) 这是一个图片按钮 这是真真正正的一i张图片 bean标签: 用于输出信息 <% User u1=new User(); u1.setUsername("admin"); u1.setPassword("admin"); request.setAttribute("user",u1); %> 另外还有两种创建bean的方法,但是用的不多 Logic 标签: logic标签使用 <% User u1=new User(); u1.setUsername("admin"); u1.setPassword("aa"); User u2=new User(); u2.setUsername("tiger"); u2.setPassword("ac"); User u3=new User(); u3.setUsername("scott"); u3.setPassword("ab"); ArrayList al=new ArrayList(); al.add(u1); al.add(u2); al.add(u3); request.setAttribute("users",al); %>
属性不存在
users属性存在 年龄大于二十
标签的选择: 通常会选择el表达式$ op Create table users ( Struts 第23讲: 开发struts 的用户管理系统 Id int primary key, Name varchar(20) not null, Pwd varchar(30) not null, Email varchar(30) not null, Tel varchar(30) not null, Grade int default 1 not null ) 如果中文不能加入的话 show variables like ‘%char%’; Set character_set_client=gbk 注销退出登录 request.getSession().invalidate(); //会把所有的session都删除 return mapping.findForward("logout"); 动态表单(dynimic form): 当我们表单个数和类型不确定的情况下,我们就可以使用动动态 表单来解决 动态表单和普通表单的区别: 1普通表单actionForm 是首先你需要定义这样一个类,然后配置到struts-config中, 2,动态表单完全依赖反射机制创建,所以不要去定义表单类,直接在struts-config.xml中配置 即可 文件的上传与下载 读取文件(inputStream) 写文件(outputStream); 案例项目: 1:
name:
photo:
2: public class UserForm extends ActionForm { private String username; private FormFile myphoto; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public FormFile getMyphoto() {
分享到:
收藏