




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 用户登录 1.1 需求 :login.jsp :LoginServlet :LoginDao :main.jsp1: 一一一一2: request(username,pasword) 3: 一username,pasword4: login(username,pasword) 5: 一一一一一一t_user, 一一一一一一一 6: 一User一7: 一User一一一8: 一User一一9: 一User一 1.2sql 准备 create table t_user(id int primary key auto_increment ,username varchar(20),password varchar(20),status int ,name varchar(50); 1.3 初始化参数配置 1.servlet 初始化参数配置 仅在该 servelt 中有效 UserServlet org.leadfar.cms.backend.servlet.UserServlet isSupportCheckCode 0 Java 程序读取 isSupportCheckCode=“1“.equals(config. getInitParameter(“isSupportCheckCode“)?true:false; 2.全局应用初始化参数配置 在所有的 servet 和 jsp 中均可读取 isSupportCheckCode 0 Java 程序读取 isSupportCheckCode=“1“.equals(config.getServletContext().getInitParam eter(“isSupportCheckCode“)?true:false; 1.4Fiter(过滤器 ) 1.Filter 是一个特殊的 Servlet 2.Filter 是 AOP(Oritend Aspected Programming)思想的一种实现,是对原 WEB 请求路线 实施的干预,支持热插拔 3.可以配置多个 Filter,执行顺序将根据 web.xml 中配置顺序 4.定义 Filter 只需要定义一个普通的 java 类,实现 Filter 接口 public class EncodeFilter implements Filter private String encode; public void destroy() / TODO Auto-generated method stub public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException request.setCharacterEncoding(encode); response.setCharacterEncoding(encode); /一定要加这一句 /System.out.println(“before“); chain.doFilter(request, response); /System.out.println(“after“); public void init(FilterConfig config) throws ServletException encode=config.getInitParameter(“encode“); 5.配置 Filter ParamsFilter org.leadfar.cms.backend.servlet.EncodeFilter encode UTF-8 ParamsFilter /* 6.Url-pattern 1./* 表示根路径下及其所有目录下的所有资源 2./backend/* 3.*.jsp 所有的以jsp 为后缀的请求均经过过滤器 4./backend/*.jsp 不允许定义 1.5 路径问题 1.配置 servlet 的根路径与 html 中访问资源的根路径含义不一样 Servlet 的根路径包含应用程序名 html 中的根路径不含义应用程序名 (主机名+端口号) 2.写相对路径 ,一定要明确相对谁 3.写绝对路径,一定要明确”/”起始于谁 4.servlet 的 url 理论上是随意的一个路径,但是请注意一定是绝对路径,且从应用程序根路 径出发的路径. 5.一般 forwad 写绝对路径,起始于服务器端的根 (包含应用程序名) 6.一般 redirect 写绝对路径,起始于客户端的根( 不包含应用程序名),为了不写死,所以要 通过 request.getContextPath()取得应用程序的路径,如/cms 7.关于 标签,base 标签设置页的基准路径,所有的包括链接,action,样式, javascript 的路径均相对于 base 的设置,默认 base 定义的路径是包含应用程序名称的路径 2文章管理 2.1 需求概述 一一 一一 一一 一一 一一 一一 一一 left.jsp article_ad.jsp ArticleSrvlet ArticleDao article_ad_sus.jsp1: 一一一2: 3: 一一一一4: 一一(request) 6: save(Article)5: 一一一一一Article一7: forward(request,response) 2.2sql 准备 2.2.1MySQL 字段类型 int 整数 char(n) 定长字符串 varchar(n) 变长字符串 blob 二进制文件 longtext 大字段文本 date 日期,不包含时间 datetime 日期和时间 time 时间 year 年份 timestamp 毫秒数 2.2.2 建表语句 create table t_article( id int primary key auto_increment, title varchar(200), content varchar(4000), create_time datetime, update_time datetime, publish_time datetime, source varchar(200), author varchar(200), summary varchar(200), click_score int , reply_count int, is_recommend int, is_headline int, user_id int ); alter table t_article drop content; alter table t_article add content longtext; 2.3 通用 Servlet 框架 public class BaseServlet extends HttpServlet Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String method=request.getParameter(“method“); /缺省的采用list方法 if(method=null) method=“list“; try Method m=this.getClass().getMethod(method, HttpServletRequest.class,HttpServletResponse.class); m.invoke(this, request,response); catch (SecurityException e) / TODO Auto-generated catch block e.printStackTrace(); catch (NoSuchMethodException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IllegalArgumentException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IllegalAccessException e) / TODO Auto-generated catch block e.printStackTrace(); catch (InvocationTargetException e) / TODO Auto-generated catch block e.printStackTrace(); public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException public void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException public void updateInput(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException public void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 2.4 表单参数统一接收和处理框架 依赖于 apache-common 类库下的 commons-beanutils.jar commons-logging.jar public class RequestUtils /* * * param clazz 目标对象类型 * param request request请求 * return 返回property设完置后的对象 */ public static Object copyProperties(Class clazz,HttpServletRequest request) Object o=null; try o = clazz.newInstance(); catch (InstantiationException e1) / TODO Auto-generated catch block e1.printStackTrace(); catch (IllegalAccessException e1) / TODO Auto-generated catch block e1.printStackTrace(); Map params=request.getParameterMap(); for (Iterator iterator = params.entrySet().iterator(); iterator.hasNext();) Map.Entry param = (Map.Entry) iterator.next(); String key=(String)param.getKey(); String values=(String)param.getValue(); try BeanUtils.copyProperty(o, key, values0); catch (IllegalAccessException e) / TODO Auto-generated catch block e.printStackTrace(); catch (InvocationTargetException e) / TODO Auto-generated catch block e.printStackTrace(); return o; 2.5 分页组件 1.分页器对象模型 Pager : pageNo ,pageSize ,totalPages, totalRecords,startIndex 2.抽取 BaseDao,封装查询总记录数的通用方法 *定义参数类型类 *定义处理方法 getRecords(String sql,Object params,int ParamTypes) 3.分页导航控制思路 1 如果当前页号=1 首页 上页 下页(a) 尾页(a) 如果当前页号=totalPages 首页(a) 上页(a) 下页 尾页 其它 首页(a) 上页 (a) 下页(a) 尾页(a) 否则 首页 上页 下页 尾页 4.利用 ThreadLocal 封装分页参数,减少方法间传递 详细理解可参考:/qjyong/archive/2008/03/08/2158097.aspx 5.基于 Form 表单提交控制当前页号的分页方案适合于管理信息系统 6.基于 URL 地址传参的控制分页方案适合于商业网站 3.频道管理 3.1sql create table t_channel(id int primary key auto_increment,name varchar(50),description longtext); alter table t_article add channel_id int references t_channel(id); 3.2 程序架构重构 统一增加 service 层,将业务逻辑从 Dao 层代码中分离,明确职责分工。一一 article_ad.jsp ArticleSrvlet ArticleSrvic Article ArticleDao 一一(domain model) d (doman odel Driven):一一一一一一Bean一一一: 1: 2: 3: 4: 5: 6: 7: 3.3 事务处理 之前的程序中没有考虑事务处理,每一个 dao 的方法都独立创建数据库连接,独立提 交,独立回滚,独立关闭。 解决事务最核心的前提是:同一个数据库连接,事务结束后统一提交或回滚,最终关闭。 因此可以在 service 层开启事务,调用相应的一个或多个 dao 方法之后,统一提交或回 滚,最终关闭,但是由于 Dao 中需要访问到 Connection,为了减少 Connection 在各个方法 的 api 中定义,采用 ThreadLocal 解决。 每一个 service 中的方法加入逻辑基本相同,故考虑采用代理设计模式封装。 3.4 动态代理 3.4.1JDK 动态代理 实现 InvocationHandler 接口,重写 invoke 方法 -乾坤大挪移 必须要有接口 代码示例: public class JDBCHandler implements InvocationHandler /真实对象 private Object target; public Object createProxy(Object target) this.target=target; /生成代理对象 return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); Override /* * p1:是指真实对象( 目标对象) * p2:调用方法所指的Method对象 * p3:实际参数 */ public Object invoke(Object proxy, Method method, Object args) throws Throwable Object o=null; /前置 打开数据库连接 Connection conn=DB.getConn(); try /前置 将数据库连接放入到ThreadLocal中 ConnectionContext.setConn(conn); o=method.invoke(target, args); /后置 事务提交 mit(); catch(Exception e) /异常 事务回滚 DB.rollback(conn); finally /最终 连接关闭 DB.close(conn); /返回方法调用结果 return o; 3.4.2 CGLib 字节码执入技术 偷梁换柱 对于普通的类实现动态代理 3.4.3Jdk1.6 的一个新特性 Compiler API 3.5AOP Aspected Oritened Programming weave Point-cut target Pro xy Abst ract Aspect(jdbcH andler) Advice(通知 ) Before Finish Exception Finally Arround 3.6 工厂设计模式 3.6.1 简单工厂设计模式(静态方法工厂模式) 工厂角色:负责实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的 产品。 抽象产品角色:简单工厂模式所创建的所有对象的父类。它负责描述所有实例所有共有的 公共接口。 具体产品角色:所有创建的对象都是充当这个角色的某个具体类的实例。 一一 一一1 一一2 一一 Factory(一一) 优势和缺陷 在简单工厂模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外 界的信息,决定究竟应该创建那个具体类的对象。通过使用工厂类,外界可以从直接创建 具体产品对象的尴尬局面中摆脱出来,仅仅需要负责“消费”对象就可以了,而不 必管这 些对象究竟是如何创建以及如何组织的。这样就明确区分了各自的职责和权力,有利于整 个软件体系结构的优化。但如果新增产品,则需要修改工厂类,违反了 OCP原则 3.6.2 工厂方法设计模式 产品角色(Product):定义产品接口 真实产品(ConcreteProduct):实现接口 Product的类 工厂角色(Creator):声明工厂方法,返回一个产品 真实的工厂(ConcreteCreator):实现工厂方法,有客户调用,返回一个产品的实例 优势和缺陷 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。她能够是工厂可以自 主确定创建何 种产品对象,二如何创建这个对象的细节则完全封装在具体工厂内部。使用 工厂方法模式的另一个优点在于系统在加入新产品的时候无需修改抽象工厂类和抽象产品 提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,而是只要添加一 个具体工厂和具体产品就可以了,这样,系统的可扩展性非常好。 3.6.3 抽象工厂设计模式 抽象工厂模式与工厂方法模式的最大区别在于:工厂方法模式针对的是一个产品等级 结构,而抽象 工厂模式则针对的是多个产品等级结构。正应为如此,抽象工厂模式中经常 会用到产品族的概念(Product Family)这一概念,它是指位于不同的产品等级结构中, 并且功能相互关联的产品系列。 抽象工厂(AbstractFactory):声明生成抽象产品的方法 具体工厂(ConcreteFactory):执行生成抽象产品的方法,生成一个具体的产品 抽象产品(AbstractProduct):为一种产品声明接口 具体产品(ConcretePorduct):定义一个具体工厂生成的具体抽象的对象,实现产品 接口 一一 一一2一一 一一2 一一 一一1 一一2 一一4 一一1 一一3 可以 AWT类库设计为例 Buton Text AWTFactory UnixButon UnixAWTFactory UnixText WinButonWinAWTFactory WinText UnixAWTFactory负责各个产品中有关 Unix这一族的产品的生产。 抽象工厂负责创建不同的有联系的多个产品,不同的抽象工厂创建的产品不同,但产 品之间的关系相同。 优势和缺陷: 抽象工厂的模式主要优点是隔离了具体类的生成,使得客户部需要知道什么被创建了, 由于这种隔 离,更换一个具体工厂就变得相对容易。所有的具体工厂都实现了抽象工厂中 定义的那些公共接口,因此只须改变具体工厂的实例,就可以再某种程度上改变整个软 件 系统的行为。使用抽象工厂模式的最大好处是,当一个产品族中的多个对象被设计成一起 工作时,她能保证客户端只是使用同一个产品族中的对象。 3.7Bean 工厂的创建 3.7.1 属性配置文件解读 public class PropertiesBeanFactory implements BeanFactory private static Properties props=new Properties(); static ClassLoader cl=PropertiesBeanFactory.class.getClassLoader(); InputStream in=cl.getResourceAsStream(“perties“); try props.load(in); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); public PropertiesBeanFactory() Override public Object getBean(String beanName) String className=(String)props.get(beanName); try return Class.forName(className).newInstance(); catch (InstantiationException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IllegalAccessException e) / TODO Auto-generated catch block e.printStackTrace(); catch (ClassNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); return null; public static void main(String args) System.out.println(new PropertiesBeanFactory().getBean(“channelService“); 3.7.2Jdom 解析 XML 文档 public class ClassPathXMLBeanFactory implements BeanFactory private Map beans=new HashMap(); public ClassPathXMLBeanFactory() /1.定位到beans.xml文件上 InputStream in=this.getClass().getClassLoader().getResourceAsStream(“beans.xml“); /stream api for xml SAXBuilder builder=new SAXBuilder(); /2.应该是通过jdom解析工具返回一个文档对象模型 Document doc=null; try doc=builder.build(in); catch (JDOMException e) / TODO Auto-generated catch block e.printStackTrace(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); /3.通过文档对象模型取得根元素 Element root=doc.getRootElement(); /通过对象模型取得所有的孩子 bean List elements= root.getChildren(“bean“); for(int i=0;i 资源路径 都是服务器端根路径,包含应用程序名称 Tomcat 解析 将被含页面代码复制合并到包含页面 中,不生成被包含页的对应的 servlet 执行到包含页面时请求转发,生成被 包含页面对应的 servlet 传参数 不可以传参数 可以传参数 也可以用传参 Servlet 中 需要使用 include(request,response) 资源应用 可以包含 html,jsp Html,jsp,servlet 应用场景 一般对于静态网页,或者不变化的网 页,没有数据访问的网页 除静态之外的,由于动态包含效率较 静态低,所有在都可以使用的情况下 优先使用静态包含 5Mybatis 总结 1. 持久化的概念 2. mybatis 框架的运行机制(主要是基于反射) 3. 几个配置文件 a. SqlMapConfig 配置别名,数据源,引入 SqlMapper 文件 一般位于 ClassPath 根路径下 b. SqlMapper Sql 语句编写的文件 对于一个类(一个表)一般有一个 Mapper 4. SqlMapper Select Insert Update Delete Paramter:传入参数,如果是对象,则写对象的类型 (通常是短名称) 单一参数,如 int string 等 Map:主要用于不相关的一些参数传入 resultMap 结果映射 : 不匹配问题 字段与属性名不能实现自动的注入 统一都设置 5. 高级映射 一对一(多对一) Association property=”name” column=”person_id” select=”另外一条 sql 语 句” 带来 N+1 问题 解决办法: 跨表查询,但是映射需要把所有的字段与属性显示对应 Association JavaType 一对多(多对多) Collenction 最核心的是面向对象的关系,数据库表间的关系,其次 sql 语句熟练 6. 动态 sql Sql 语句块 If choose foreach $ 6CMS 总结 6.1 登录与登出 验证码的应用 * Session 的应用 * 基本的参数请求方式 * 基本的参数处理方式 * Request.getParameter() Filter * 统一判断用户是否登录 统一设置请求中的编码 配置,使用场景 6.2 文章管理 CRUD 增删改查搜分 修改一般是通过 servlet 到达 jsp 页面的( 因为需要回显) 比增的表单参数多一个 id 列表展现: Servlet 中通过 request.setAtrribute 设置属性 Forwad :jsp 页面可以访问到 Redirect :jsp 访问不到 服务器端重定向* 客户端重定向* Request.getAttribute() Jstl EL $username 分页 * 基于 URL 地址分页方式 基于 form 表单的分页 Pager_taglib 增加 pageno 的支持 编码的设置 分页模型 Pager ThreadLocal * 解决了分页参数的传递问题 解决了 Connection 在 Dao 层的传递 路径问题 * 1. 服务器端(servlet) Forwad: “/” 是相对于 WebApp (http:/localhost:8080/cms
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建漳州东山县招聘中小学幼儿园编外教师23人备考考试题库附答案解析
- 脊柱骨折的急救处理措施
- 幼儿园全方位探索
- 基因变异功能研究-洞察及研究
- 工厂安全培训搞笑段子课件
- 手拦车安全知识培训课件
- 油墨厂特种油墨设备操作规定
- 上海市华东理工大学附属中学2024-2025学年高二上学期期中物理试卷(含答案)
- 招生咨询安排方案范文
- 河南省三门峡市渑池县第二高级中学2025-2026学年高三上学期开学考试历史试题(含答案)
- (北师大版2024)七年级数学上学期期中测试卷
- 义务教育法主题班会课件
- 全国计算机等级考试一级历年考试真题试题库(含答案)
- 《系统工程与决策分析》全册配套课件
- DL∕T 2033-2019 火电厂用高压变频器功率单元试验方法
- 数据驱动的教育决策
- 租房转让协议书
- 译林版七年级上学期英语第一次月考试卷(含答案解析)
- 儿童常见呼吸道疾病雾化吸入治疗专家共识课件
- 大学生国家安全与保密培训
- 2023新能源光伏发电生产指标体系
评论
0/150
提交评论