JSP

JAVABEAN

1.     概念:javaBean是一个纯java代码,又叫pojo。在MVC模式中是model,他主要是封装数据和业务逻辑。

2.     种类:

①  数据Bean【优点:利用框架技术完成自动收集】

l  表单Bean:作用封装表单中的参数

语法要求属性、名字、个数、类型与表单中参数一致

l  结果Bean:作用封装数据库中的记录

语法要求属性、名字、个数、类型与表中记录字段一致

②  业务逻辑Bean【优点:复用、分布】

l  业务Bean:作用对用户请求进行处理

l  持久Bean:作用封装对数据库的操作(DAO层数据访问层)

【数据:在表单中称为参数、在JavaBean中称为属性、在数据库中字段】



表单Bean

1.     语法

①  包声明

l  作用:体现了JavaWeb分包管理的原则

②  有public修饰的类,且类名和文件名相同

l  多个单词首字母大写、一个小写

③  属性的名字、个数、类型必须和参数一致,且所有属性必须隐藏private

l  若属性不是private修饰,则会造成数据混乱

④  提供公有的get和set方法访问属性

⑤  必须显示提供无参的构造方法

l  作用:便于维护

l  若对外不提供,则加private。

l  如果没有指定构造方法,则会自动生成一无参的什么都不做的构造方法

2.     部署

把.class字节码文件放到WEB-INF/classes/下与包对应的目录结构中

作用:WEB-INF的classes用来放字节码文件以便让Tomcat找到

3.     WEB-INF结构

①  classes:储存会用到的java类别

②  lib:储存Web程序会用到的第三方jar文件

③  web.xml:此文件为网站结构不输描述符,记载每个网站程序的设定。

4.     通过Servlet调用表单Bean

浅:jsp视图组件显示结果

深:从内置对象拿到数据处理response,在浏览器看到结果。

5.流程:最先经过的组件为Servlet,最后jsp视图组件。其中jsp中一定要有page,防止编码错误。



标签

1.    JSP

 JSP             JSP     JSP

JSPJSPJSP

<%@pageimport="cn.zte.pxb.*"%>

l  包导入作用:为了在指定的位置将字节码文件加载在方法区。

2.     实例对象:SimpleBean zs = new SimpleBean();

l  zs:对象的地址、引用、句柄、值。在栈中开辟空间

l  实例方法自带this指针而静态方法不带this指针。

l  创建对象至少调用一个构造方法。

3.     用标签代替一行或多行java代码,属于java语法范畴,必须有无参构造方法。但标签和EL表达式只能用于jsp。

<jsp:useBean id="zs"scope="page" class="cn.zte.pxb.SimpleBean"/>代替

if(page.getAttribute("zs")==null)

page.setAttribute("zs",newSimpleBean()); 

SimpleBeanzs=(SimpleBean)page.getAttribute("zs");

l  id=“zs" 表示实例化对象的名称。scope="page"表示使用范围 。class="cn.zte.pxb.SimpleBean"/>对象所属的包.类名称路径。

<jsp:setPropertyname="zs" property="*"/>代替

zs.setName("tom");zs.setPassword("123456") ;

<jsp:getProperty name="zs"property="name"/>代替

<%=zs.getName()%>等价于${zs.name}

<jsp:getProperty name="zs"property="password"/>代替

<%=zs.getPassword()%>等价于{zs.password}

l  name:已经声明过的JavaBean对象的(id)。property:表示要设置的属性,如果为“*”,则表示自动匹配

l  收集可以property="*",而输出要一个一个。

l  表单自动收集,找对象顺序page→request→session→application。

l  在合法状态下,能自动转换不同的类型。

4.     page在访问jsp时就创建。在类中找zs内置对象,若无,则创建。



标签和表单

1.     JSPJSPJSP

当表单中没有输入值时,标签通过getProperty拿属性为0request通过getParameter拿参数为null

2.     request表单参数个数大于或小于标签getProperty表单Bean个数时,标签Bean都去request表单中找,找到则设值,找不到就默认。

前提:不管参数类型、个数是否一样,必须保证参数名字对应一样。

3.     给某个属性赋值的三种方法

 <jsp:setProperty name="ls" property="password"/>

拿到SimpleBean对象给SimpleBeanname赋值,值为request表单中的password(表单中指定的参数值)

 <jsp:setPropertyname="ls" property="name"value="password"/>

SimpleBeanname值设为字符串“password”(直接设值)

 <jsp:setProperty name="ls"property="age"value="21"/>

