Struts视频笔记:Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由为什么会有struts:因为我们队mvc理解的不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展,所以我们有必要用一个统一的规范来开发项目(struts)Struts的好处:程序更加规范化,开发效率提高了,可读性增加了,程序的可维护性增加了运行原理:一个请求从浏览器发送给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响应给浏览器,登录小项目过程步骤:新建web工程导入struts包编写login.jsp编写actionForm和action配置struts-config.xml编写ok.jsp和err.jsp配置web.xml测试Struts.config.xml中的action中的scope指的是actionform的生命周期范围struts中action的scope默认是session配置过滤器publicclassMyFilterextendsHttpServletimplementsFilter{@OverridepublicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{arg0.setCharacterEncoding(gb2312);arg1.setCharacterEncoding(gb2312);arg2.doFilter(arg0,arg1);}配置web.xmlfilterfilter-nameMyFilter/filter-namefilter-classcom.chao98.services.MyFilter/filter-class/filterfilter-mappingfilter-nameMyFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping上面这次比较浪费资源每次都要去实例化但是下面这种过滤器不太彻底,往数据库里插入数据时还是会经常出现乱码publicclassMyFilterextendsHttpServletimplementsFilter{privateStringencoding;publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{//arg0.setCharacterEncoding(gb2312);//arg1.setCharacterEncoding(gb2312);arg0.setCharacterEncoding(encoding);arg2.doFilter(arg0,arg1);}publicvoidinit(FilterConfigarg0)throwsServletException{encoding=arg0.getInitParameter(encoding);}然后在web.xml中加入init-paramparam-nameencoding/param-nameparam-valueGB2312/param-value/init-param配置struts-config.xml?xmlversion=1.0encoding=UTF-8?web-appversion=2.5xmlns=:xsi=:schemaLocation=://java.sun.com/xml/ns/javaee/web-app_2_5.xsdservletservlet-nameaction/servlet-nameservlet-classorg.apache.struts.action.ActionServlet/servlet-classinit-paramparam-nameconfig/param-nameparam-value/WEB-INF/struts-config.xml/param-value/init-paraminit-paramparam-namedebug/param-nameparam-value2/param-value/init-paraminit-paramparam-namedetail/param-nameparam-value2/param-value/init-paramload-on-startup2/load-on-startup/servletservlet-mappingservlet-nameaction/servlet-nameurl-pattern*.action/url-pattern/servlet-mapping写一个关于安全性的过滤器,用于过滤一些用户注册使用的关键字privateStringkeywords[];publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{Stringusername=arg0.getParameter(username);System.out.println(thisissafefilter!);System.out.println(username);if(username!=null){for(Stringkey:keywords){if(key.equals(username)){arg0.setAttribute(err,username+被第二个管理安全的过滤器拦截了);arg0.getRequestDispatcher(/WEB-INF/tishi.jsp).forward(arg0,arg1);return;}}}arg2.doFilter(arg0,arg1);}publicvoidinit(FilterConfigarg0)throwsServletException{keywords=arg0.getInitParameter(keywords).split(;);}然后在web.xml配置过滤器还有设置要过滤的关键字init-paramparam-namekeywords/param-nameparam-valuexiaomao;xiaoxiao/param-value/init-param每个action是单态的,包括actionserver,对网站并发性有影响若要证明的话在***action.java中声明一个静态变量,每次访问自加什么是单态:单态是指在整个运行过程中,始终是一个对象;struts-config.xml默认放在WEB-INF目录下,也可以放到其他地方,只需要在web.xml中的init-paramparam-nameconfig/param-nameparam-value/WEB-INF/struts-config.xml/param-value/init-param有多个struts-config.xml只需用,号隔开java中插入数据库的语句需要注意标点st.executeUpdate(insertintouser(username,password)values(+'+u.getUsername()+'+,+'+u.getPassword()+'+));jstl(jspstartandtagliblary)jsp标准标签库:可以提高开发速度,代码简洁升级jsp页面!DOCTYPEHTMLPUBLIC-//W3C//DTDXHTML1.0Transitional//EN替换8.5myeclipse:D:\Program\Files\Myeclipse\Common\plugins\com.genuitec.eclipse.wizards_8.5.0.me201003052220.jar\templates\jsp\jsp.vtl的6.5myeclipse:D:\ProgramFiles\MyEclipse6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.wizards_6.5.0.zmyeclipse650200806\templates\jsp!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.01Transitional//EN这样比较符合现在的开发潮流各个jstl标签c:out:c:outvalue=helloworld/c:outc:outvalue=${username}default=没有值escapeXml=false/c:out等同于request.getAttribute(user).toString();escapeXml表示是否安装html样式显示默认是true:表示以文本显示如何输出request,session,application,pageContext域对象的数据%request.setAttribute(hello,request你好!);session.setAttribute(hello,session你好!);application.setAttribute(hello,application你好);pageContext.setAttribute(hello,pageContext你们ahref='百度/a);%这里有个优先级的问题,pageContextrequestsessionapplicationc:outvalue=${hello}default=没有值escapeXml=false如果是在同一个页面,那么这段代码输出pageContext你们好百度%Useru=newUser();u.setUsername(admin);u.setPassword(admin)