表单中action表示web服务器端用于接收此表单数据的页面 method采用哪种http请求方法
四、JSP WEB服务器(又叫作WEB容器):用于存储html,jsp,servlet和其余一些web组件html
五、Tomcat目录结构
bin:用于存放一些Tomcat提供的命令
conf:Tomcat server的一些默认配置
logs:用于存放一些日志文件的目录
webapps:用于存储web应用(WEB应用部署的目录)
work:web引用的临时目录
七、如何部署jspWEB应用
在webapps目录下建立一个文件夹,该文件夹是用于存储jsp页面的,而后再该目录下建立
jsp页面,并建立WEB-INF目录,而后在WEB-INF目录下建立web.xml应用描述文件
<welcome-file-list>
<welcome-file></welcome-file>
<welcome-file></welcome-file>
<welcome-file-list>
而后在conf目录下的server.xml文件中b的<host>标签内添加<context>标签
<context path="项目名" docBase="项目名" debug="0" reloadable="true">
</context>
1)、path表示url访问时所指定的应用名称:
2)、docBase指明整个应用文件的位置(备注:该位置相对与webapps这么目录)
3)、debug表示调试等级
4)、reloadable表示重启tomcat是是否从新加载
八、如何手动打包一个WAR包,并部署
建立一个web项目,进入到该目录下,使用java -cvf 项目名.war 生成一个包含有web.xml和WEB-INF目录的war包
九、jsp的执行过程
一、browser发送request请求
二、jsp页面由JSP parser转换成Servlet.java文件
在_jspService方法由out.write方法输出JSP页面中的内容
三、由web容器和jdk吧Servlet.java文件编译成.class字节码文件
四、执行.class字节码文件生成response响应并传输给browser(浏览器)
第二章 JspServlet
一、Servlet的优势有
一、移植性好
二、功能强大
三、性能好
四、可靠安全
二、Servlet包结构
javax.Servlet.提供了基本的servlet基本库,抽象类和接口
javax.Servlet.http.扩展和继承了javax.Servlet.中的一些类和接口
如何插件一个咱们本身的servlet:
从
public abstract interface Servelt{
//获得ServletConfig的初始化信息和启动参数
ServlettConfig getServletConfig();
//被servlet容器调用,并根据初始化信息来建立一个servlet实例
void init(ServletConfig servletConfig)throwsException;
//接收用户请求并返回用户信息
void service(ServletRequest servletRequest ,ServletResponse servletResponse)
//返回Servlet相关信息,包括做者,版本,版权等
String getServletInfo()
//被Servlet容器调用,当该servlet不用的时候释放掉所占有的全部资源
void destroy()
}
总结:
一、Servlet接口只定义了servlet和客户端联系的方法并无具体的实现
二、Servlet开始接收客户请求前由servlet容器调用init()方法对其初始化并将该实例放到了服务器中
三、Service()方法被servlet容器调用接受客户的请求处理
1)、ServletRequest类:包含客户端的请求信息
2)、ServletResponse类:包含例客户端作出的相应
该方法会抛出ServletException和IOException两个异常
四、当Servlet实例长期不用,将被servlet容器经过垃圾处理器回收,并释放其所占的资源
三、javax.servlet.Servlet接口的派生类
//该类实现了Servlet接口并实现了部分方法,当建立普通的和HTTP无关的操做是能够经过是能够经过继承该类来建立新的servlet
javax.servlet.GenericServlet
该类继承了GenericServlet,并新增了HTTP有关的几种操做
javax.servlet.http.HttpServlet
//用来处理Http get请求
doGet(HttpServletRequest request, HttpServletResponse response);
//用来处理Http post请求
doPost(HttpServletRequest request, HttpServletResponse response);
// 用来处理Http请求的,能够处理get, post,delete
service(HttpServletRequest request, HttpServletResponse response);
四、如何建立及配置Servlet
一、新建Java类,继承javax.Servlet.http.HttpServlet
二、实现service(HttpServletRequest servletRequest ,HttpServletResponse
servletResponse)throwservletException,IOException;
三、进入WEB-INF目录,更新web.xml文件,增长Servlet描述信息,告诉web容器已经建立了一些Servlet
四、servlet说明:
<servlet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
<servlet>
五、servlet url匹配:
<servlet-mapping>
<servlet-name><servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
五、Servlet生命周期
1)、在web容器启动时,调用initial(ServletConfig)方法初始化Servlet
2) 、由响应的Http请求方法或者service()方法处理请求并返回响应
3)、当servlet使用时,web容器调用destroy()方法销毁servlet
六、jsp的工做原理是什么?
答:在一个jsp文件第一次被请求时,jsp引擎把该jsp文件转换成servlet,而servlet则是一个java原文件,若是转换时发现jsp文件有语法错误转换过程将中断
并向服务端或者客户端发出错误信息不然则转换成功,jsp引擎用javac把该java文件编译成相应的class文件,而后经过构造方法建立一个servlet实例该实例的jspinit方法被执行
jspinit在整个servlet的生命周期只被执行一次。而后jspService方法被调用来执行客户端浏览器的请求。对于每个请求jsp引擎都会建立一个新的线程来处理该请求因为servlet
始终驻留在内存中因此须要是很是快的。若是.jsp文件被修改,服务器根据设置决定是否将该文件从新编译,若是须要从新编译,则将编译结果取代内存中的servlet,并继续上述处理过程。虽然JSP效率很高,但在第一次调用时因为须要转换和编译而有一些轻微的延迟。此外,若是在任什么时候候若是因为系统资源不足的缘由,JSP引擎将以某种不肯定的方式将servlet从内存中移去。当这种状况发生时jspDestroy()方法首先被调用, 而后servlet实例便被标记加入"垃圾收集"处理。 jspInit()及jspDestory()格式以下:可在jspInit()中进行一些初始化工做,如创建与数据库的链接,或创建网络链接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源java
七、三层WEB结构是哪三层?并解释每一层的做用?
答:分别是:数据层,表示层,业务层
数据层:用于与数据打交道
表示层:用户显示的表示层
业务层,表示层与业务层的桥梁
三层的好处在于表示明确,扩展性好,逻辑性好,当要加开发成本
八、在IE地址栏中输入http://localhost:8080/ServletExample/HelloServlet去访问servlet,那么请问该请求会去调用servlet的那个方法?为何?
答:首先又客户端ie浏览器发送请求,那么服务器会调用相对的servlet程序去处理请求而servlet先会建立一个实例又实例去而后调用实例的init初始化方法,经过调用service方法去建立线程处理一个个客户端的请求
九、请描述一下HttpServletReuqest和HttpServletResponse的做用
HttpServletRequest是专门用于Http协议的ServletRequest的子接口他用于封装HTTP请求同HttpServletResponse同样在servic()方法内部调用HttpServletRequest对象的各类方法请求,来获取请求信息,web客户端发送给web服务器的消息分为请求行,请求消息头,消息正文。
获取请求行的相关信息有以下一些getMethod方法返回HTTP请求消息中的请求方式。
getRequestURI方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getProtocol方法返回请求行中的协议名和版本。
getContextPath方法返回请求资源所属于的WEB应用程序的路径。
getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径以后和查询参数以前的内容,它以“/”开头。
getPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。
getServletPath方法返回Servlet的名称或Servlet所映射的路径。
获取网络链接信息的主要方法有以下一些:
getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。
getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。
getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。
getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。
getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。
getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。
getServerName方法返回当前请求所指向的主机名。
getServerPort方法返回当前请求所链接的服务器端口号。
getScheme方法返回请求的协议名,例如http、https或ftp。
getRequestURL方法返回客户端发出请求时的完整URL。
至于获取请求头方法基本上就是get加上相应请求头的名字。
第三章 JSP动做指令
一、指令标签
<%@page %> page指令标签:申明当前jsp页面的编码格式,文本类型,编写语言和须要导入的类文件
import属性为导入相关类文件的权限定名,每一个类文件用","号隔开
errorPage属性指明当页面出现java异常时跳转到某个页面,errorPage="errorPage.jsp";
session="true/false"表示当前jsp页面是否可使用Session会话对象
<%@ include file=""%>
表示动态的引用一个文件,若是是纯html,则copy到主页面中
若是其中还包含有java代码,加载到主页中后java代码会被编译
被包含的页面中不须要出现主页面中已经有的不重复出现的html标签,只须要写放在body标签内的内容web
二、Java程序判断
<%%>不能在程序片断内定义方法,包含在此标签内部的代码最终会被放在由JSP引擎转换成的Servlet java文件的_JspServlet方法内部
因此此处不能定义方法,定义的变量为局部变量
<%!%>变量和方法定义的标签,变量在多个线程间共享,变量和方法只在当前页面有效,最好使用<%%>变量做为Servlet的成员变量,方法为成员方法
三、如何对变量进行输出
1)、使用out.write()或者out.print()方法
2)、使用<%=变量名或方法%>也能够直接对集合类型进行输出,不须要加分号
四、JSP动做指令
<jsp:include>表示动态的包含另外的一个文件,而且可使用<jsp:param>给包含的文件传递参数在被包含的文件中使用request.getParamenter()方法获取传递过来的参数
<jsp:include>指令每次都动态的加载页面,因此页面有修改,也能及时被从新编译在
<jsp:forword>指令用于在web容器内部进行Jsp页面的转发,由一个jsp转发到另一个jsp页面而且可使用jsp:param指令传递参数给转发到的页面,在转发的页面中经过 request.getParamenter()方法获取传递过来的参数;
<jsp:plugin>运用运行applet小应用程序,也可使用jsp:param传递参数
<jsp:useBean>能够引用Bean对象
1)、<jsp:uesBean id="" class=""/>id表示Bean对象的名称,在setProperty和getProperty中id用来表示Bean对象
2)、<jsp:setProperty name="" property="" value=""/>name表示哪一个Bean对象,引用uesBean里的id,Property表示bean对象中某个属性的名称,value即为该对对象 指定Property的值
3)、<jsp:getProperty name="" property=""/>而且setProperty和getProperty能够不在uesBean使用uesBean所产生的对象放在PageContext页面上下文中sql
五、请求状态响应
1)、正常响应status code(状态码):200
2)、重定向一个页面:302
3)、内部服务器错误(java代码异常):500 如何处理此错误? 使用page指令的errorPage属性
4)、请求的资源不存在:404
六、include指令与include动做比较数据库
include指令 jsp:include动做
语法格式 <%@include file=".."%> <jsp:include page="">
发生做用时间 页面转换期间 请求期间
包含的内容 文件的实际内容 页面的输出
转换成的servlet 一个servlet 两个servlet
编译时间 较慢 较快
执行时间 稍快 较慢数组
第四章 九大内置对象
session.setMaxInactiveInterval(10); // 用来设置session会话保持的最长时间,以秒为单位
response.setIntHeader("Refresh", 5); // 每隔5秒刷新本页面
response.setHeader("Refresh", "10;URL=http://www.baidu.com"); // 10秒后转到指定页面
out.print("body in bytes: " + request.getContentLength() + "<br />"); // 获取请求体部分的内容的长度,以byte为单位
out.print("content type: " + request.getContentType() + "<br />"); // 获取请求的内容类型
out.print("context path: " + request.getContextPath() + "<br />"); // 获取应用的路径信息
out.print("server ip: " + request.getLocalAddr() + "<br />"); // 服务器端IP
out.print("client" + request.getRemoteAddr() + "<br />"); // 获取浏览器端IP地址
out.print("http method: " + request.getMethod() + "<br />"); // 获取请求方法
out.print("query string: " + request.getQueryString() + "<br />"); // 获取查询字符串
out.print("request uri: " + request.getRequestURI() + "<br />"); // 获取URI(统一资源标识符)
out.print("request url: " + request.getRequestURL() + "<br />"); // 获取URL(统一资源定位符)
out.print("session id: " + request.getRequestedSessionId() + "<br />"); // 返回 客户端对应的session id
HttpSession sess = request.getSession(); // 由request获取HttpSession会话对象
out.print("session id:" + sess.getId());
out.getBufferSize()//缓冲区大小
out.getRemaining()//缓冲区剩余大小
out.isAutoFlush() //是否自动清空缓冲区
一、out隐含对象(输出对象)
直接用于在JSP页面输出内容
Javax.servlet.jsp.JspWriter(抽象类)继承制java.io.Writer
Jsp中的out对象最终被转换成servlet中的jspWriter对象
二、request隐含对象(请求对象)
用于获取Http请求相关信息,好比查询字符串,表单数据
javax.servlet.http.HttpServletRequest
三、page对象(页面对象)
表示对应单个JSP页面,servlet中声明以下:
final java.lang.Object page=this//page表示当前对象
四、PageContext(页面上下文)
finaljavax.servlet.jsp.pageContext pageContext;
页面上下文可使用setAttribute(String,String)设置当前页面所存储的信息,页面间不共享数据使用getAttribute(String)方法获取在页面上下文中设置的属性
五、session对象(会话对象)
会话对象能够保存用户的基本信息,如一个用户登陆到一个网站,该网站能够记录此用户的信息,而且用户信息在网站的全部页面间共享会话信息存储在服务器端(数据库,
文件系统,web容器自己实现的session存储)在A页面中使用session对象的setAttribute(String,String)方法存储数据,在其余页面中直接使用session.getAttribute (String)方法获取数据
javax.servlet.http.HttpSession session=null;
对Tomcatweb容器来讲,一个会话的持有时间为30分钟(会话超时时间,单位为分钟)
在conf目录的web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
六、application对象(应用程序对象)
整个应用都能使用,不限于某个用户,全部用户都能访问的数据应该放在application对象中一样有setAttribute(String String)和getAttribute(String)方法
final javax.servlet.ServletContext application
七、response对象(响应对象)
response、sendRedirect("url")重定向到某个页面
八、config对象(Servlet配置信息)
final javax.servlet.servletConfig config;为jsp页面配置Servlet
<servlet>
<servlet-name>configServlet</servlet-name>
<jsp-file>/config.jsp</jsp-file><!-- 由哪一个JSP页面转化成的servlet -->
<init-param> <!-- servlet初始化参数 -->
<param-name>configName</param-name>
<param-value>myValue</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!-- 在web容器启动时被初始化 -->
</servlet>
<servlet-mapping>
<servlet-name>configServlet</servlet-name>
<url-pattern>/config</url-pattern>
</servlet-mapping>
在config.jsp页面中由config对象的getInitParameter()获取初始化参数
九、exception对象(异常对象)
java.lang.Throwable exception =
若是想要使用exception对象,则使用该对象的页面(错误处理页)必须在page指令中声明isErrorPage="true"浏览器
十、隐含对象的做用范围
一、pageScope 只能做用于页面 page ,out,pageContext
二、reqyestScope 做用于Http请求,到了另一个页面,request失效 request由页面A转发到页面B,则request同时做用于页面A和页面B
三、SessionScope session做用域,用于全部页面 session
四、applicationScope 应用程序做用域,做用于整个应用程序的所用用户的所用页面 application
十一、重定向和转发的区别
转发:
web容器内部由一个JAP转发到另一个JSP页面,客户端地址栏URL不会改变request.getReauestDispatcher("url").forWord(request,response);转发时指定的URL前能够 加 "/"转发中url至关于ContextPath,转发能够用request的setAttribute给目标页面传递参数,目标页面也能够经过request.getAttribute()方法获取传递过来的参数
重定向:
实际是告诉浏览器由一个页面跳转到另外的一个页面,客户端浏览器地址栏会发生改变,显示出目标地址HTTP Response status Code:状态码为302response.sendRedirect ("url")重定向中,URL相对于ContextPath来重定向,因此不须要再URL前加"/"。
十二、Cookie
保存网站信息到客户端浏览器, 这个数据能够轻易地被获取到
JSP中,经过Cookie对象保存信息,key-value
经过response.addCookie(Cookie)添加cookie到浏览器端
经过request.getCookies()方法获取由客户端发送过来的Cookie对象数组,若是没有cookie,则返回 null
因此服务端须要进行null判断
1)cookie信息是在浏览器中的,但并非全部的浏览器都支持cookie功能;
2)cookie对象不能单独使用,必须和request对象或response对象结合使用;
3)不一样的浏览器中存储的cookie不是通用的。例如:IE存储的cookie只有IE本身使用;
4)存储在浏览器中的cookie对任何Web服务器都是开放的,因此写入的cookie可能被其它网页读取或覆盖掉tomcat
第五章 JavaBean
一、什么是JavaBean
JavaBean是一个普通的Java类,封装了get,set方法,而且能够增长一些通用的逻辑,增长了代码的重用性
1)、javabean是一个公开的(public)类
2)、javabean类必须有一个无参的构造方法
3)、javabean中变量一般称为属性
4)、取得或设定属性是,必须使用getXXX()和setXXX()方法。(java技术规范)安全
复习:
变量:
成员变量:
类变量:在类里面用static关键字修饰的变量,经过类或对象来 访问,一般使用类来访问,实例方法不能访问静态变量
实例变量:在类里面未用static关键字修饰的变量,只能经过对象来访问
局部变量:
在方法里定义的变量,必须进行初始化,只做用于该方法内部,若是方法内部有局部内部类使用方法里的某个变量,则该变量必须声明为final变量
方法:
成员方法:
静态方法
实例方法
构造方法:
2:jsp:uesBean
uesBean指定的id==>session.setAttribute("user",com.gs.bean.User user);
因此可使用removeAttribute方法移除page,request,session,application对应的java Bean组件
jsp:setProperty jsp:getProperty的自省机制
表单里的name与setProperty和getProperty所指定的bean对象的属性名称一致
在使用setProperty的时候,可使用*号匹配全部的属性
找到eclipse内置的tomcat的目录服务器
第六章 数据源和链接池
一、JNDI java Naming and Directory Interface(JAVA命名和目录服务接口)
经过一个指定的字符串就能找到指定的资源JNDI规范一般提供一个lookup方法经过资源字符串查找所指定的资源
二、DataSource 经过必定的配置信息告诉WEB容器,应用链接到哪个数据源
三、配置数据源和数据链接池
1)、在tomcat的conf目录下的context.xml文件中添加资源描述标记
<Resource name="jndi/datasource" 数据链接池资源的名称
auth="Container"认证类型,由容器提供认证
type="javax.sql.DataSource"表示此资源的类型是什么,javax.sql.Datasource表示为jdbc的数据源类型
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"
username="user_name"
password="user_password"
maxTotal="20"最大链接数
maxIdle="5"最大空闲链接数
maxWaitMillis="10000"最大等待时间
/>
备注:对于tomcat的来讲版本有差别,能够参考<ResourceParams>标记信息
对于6.0及以上的tomcat,只须要使用<Resource>标记,把相关的参数配置直接放在该标记的属性部分
对于5.0 6.0 7.0 来讲最大链接数是maxActive,最大等待时间是maxWillis
2)、在应用的web.xml文件中声明引用了哪一个资源
<resource-ref>
<description>JNDI JDBC DataSource</description>
<res-ref-name>jndi/datasource<res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<resource-ref>
3)、使用Context去获取配置的jndi资源
javax.naming.Context context = new javax.naming.InitialContext();
Object obj =context.lookup("javax:comp/env/jndi/datasource");
javax.sql.DataSource ds=(javax.sql.DataSource)obj;
javax.sql.Connection conn=ds.getConnection();
四、数据库链接池对数据库相关对象的关闭操做
rs.close(); conn.close();
以上的关闭操做,是交由Tomcat容器来作的,conn.close并无真正的把创建好的数据库链接关闭,而是把此数据库链接放回到数
第七章 过滤器和监听器
一、什么是过滤器?
过滤器是在某个URL以前所须要作的事情,URL多是某个servlet所对应的,也有多是jsp页面
特色:
声明式的 动态的 灵活的 模块化的 可移植的 可重用的 透明的
用处:
统一认证处理
对用户的请求作检查,作更精确的记录
监听或对用户所传递的参数作前置处理,如防止数据隐藏码攻击
改变图像文件的格式
对响应作编码的动做
对响应作压缩处理
对呀XML的输出使用xslt来转换
二、过滤器的写法
1)、自定义类,实现javax.servlet.Filter接口
2)、分别实现init(FilterConfig)doFilter(ServletRequest ,ServletResponse,FilterChain) destroy()
3)、在web.xml中配置该filter 告诉web容器存在这么一个filter,可使用<init-param>配置filter的初始化参数,在Filter代码中 用FilterConfigd对象来获取初始化参数
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
告诉web容器此filter对那个URL进行过滤
<fliter-mapping>
<filter-name></filter-name>
<serlvet-name></servlet-name>
<url-pattern></url-pattern>
<filter-mapping>
三、Filter的-生命周期
*1)、init(FilterConfig)在tomcat容器启动时就会对过滤器进行初始化
2)、在执行其过滤的url时,先初始化该URL所对应的servlet
据库链接池
备注:若是想让eclipse直接使用数据链接池的方式运行应用,则把context.xml文件copy到WebContent目录下的META-INF目录