直接给SimpleBean的属性赋值,必须写字符串



表单Bean在内置对象中的传递

1.     内置对象

 page访问jsp时创建

 request发请求时创建,请求结束时销毁。生命周期服务器决定-请求范围

 sesstion用户不下线即有效。生命周期客户端决定-用户范围

 appliction服务器启动时创建

2.     page

JSP

因为会产生两个CoutBean。所以可得:

page不能将表单Bean从一个页面传到另一个页面,也不能将表单Bean从一个组件传到另一个组件。只在页面有效,离开页面无效。

3.     request

JSP

由于request在用户请求未结束,则不会失效。服务器会产生一个CoutBean。所以可得:

l  在服务端跳转时(<jsp:forwardpage="requestJBDemo02.jsp"/>),可以传递。

l  在客户端跳转时(<ahref="requestJBDemo02.jsp">requestJBDemo02.jsp</a>),相当于重新发请求,不可以传递。

4.     session

JSP

因为会产生一个CoutBean。所以可得

服务端、客户端跳转时,都可以传递。造成服务器效率下降,所以只传验证信息。

5.     application

6.     Jsp标签使用场合、缺点

 使用场合:用于小型项目中,不能用于MVC模式。

 缺点:

l  不符合MVC设计模式

l  功能有限,胜任不了大项目

l  容错能力差

7.     导入jar包才能使用jstl标签



Servlet

1.     概念:用java代码编写的,线程安全的web组件,再MVC设计模式起到C(控制层作用:对请求的分发、完成向视图组件的转向)。

2.     线程安全:对象属性的值/对象的状态不能被其他线程改变。

3.     MVC:功能单一、目标明确

4.     作用

 CGI:通用网关接口,从服务器中取得内置对象的能力。

l  取:取内置对象在堆中的空间地址。

l  两种方式取得内置对象:注入、依赖查找。

注入:调用对象方法直接给数据,立马给内置对象。

依赖查找:在对象上查找。

l  CGI用注入方式

 创建表单Bean,收集表单数据

 对请求分析并分发给业务层,包括表单Bean、内置对象

 根据业务层的转向信息,转至视图组件显示

5.     流程

JSP

       启动服务器,用户通过浏览器表单发送请求给服务器,创建request获取参数,通过配置信息,将请求给Servlet,注入内置对象。Servlet创建表单Bean,封装请求参数,对请求分析交给业务层。业务层将表单中参数交给持久层。持久层根据所得用户参数访问数据库,创建结果Bean,封装结果Bean,将结果Bean返回给业务层。业务层将其放入request中,向Servlet发转向信息。在request中取得数据后将静态代码、动态结果交给response后在浏览器上显示。

6.     DAL(持久层)作用:接受表单参数、访问数据库、创建结果Bean,封装结果数据、将结果Bean给业务层。

7.     JSP作用:取得结果Bean、对结果Bean进行处理、将处理结果交给response,后在浏览器上显示。

8.     Servlet语法

 包声明【体现分包管理原则】

 包导入【在指定包下找到指定的类】

l  import java.io.* ;IOException属于java.io包下

l  import javax.servlet.* ;ServletException属于javax.servlet包下

l  import javax.servlet.http.* ;HttpServletHttpServletRequestHttpServletResponse存放在javax.servlet.http包下

 类定义

l publicclass SimpleServlet extends HttpServlet

l  继承:私有方法、构造方法、属性这三个不能被继承。抽象类可以被继承,不能创建对象。创建子类对象不能创建父类对象,创建子类对象调用父类构造方法为继承属性初始化。

 方法定义

l  public void doGet(HttpServletRequestreq,HttpServletResponse resp) throws IOException,ServletException

l  public void doPost(HttpServletRequestreq,HttpServletResponse resp) throws IOException,ServletException

l  throws声明异常、不处理异常,在方法声明后,throw抛出异常,在方法体内部。

9.     部署

J2SE识别不了J2EE的扩展包,而javac编译在J2SE中,即javac不能编译J2EE

解决办法:找到J2EE的扩展包(Tomcat→common→lib→servlet.api)放到jdk→jre→lib→ext

10. 配置

JSP

l  servlet-name内部名、cn.soft.tyh.SimpleServlet包名+类名、servlet-class包所在的目录结构、url-pattern隐射名

l  servlet-mapping删除后,不接受用户请求、再删除load-on-startup则不创建Servlet对象

