javaweb总结.doc_第1页
javaweb总结.doc_第2页
javaweb总结.doc_第3页
javaweb总结.doc_第4页
javaweb总结.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java web应用的目录结构:web程序文件夹- WEB-INF- - web.xml- - classes (源程序对应的.class)- - lib (程序用到的第三方库jar)2、如何用javac来编译程序a、需要用到j2ee相关的jar,将这些jar放到jdk/jre/ext下面b、javac -d . *.java -编译出package3、web程序要部署到应用服务器上(应用服务器:tomcat/weblogic/websphere/jboss)a、方式1:将web程序文件夹拷到到tomat/webapps/下,即可b、方式2:配置一个虚拟目录(不需要将web程序拷到tocat下)server.xml中节点下,增加子结点4、Tomcat的安装a、绿色版本,直接解压缩 (配置JAVA_HOME)b、可执行文件版本 (安装时会让提示你选择JDK的目录)应用程序部署目录为:webappshttp默认端口为8080,可以在server.xml中修改7、在myeclipse中新建一个Web Project,src:存放源程序的地方,最终编译到classes文件夹WebRoot:此文件夹下的内容最终部署到web应用服务器中常见错误:404:文件没找到,一般是路径配置出问题500:服务内部错误,一般是后台JAVA代码出问题配置欢迎页,可以配置多个在Tomcat中运行的是Servlet而不是JSP,所有的JSP都会被编译成Servlet在Tomcat/work目录下可以查看到JSP编译生成的Servlet这个过程是如何实现的呢?在Tomcat/conf/web.xml文件中,有配置 jsp org.apache.jasper.servlet.JspServlet jsp *.jsp 知道所以*.jsp请求都交给JspServlet处理JSP语法:3个指令:page, include, taglib指令的用法:% 中间不能有空格page指令:pageEncoding=UTF-8import=java.io.File, 也可以 import=java.io.*,java.util.*还可以使用多个page指令include指令:include指令是如何工作的?include指令会将另一个页面的代码包含进来一起编译生成一个文件taglib指令:引入标签库,可以是自定义的,也可以是J2EE自带的, JSTL标签库JSTL标签库在j2ee1.4中不是自带的,在JEE5中是作为标准的一部分1、在JSP中嵌入JAVA代码, 在 , 结尾不要加分号2、在JSP中声明一个方法或者属性3、JSP的注释 !- 这是html注释, -3、JSP动作标签动作标签与的区别:: 将a.jsp页面中的代码嵌入到当前页面,一起编译成一个单独的Servlet:当前页面及嵌入的a.jsp页面单独编译成相应的Servlet第三章:JSP的内置1、JSP的九个内置: 4种属性范围:pageContext, request, session, application response, out, page, config, exception 其中exception对象只有当JSP页面设置了时,才存在JSP的九个内置对象指的是JSP编译成Servlet类, 对应的Servlet类中定义了这9个对象在JSP的JAVA代码中可以直接使用这9个JSP已经定义好了的对象2、tomcat/work目录下,存放JSP编译生成的Servlet源码及字节码当某个JSP页面第一次访问时,才将些JSP编译生成Servlet,当第二次再访问此JSP时,直接加载运行第一次生成的Servlet字节码如果某些JSP页面从未被访问过,那么不会将此JSP编译成Servlet3、九个内置对象的用法,实际上就是这9个类的用法HttpServletRequest- requestHttpServletResponse- responseHttpSession- sessionServletContext- applicationServletConfig- configpageContext, out, page, exception对象以后很少使用4、页面(填写表单),提交到服务器(发送一个请求request,数据被包装在request对象中)(控制器MVC中的C)服务端对应有一个Servlet来处理页面提交过来的请求 处理完请求后M,根据处理结果判断,跳转到哪个页面(View),在页面中显示数据内容(JSTL/EL) 注:使用JSTL/EL取代在JSP中直接编写JAVA代码 M是什么?Model就是数据(普通的JAVA对象,一般指对应到数据库表结构的类, 比如Person/User)5、4种属性范围pageContext, request, session, application这四个对象都有setAttribute(), getAttribute(), removeAttribute()setAttribute(String, Object);Object getAttribute(String);pageContext: 设置的属性只能在当前页面访问request: 设置的属性在一次请求中可以访问到,一次请求指的是向服务器发送一次(不关心服务器端是否有跳转) 一次请求的直观反映是,浏览器地址栏的地方没发生改变session: 设置的属性在一个会话中可以访问到, (不同的用户的session是不一样的)(一个会话的结束:当浏览器关闭;当服务器重启;当调用session.invalidate()让session失效;当session超时timeout)application: 设置的属性在整个应用中都可以访问到, 只要服务器不重启,设置的内容在任何时间任何地方随时可以访问到范围的大小:(这四个对象是用于在不同的页面中传递数据的)pageContext request session application如何选择使用这四个对象呢?遵循规则:选择够用的,范围越小越好,一般选择request,极少情况使用session, 一般不用application。原因:request对服务器没有负担,session在服务器端缓存数据,application直接与应用绑定(应用不关闭则application内容一直存在于服务器)JSP9个内置对象:request, response, session, applicationout, page, pageContext, config, exceptionrequest:代表一个请求对象, 指的客户端向服务端发送的数据等response:代表一个响应对象,指的服务端对客户端的一个反馈session:代表一个会话(一般用于保存登陆用户的信息),数据存放在服务端上cookie数组 = request.getCookies()cookie它的数据是存放在本地, 它是不安全,不可靠业务逻辑不能依赖于cookieapplication: ServletContext, 指的就是部署在Tomcat上的应用四种属性范围:(作用:进行数据传递)pageContext: Servlet中不用request: Servlet中最常用 (从Servlet传递到页面)session: 不常用,一般只用于类似保存用户信息application:一般不用,只用于全局的信息保存,比如统计用户在线人数/存入key-value数据对象.setAttribute(String key, Object value);/读取key-value数据Object value = (数据类型转换)对象.getAttribute(String key);重点:ServletServlet:在服务端运行的脚本,它是JEE的核心Servlet分三类:1、普通的Servlet2、Filter过滤器3、Listener监听器Servlet:当客户端向服务器端发送一个请求时,服务器端会新建一个线程来处理(不是进程) 但Servlet不是线程安全的线程安全:定义线程级局部变量,或不存取类的属性线程不安全:class A private String name;public void test(String name) = name;A a = new A();线程1:test(aaa);线程2:test(bbb);-ThreadLocal: 线程局部变量,为某个线程定义一个不同的变量Servlet实例由Web容器负责管理,Servlet有生命周期一个Servlet类,在web容器中只有一个实例(它的装载与初始化在第一次访问到时进行)Servlet的生命周期:1、Servlet在第一次被访问时,web容器加载Servlet类并调用init()方法初始化此Servlet2、每一次访问Servlet时,调用Servlet的service()方法处理请求信息3、当服务器重启或停止时,调用Servlet类的destroy()方法销毁实例对象doGet()/doPost()service() String method = request.getMethod(); /返回get还是postif(method.equals(get) doGet(); else doPost();_public class HelloServlet extends HttpServlet protected service() /在web.xml中配置了此Servlet, url-pattern=/HelloServlet当第一次在地址栏上输入:http:/localhost:8080/app/HellServlet,通过类加载器加载这个Servlet,并调用init()方法初始化任何请求的调用过程:先调用Servlet接口的public service(), 在此方法中调用了HttpServlet类中的protected service()方法而在protected service()中,调用了doXXX方法。一般自己编写的Servlet,只用重写doGet()/goPost()方法即可;也可重写service()方法Servlet相关概念:Servlet是运行在服务器端的JAVA代码,Servlet类的对象由web容器管理即Servlet类的生命周期由web容器管理。一个Servlet类最多只有一个实例。它是基于多线程,是线程不安全(意味着尽量不要给servlet加上可以修改的属性)CGI:通用网关接口,一般使用C语言编写,基于多进程。Servlet的生命周期:1、在Servlet类第一次被访问时,类加载器加载此类并创建一个Servlet对象及调用init()初始化2、在每一次访问Servlet对象时,调用Servlet类的service()方法处理请求。 3、在服务器重启或停止时,调用Servlet类的destroy()方法销毁对象。编写一个Servlet的顺序:1、编写一个普通的类,继承HttpServlet,并重写其中的protected service();等2、在web.xml配置一个Servlet.HelloServletcom.kzw.web.HelloServletHelloServlet/aa/asd/sss对应的请求路径(地址栏上的路径)为:/项目名/aa/asd/sss3、请求此Servletl 生命周期l 创建Servlet的步骤1、 编写一个类继承HttpServlet,并重写doGet()及doPost()方法public class LoginServlet extends HttpServlet protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException this.doPost(req, resp);protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException System.out.println(调用了servlet的方法);2、 在web.xml中注册此Servlet,并进行映射LoginServletcom.kzw.web.LoginServletLoginServlet/LoginServlet3、根据web.xml中的url-pattern,在浏览中进行访问http:/localhost:8080/jsp07/LoginServletl Servlet中处理请求步骤1、从请求中取出数据,并对数据进行封装2、调用业务逻辑,将数据作为参数传入3、根据调用的返回结果,从而决定跳转到哪个页面; 并传递相关数据l Servlet处理请求之后,进行跳转。l 客户端跳转, 也叫重定向,不在一次请求之内。特点:地址栏中的内容会发生改变;request.setAttribute()中设置的数据无法传递过去。 获得部署项目名:req.getSession().getServletContext().getContextPath();l 服务器端跳转,servlet中的request将会传递给下一个页面的request对象特点:地址栏中的内容不会发生改变;request.setAttribute()中设置的数据可以传递过去req.getRequestDispatcher(/success.jsp).forward(req, resp);l 获得在web.xml中配置的初始化参数l 为servlet配置初始化参数。重写Servlet的init(ServletConfig)方法ServletConfig.getInitParameter(“参数”);l 配置全局ServletContext的初始化参数ServletContext.getInitParameter(“参数”);1、 复习上节课内容l 如何编写Servlet,及在Servlet中处理请求的步骤从请求中获得数据,String request.getParameter(String)调用业务逻辑,将这些数据作为参数传入根据调用方法的返回值,决定跳转到某个请求(页面,或另一个Servlet)在跳转时,一般会传递一些数据。Request.setAttribute(String, Object)l 有两种跳转方法客户端的跳转:Response.sendRedirect(客户端的url);Request.getSession().getServletContext().getContextpath();客户端跳转,地址栏会发生改变;不能通过request对象来传递数据 服务器端的跳转: 要常用的方法 Request.getRequestDispatcher(url).forward(request, response); 地址栏不会发生改变,可能通过request对象来传递数据2、 一个完整的用户登陆注册l 编写RegisterServlet及LoginServlet,并进行注册l 编写index.jsp(登陆页面),register.jsp(注册页面)l 页面与Servlet相等相连接,如何在页面中放置请求URL放置URL:, 在JSP页面设置的URL路径都是客户端的路径,只到htpp:/localhost:8080意味着JSP页面中所有请求都应用加上项目部署名,即加上 /projectJSP页面中的相对路径,在没有设置前提下,路径是相对当前地址栏的可以使用绝对路径,即通过 String path = request.getSession().getServletContext().getContextPath()获得部署项目名,然后 /其它路径2011-10-17使用DAO设计模式,JDO:java data objectl 建实体:数据库中的一个表,对应着一个JAVA类(java bean),Java bean:一个JAVA类,只有属性及对应的setter/getter方法l DAO层,操纵实体对象,对应着数据库的操作(编写SQL语句)在DAO层中封装对实体对象的新删改查(CRUD)查:查询所有记录、根据主键查找、根据属性查找、分页查找。l Service层,提供服务。业务逻辑,实现什么功能3、如何获得类路径下的文件方式1:String path = DbUtil.class.getClassLoader().getResource(perties).toURI().getPath();方式2:String path = DbUtil.class.getResource(/perties).toURI().getPath();1、 基本的CRUD操作C:Create new recordsR:Retrieve existing recordsU:Update existing recordsD:Delete existing records.2、按MVC设计模式做Web应用程序时,如下分层C:controller控制器,为Servlet(web层)在Servlet中调用service层中的业务逻辑 (也包含了增删改查)在service层中调用dao层中的CRUD (最好接口与实现分离)M:model模型。即实体对象,要展示的数据V:view视图,如jsp、freemarker,用于展示数据的模板3、 如何获得类路径下的某文件、如何读取属性文件基本的JDBC操作,要掌握。4、数据库组件 commons-dbutils对于用不同的ResultSetHandler查询出的结果的数据结构1、 ArrayHandler 单行结果,若查询有多行则只取第一行。 查询出的结果是一个Object数组,里面依次存放的是各列对应的值。2、ArrayListHandler 多行结果。 查询出来的是一个 ArrayList , 查询出来的每行结果存在一个 Object数组(和1中的存储方式一样)中。3、BeanHandler 单行结果,若查询有多行则只取第一行。 查询出来的是一个Bean对象 。通过内省机制把相应列的值付给bean对象的属性。4、BeanListHandler 多行结果。 查询出来的是一个ArrayList,每一个Bean对象通过内省机制存着查询结果一行的数据。5、ColumnListHandler 多行结果。 查询出来的是一个ArrayList, ArrayList里面存的是查询出来的所有结果的第一列(默认是第一列,可设置)的值,其余几列的值都丢弃了。7、KeyedHandler 多行结果。 查询出来的结果是一个HashMap hm1, key中存的是查询得到结果集的所有第一列(默认是第一列,可设置)的无重复值。因为key不可重复,所以会把重复的值给去掉。 value中存的是一个仍是一个HashMap hm2, hm2中存的是与它在hm1中的key在查询中对应的一行(具体依据什么选出这一行,不太清楚)的信息。hm2中key为列名称,value为该列相对应的的值。8、MapHandler 单行结果,若查询有多行则只取第一行。 查询出来的结果是一个HashMap , 里面存着查询结果中一行数据的信息,key存的是列名,value存的是相应列的值。9、MapListHandler 多行结果。 查询出来的结果是一个ArrayList HashMap ,查询出来的每行结果放在一个HashMap,该hashMap的具体存储同8一样。10、ScalarHandler 单行结果,若查询有多行则只取第一行。select count(*) 获得统计值等(单个值) 查询出来的是一个Object,里面存的是该行结果的某一列(默认是第一列,可设置)的值。 对于“默认第一列,可设置”的解释:默认为查询结果的第一列,也可以自己根据需要设置成第n列或者名称为“XXX”的列。但设置名称后,对于列数n的设置失效。若想再用n则可以把列名设置成null即可。EL表达式语言及JSTL标签库1、作业练习留言簿,实现用户管理,留言管理。一个用户有多条留言,在留言数据表中有一个外键(用户ID)2、JSP仅作为view视图技术,不应该在JSP嵌入JAVA代码数据在JSP中的展示,使用EL表达式及JSTL标签库技术(JSP作为视图)Freemarker视图技术要比JSP视图要强大很多。3、EL表达式语言从四种属性范围内(即page,request,session,application)中获得值,形式:$名称 或 $requestScope.名称 等等EL表达式与html代码一起使用(可以在javascript中使用),不能与JSP中的JAVA代码混合使用。它会在JSP编译成Servlet时生成对应的JAVA代码。EL表达式不能嵌套,也不能有java代码4、EL表达式使用 .或操作特殊情况使用来操作EL表达式语言及JSTL标签库1、作业练习留言簿,实现用户管理,留言管理。一个用户有多条留言,在留言数据表中有一个外键(用户ID)2、JSP仅作为view视图技术,不应该在JSP嵌入JAVA代码数据在JSP中的展示,使用EL表达式及JSTL标签库技术(JSP作为视图)Freemarker视图技术要比JSP视图要强大很多。3、EL表达式语言从四种属性范围内(即page,request,session,application)中获得值,形式:$名称 或 $requestScope.名称 等等EL表达式与html代码一起使用(可以在javascript中使用),不能与JSP中的JAVA代码混合使用。它会在JSP编译成Servlet时生成对应的JAVA代码。EL表达式不能嵌套,也不能有java代码4、EL表达式使用 .或操作特殊情况使用来操作,比如变量名中有特殊符号,或变量名是动态的5、常用的EL隐含对象pageContext:在EL中,表示为ServetContext,而在JSP的内置对象中其表示当前页面的上下文。获得部署项目名 $pageContext.request.contextPath /projectparam:获得请求参数 $param.id 从一个JSP页面直接跳转到别一JSP页面。如跳转到,在b.jsp中使用 $param.idpageScope、requestScope、sessionScope、applicationScope:从对应的四种属性范围内获得值。相当于 request.getAttribute(“名称”) 等initParam:获得ServletContext的初始化参数,在web.xml中设置EL表达式,$表达式,可以使用算术运算符、关系运算符、逻辑运算符等参与表达式的计算。EL表达式中不能嵌套。1、不能嵌入java代码;2、不能再嵌入一个EL表达式$.,即 $10 + $cnt是错误的,$10 + cnt 才是正确JSTL标签库1、JSTL标签库提供的标签2、使用taglib指令引用JSTL标签库引入带有jsp的标签库3、常用的JSTL标签 request.setAttribute(“name”, “abc”);特别注意:下面代码有什么问题!- - 注释中的JAVA代码或者JSTL标签或者EL表达式是会执行过滤器、监听器本学期:MVC:自已编写一个仿Struts MVC框架持久层框架:hibernateJavascript语言下学期:Jquery框架,javascript的框架Spring框架SpringMVC框架Freemarker框架其它一些专题1、中文乱码的解决a、首先:确保数据库设置没有问题,比如mysql数据库my.ini配置,mysqld及mysql下的default-character-set=utf8b、程序中出现乱码,根据请求的类型(method)分别用不同方法来解决如果以GET方式提交请求: 这是一种以GET方式提交的请求或默认,这也是以GET方式提交请求location.href=#,这也是GET方式提交请求GET方式产生的乱码不能用 request.setCharacterEncoding(UTF-8);注意:GET请求的数据是放在请求对象的头部信息中,然而request的setCharacterEncoding方法只是对请求体body中的数据进行重新编码,不影响请求的头部信息。GET请求默认的编码为ISO8859-1(latin-1),是不能显示中文。 ISO8859-1特点:一个中文使用%xx%xx表示GET乱码解决方案有两个1、硬编码解决(推荐)str = new String(str.getBytes(ISO8859-1), UTF-8);表示以ISO8859-1解码再使用UTF-8编码(或以其它GBK重新编码)要求对每一个可能为中文的值都进行此编码,工作量比较大2、在tomcat的server.xml中设置 为了避免GET乱码的产生,最好使用POST方式进行提交。POST请求的数据是放在请求体中的,可以request.setCharacterEncoding()方法对所有的数据进行统一的重新编码。POST优点:乱码容易解决;数据不显示在浏览器地址栏上;数据长度无限制POST乱码解决方案1、在每一个Servlet的最前面调用下面方法request.setCharacterEncoding(“UTF-8”);2、使用一个过滤器,统一解决所有的POST请求中文乱码2、过滤器香烟的过滤嘴:过滤有害的物质过滤网,过滤敏感词拦截住所有的物质,然后进行一些处理,让某一些物质通过,让另一些物质不通过。Servlet分三种,一个是普通的Servlet;一个是过滤器;一个监听器Hibernate 总结SessionFactory是一个重量级对象,创建很消耗时间;它是线程安全;可以共享Session是一个轻量级对象,创建消耗时间少;它是线程不安全,线程间不能共享 public class User / 这是主键,推荐使用Integer或Long而不是int, longprivate Integer id;private String uname;private String passwd;private Date cdate = new Date();/ 需要setter/getter方法public Integer getId() return id;public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论