11. system.out流对象jdk创建,往服务器显示、out外部对象Tomcat创建,往浏览器显示。



Servlet生命周期

1.     Tomcat一启动就将responserequestconfig注入

2.     publicvoid init(ServletConfig config) throws ServletException//初始化,Tomcat启动后,配置xml中创建对象就调用init

3.     有参数的init是为了拿到config。当有参无参init都存在,调用有参。

4.     destroy()//销毁,服务器关闭Servlet销毁后,释放Servlet所占资源,需调用destory

5.     生命周期

JSP

 若配置了load-on-startup,则会创建Servlet对象。若没配,第一次访问时创建

 执行init,默认执行有参,即注入config。若想调用无参,则不写有参。

 等待服务,一个Servlet同时为多个客户服务(时间片轮转、并发单服务器),必须线程安全。

 若表单发请求,Tomcat调用ServletdoPost注入responserequest给业务层。

 销毁及移除内存

6.     若想在destory方法中获得out对象,则用实例全局变量,通过doGetresponse得到。方法之间传递对象,用实例全局变量。

7.     为什么要获取servlet初始化参数?拥抱需求。当数据库改变时,只需要更改配置。

8.     <web-appxmlns="约束规定语法顺序(如ServletServelt-mapping的顺序)">

9.     流程:Tomcat启动,创建config,在web.xmlServlet标签中init标签,将参数封装在config中。创建Servlet对象,调用init,将config封装的属性、方法注入,取得初始化参数。

10. config中获取初始化参数

 this.username=config.getInitParamter(“username”);对象里的属性在堆里开辟数据

 String dd=config.getInitParamter(“DBDRIVER”);在栈里开辟数据

 方法调用结束,对象在,方法中变量不在。this.usernamethis.password在,dd不在。所以要用实例全局变量。

JSP

11. usernamepassword别的线程不能更改,设置时只在init中,所以安全。

12. 实例全局变量定义在类中,并用private隐藏,该类内部可调用,外部无法访问。



表单访问Servelt

1.     利用servlet取得session地址

HttpSession session =req.getSession() ;

session.setAttribute("sname",name);

2.     利用servlet取得application

方法一:ServletContext app=req.getSession().getServletContext();

app.setAttribute("addr","www.zte.cn");

方法二:有config ServletContext app=this.config.getServletContext();

                config ServletContextapp=this. getServletContext();(如果有带参init获得config不能用)

 

EL表达式

1.     概念:工作再jsp页面中取得内置对象属性值参与表达式计算

2.     工作环境:工作中唉jsp1.2jsp2.0以上的版本

3.     基本语法:${属性名}

4.     JSP

5.     优点

 语法简单

 用“”代替null,避免空指针异常

l  若无sname属性值,则输出空串。jsp不支持会原封不动输出,解决办法:加入<%@ page isELIgnored="false"%>则支持

l  ${name.age}中无name,则不会运行到age

 转换

 表达式运算

JSP

第一个:“30*5+null+630*5+0+6=156

第二个:“30>5→30>5→true

6.     EL表达式顺序

page→request→session→application,其中找到一个就不找了,若一个都没有则空串

7.     如果在不同的属性范围中设置了同一个属性名称,则之后的同名的属性无法找到,则从指定的内置对象中取得数据采用隐式对象

JSP

由于EL表达式顺序,获取的${name}的值为pagename。此时想获取requestname

解决方法:引用隐式对象${requestScope.name}

8.     EL表达式在MVC中应用

视图组件拿到属性,用EL表达式在浏览器上显示。



Fileter

1.     概念:用java编写的线程安全的Web组件,主要完成请求拦截和结果拦截。

2.     原理

JSP

3.     功能

 编码拦截

属于请求拦截,拿到所有用户所有请求的request,给所有request进行编码。request.setCharacterEncoding(“GBK”);

 请求验证拦截

 非法文字拦截

 lazy懒加载拦截

每个请求有一个session,将其绑定在线程上,使原本线程不安全的session,绑定后安全。

 struct2中起中央控制器作用

4.     类继承一个父类与类实现一个接口的区别

 抽象类能声明不能实现,抽象类有构造方法能被继承。创建子类对象不能创建出父类对象,但会调用父类的构造方法,给继承父类的属性初始化

 属性的规定public final static,接口用interface定义,无构造方法,接口方法都是abstract类可以实现多个没有关系的接口,一个接口可以被多个无关类实现

 接口不是特殊的抽象类

5.     语法

 包声明

 包导入

l  import java.io.*;

l  import javax.servlet.*;//导入ServletRequestServletResponseFilterChainFilterFilterConfigServletException

l  import javax.servlet.http.*;//导入HttpServletRequestHttpServletResponse

 类定义

public class CharsetEncodingFilterimplements Filter

 方法定义

l  public void init(FilterConfig config)throws ServletException

对象创建就调用,只有一个有参的,调用后马上注入config,变量类型filterconfig

Tomcat启动,创建两个config。一个实现servletconfig,读取servletpage信息初始化参数给servletinit。一个实现filterconfig,自动从filter组件中读取给filterinit

l  public void doFilter(ServletRequestservletRequest, ServletResponse servletResponse,FilterChain chain) throwsIOException, ServletException

请求给过滤器,调用dofilter方法拦截请求,所以请求被拦截时调用,注入对象requestresponsechain

l  public void destroy()

销毁filter,释放资源。服务器关闭,调用destory

不可以不写,因为三个方法都是filter接口中方法,必须重写实现,否则不能创建。

6.     部署

7.     配置

8.     拦截器的应用

 编码拦截器

JSP

Tomcat启动,实现Servletconfig接口,读取serveltpage信息初始化参数,读取web.xml,取filter初始化参数到filterconfiginit注入config,取page信息初始化参数。

 请求验证拦截器

假设拦截的是*.jsp组件。假如表单为index.jspregist.jsp,则拦截之后,先验证看是否注册或登录的组件,则不验证,直接请求下传。

JSP

 非法文字拦截器

 懒加载拦截器



Listener监听器

1.     概念:java编写的web组件,主要完成对内置对象的状态变化和属性的变化做监听,进行进一步的处理

2.     作用

 application状态变化和属性变化做监听

 session状态变化和属性变化做监听

3.     原理

4.     语法

 包声明

 包导入

l  import javax.servlet.http.* ;

 类定义

l  public class HttpSessionDemo implementsHttpSessionListener,HttpSessionAttributeListener

 方法定义

l  添加public void attributeAdded

getServletContext().setAttribute(“username”,”zs”);

l  替换public void attributeReplaced

同名异值替换getServletContext().setAttribute(“username”,”ls”);

        后台获取的属性值是替换前的

前台获取的属性值是替换前的

                     再次同名同值替换getServletContext().setAttribute(“username”,”ls”);

        后台获取的属性值是替换前的

前台获取的属性值是替换前的

l  删除public void attributeAdded

删除属性getServletContext().removeAttribute(“username”,”ls”);

        后台获取的属性值是移除前即被移除的

前台获取的属性值是null

5.     配置

JSP

6.     为什么类对象能对application创建进行监听?实现了ServletContextListener接口

7.     怎么证明对application进行了监听?this.application.getRealPath

8.     因为对applicationsession监听,applicationTomcat启动时创建。所以listenerTomcat启动时创建。listener→application→serveltconfigfilterconfig→filter→servlet

9.     初始化参数分两种

 封装到application的全局变量所有都可以用

<context-param>

        <param-name>

        <param-value>

 局部变量<init-param>

10. Session什么时候创建

不访问不创建

用户第一次访问服务器没有创建第一次访问项目没有创建第一次访问静态web组件html没有创建第一次访问动态web组件jsp创建

11. Session什么时候销毁

浏览器关闭session没有销毁。为了避免这种情况,保证关浏览器,session销毁,则用javascript处理。



JDBC

1.     概念:java连接数据库技术,它是连接数据库的标准,它包括连接数据库的一套API(类和接口),它主要应用于持久层DAO中完成对数据库的操作

2.     数据存取方式:往文件存取、往数据库存取

3.     数据库连接方式:ODBCJDBC

JSP

4.     jdbc连接数据库方式

 ODBC-JDBC

java代码转换成ODCA能接受的代码

JSP

 直连

5.     jdbc访问数据库的步骤(ODBC-JDBC桥)

 导入java.sql.*

 加载驱动Class.forName(DBDRIVER) ;

通过驱动程序名在指定位置找到驱动程序加载到内存

 创建连接conn = DriverManager.getConnection(DBURL) ;

链接名=数据库连接协议+数据源

 创建操作stmt.executeUpdate(sql) ;stmt.createStatement (sql) ;

 关闭操作stmt.close() ;

 关闭连接conn.close() ;

JSP

JSP

6.     访问数据库(直连)

oraclejava提供驱动程序