jsp基础速成精华讲解
一.Tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器。默认端口号是80可以不用写端口号。
1.tomcat目录结构
Ø/bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件
Ø/conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是tomcat-users.xml、server.xml和 web.xml
Ø/doc:存放Tomcat文档
Ø/server:包含三个子目录:classes、lib和webapps
Ø/server/lib:存放Tomcat服务器所需的各种JAR文件
Ø/server/webapps:存放Tomcat自带的两个WEB应用admin应用和manager应用
Ø/common/lib:存放Tomcat服务器以及所有web应用都可以访问的jar文件
Ø/shared/lib:存放所有web应用都可以访问的jar文件(但是不能被Tomcat服务器访问)
Ø/logs:存放Tomcat执行时的日志文件
Ø/src:存放Tomcat的源代码
Ø/webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录
Ø/work:存放JSP编译后产生的class文件
2.Tomcat6.0配置虚拟目录:
Ø设虚拟目录"site",通过 http://localhost:8080/site 访问物理路径 D:\site 文件夹里面的内容。设置过程如下:
Ø打开Tomcat6.0\conf\server.xml 文件,在<Host> 和 </Host> 之间加入:
<Context path= " /site " docBase= " d:\site "></Context>
path= " /site " 是虚拟目录的名称
docBase= " d:\site " 为物理路径
Ø如果虚拟目录和真实目录webapps下面都有site这个文件,首先访问虚拟目录。
3.Tomcat6.0配置目录浏览功能
ØTomcat默认是关闭了目录浏览功能的,这个主要是处于安全性的考虑。要是虚拟目录下没有默认首页,那这个目录下的文件列表就有可能泄露给别人了。 这个是个配置选项,你可以手动打开,开发时有用,但是生产环境就最好关闭。配置选项在conf/web.xml中找到。
<servlet>
<servlet-name>default</servlet-name>。。。</servlet>
将其中的
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
设置改为true即可解决此问题
4.Tomcat6.0配置基于端口号的虚拟主机
Tomcat6.0\conf\server.xml 文件对于架构设计模型的实现如下:
<Service>
<Connectorport=…>
<Engine>
<Host>
<Context/>
</Host>
</Engine>
</Service>
操作: 当配置基于端口号的虚拟主机时,需要增加一个新的Service服务,既copy整个<Service>标签组,并修改Connector中的port所指端口,即可实现多主机配置。
5.Tomcat6.0配置基于主机名的虚拟主机
Tomcat6.0\conf\server.xml 文件对于架构设计模型的实现如下:
<Service>
<Connectorport=…>
<Engine>
<Hostname= appbase=>
<Context/>
</Host>
</Engine>
</Service>
操作: 当配置基于主机名的虚拟主机时,需要增加多个新的Host主机设置,既copy整个<Host>标签组,并修改其中的name所指主机名,appbase所指虚拟目录(基准路径),即可实现多主机配置。
注意:需要有DNS或hosts支持,如修订C:\WINDOWS\system32\drivers\etc目录下的hosts文件,增加更多主机名。
二.Servlet
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
1.Servlet三个要素:
Ø必须继承自HttpServlet?
Ø必须实现doGet()或者doPost() --> 生命周期三阶段 init --》service --》destory
Ø必须在web.xml中配置Servlet
<servlet>
<servlet-name> </servlet-name>
<servlet-class> </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> </servlet-name>
<url-pattern> </url-pattern>
</servelt-mapping>
Servlet必须实现javax.servlet.Servlet 接口
通过扩展这两个类实现:
javax.servlet.GenericServlet //跨协议的Servlet
javax.servlet.HttpServlet //HTTP Servlet
2.Servlet.http包结构:
3.HttpServeltRequest(请求对象):
ØgetParameter():获得表单元素的值
ØgetParameterValues():获得表单多元素的数组值
ØgetAttribute():获得request范围中的属性值
ØsetAttribute():设置reqeust范围中的属性值
ØremoveAttribute():删除reqeust范围中的属性值
ØsetCharacterEncoding():设置字符编码
Ø*getSession(boolean create):获得当前session,create为true,当当前没有session时,会创建新的session
Øcreate为false,当当前没有session时,会返回null
4.HttpSerletResponse(响应对象):
ØsendRedirect():外部跳转
ØgetWriter():获得输出流对象
ØsetContentType("text/html;charset=utf-8"):设置相应内容格式和编码
ØsetCharacterEncoding():设置字符编码
ØsetHeader("refresh","2;url=index.jsp"):重新定义请求头
Ø内部跳转:
LoginServlet
request.getRequestDispatcher("index.jsp").forward(request,resposne);
Ø外部跳转(重定向):
response.sendRedirect("index.jsp");
Ø内部跳转(请求转发)和外部跳转(重定向)的区别?总结归纳要点:
1、内部跳转的时候实际上是通过服务器端将请求转发到另外的页面或者servlet中,这个时候跳转到的目标页面或者servlet可以获取到请求对象,也可以获取到请求中的属性和参数。而外部跳转的时候实际上是第一次请求后,服务器端向客户端发送了一个指令,让客户端再次请求了一次服务器端,这个时候服务器第二次拿到的request对象已经不是第一次请求的request对象了,所以无法获取到第一次请求里的参数和属性。
2、内部跳转的url地址栏不会发生变化,外部跳转url则会发生变化。
3、内部跳转无法跳转到工程以外的jsp或者servlet,外部跳转则可以。内部跳转一次请求和一次响应,request信息不丢失 ,外部跳转是两次请求和两次响应
ØServletContext:Servlet上下文对象(application)--》 在servlet中使用getServletContext(),取得application对象
Ø它是一个公共区域,可以被所有的客户端共享
ØsetAttribute():向公共区域里放入数据
ØgetAttribute():从公共区域里取数据
ØgetInitParameter(name):获取web.xml中的设置的参数
5.四个标准范围:
page request, session, ServletContext
Ø共同点:都有setAttribute(), getAttribute()
Ø区别:范围不同,page < request < session <servletContext
6.四种会话跟踪方式:
ØSession
HttpSession session =request.getSession();
session.setAttribute("name","zhangsan");
session.setAttribute("pwd","aaa");
String name = (String) session.getAttribute("name");
Øcookie:
//创建Cookie
Cookie cookie = newCookie("name", "zhangsan");
//设置Cookie的超时时间
cookie.setMaxAge(24 * 60 * 60 *60);
//把Cookie发送到客户端
response.addCookie(cookie);
//得到客户端发送的Cookie
Cookie [] cookies =request.getCookies();
for(int i=0; i <cookies.length;i++) {
Cookie temp = cookies[i];
String key = temp.getName();
String value = temp.getValue();
}
Ø隐藏表单域
<input type="hidden"name="name" value="zhangsan" />
request.getParameter("name");
ØUrl重写
问号传参
LoginServlet?username=zhangsan&pwd=123
String name =request.getParameter("username");
String pwd=request.getPareameter("pwd");
7.服务器上的五大对象
request,response, session, servletContext,pageContext
三.Jsp:Java Server Page
JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
1.页面构成
Ø1.静态内容:html
Ø2.编译指令:page, include, taglib:
<%@ 指令名 属性1="属性值1"属性2="属性值2" %>
Ø3.表达式: <%=表达式%> 表达式没有;结尾!!!
Ø4.Scriptlet<% Java代码 %>合法的java都可以使用
Ø5.声明: <%! %>:成员变量和方法包括 变量声明和方法声明
Ø6.动作: <jsp:动作名 属性="属性值"></jsp:动作名> 本质上,是xml标签,
<jsp:include> --> 与 编译指令include区别
<jsp:forward> --> 属于内部跳转
<jsp:useBean> --> id\class\scope
<jsp:setProperty> --> 三种设置属性值的方式
<jsp:getProperty> --> 取值操作,可以被${}取代
Ø7.注释:
客户端看不到的: <%-- --%> JSP注释
客户端可以看到的: <!-- --> HTML注释
2.Jsp的执行过程:
1.转换:Jsp--->Servlet
2.编译:Servlet---->.class
3.执行:.class
第一次访问jsp的时候响应速度较慢,后面请求时响应速度快
3.脚本:
表达式:<%= %>
Scriptlet: <% %>
声明:<%! %>
指令:
page:language, import, errorPage, isErrorpage(session isELIgnored isThreadSafe)
include:file
taglib:uri:指定标签库描述符的路径 prefix:指定标签的前缀
4.隐式(九个内置)对象:
分类:
1.输入和输出对象:request(HttpServletRequest),
response(HttpServletResponse),
out(JspWriter), servlet中的out是PrintWriter
2.作用域通信对象:pageContext, request,
session(HttpSession),
application(ServletContext)
3.Servlet对象:page(this),config(ServletConfig)
4.错误对象:exception
5.web.xml文件参数的三种读取方式
1、Servlet初始化参数
<servlet>
<servlet-name>EmpServlet</servlet-name>
<servlet-class>com.cissst.servlet.EmpServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>tomcat</param-value>
</init-param>
</servlet>
调用servlet的getInitParameter("username");
2、context上下文参数
<context-param>
<param-name>password</param-name>
<param-value>12345</param-value>
</context-param>
调用servlet的getServletContext().getInitParameter("password");
3、资源注入
前提:在tomcat6以上使用
<env-entry>
<env-entry-name>message</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>9527</env-entry-value>
</env-entry>
private @Resource(name="message")int mess;
或
@Resource(name="message")
private int mess;
6.JavaBean:
一个标准的JavaBean有三个条件
1.具有不带参数的公共的构造方法
2.具有setter和getter方法
3.公有的类、私有属性
Jsp中的标准动作:
1.useBean:创建JavaBean的一个实例或定为一个已经存在的javabean
<jsp:useBean id="stu"class="com.westaccp.test.Student"scope="page/session/application/request" />
2.setProperty:给JavaBean的属性赋值
<jsp:setProperty name="stu"property="stuName" value="zhangsan" />
<jsp:setProperty name="stu"property="stuName" param="txtName" />
value和param不能同时使用
偷懒的方法:<jsp:setProperty name="stu" property="*" />
这个时候需要注意的是,表单元素的名字必须和JavaBean的属性值
一模一样
3.getProperty:获得JvaBean的属性值
<jsp:getProperty name="stu"property="stuName" />
4.forward:内部跳转,相当于request.getRequestDispatcher().forward(request,response);
<jsp:forward page="index.jsp"/>
5.include:包含
<jsp:includepage="header.jsp"/>
7.表达式语言:
EL: Expression Language
语法格式:${表达式 }
表示式= 运算符 + 操作数
运算符:跟Java比较,多了一个empty, 少了一个赋值运算符
${empty ""} : true
${empty null} :true
empty 对于空的数组和集合,返回值也为true
操作数:
-->常量:布尔型(true/false), 整型,浮点型, 字符串(可以用""), Null
-->变量:
1.指的是放在四个标准范围里的属性(page, request, session, application)
2.在编准范围内的搜索顺序:page-->request--->session--->application
3.怎么取得变量值:点运算符., 还以用[]
<%
request.setAttribute("name","lisi");
%>
${requestScope.name}
或者
${requestScope["name"]}
-->隐式对象
常用:pageScoperequestScope sessionScope applicationScope param paramValue都是EL内置对象
例:${requestScope.user.username}--》表示从request的attribute中找到user的Javabean,取出user中的username属性
例:${param.password}--> 表示从提交参数中获取password的值
1.pageContext:通过它可以访问request, session, servletContext
2.跟范围由关的:pageScope, requestScope, sessionScope, applicationScope
3.跟输入有关的:param, paramValues
4.其他的:header,cookie, headervalues,
EL表达式适用的场合:
1.可以在静态文本中使用
2.与自定义标签结合使用
3.和JavaBean结合使用
<jsp:userBean id="stu"class="com.westaccp.test.Student" scope="session" />
<jsp:setProperty name="stu"property="stuName" value="hello" />
${stu.stuName}
8.自定义标签:
1.标签处理程序实现
--->实现:继承自BodyTagSupport或者TagSupport
一般会重写doStartTag(),doEndTag(), doAfterBody()
--->描述:在标签库描述符文件中描述(.tld)
<taglib>
<tlib-version>1.0 </tlib-version>
<jsp-version>2.0 </jsp-version>
<short-name>simpletag</short-name>
<tag>
<name>showbody </name>
<tag-class>com.westaccp.test.ShowBodyTag</tag-class>
<body-content>empty/jsp</body-content>
<attribute>
<name>color </name>
</attribute>
</tag>
</taglib>
--->使用:<%@ taglib uri="WEB-INF/mytag.tld" prefix="my" %>
<my:showbody />
2.标签文件
--->实现和描述
在.tag文件中实现
设置主体内容: <%@ body-content="empty/scriptless" %>
设置属性:<%@ attribute name="name" required="true"rtexprvalue="true" %>
有主体内容:<jsp:doBody scope="session" var="theBody" />
<%
String body = (String)session.getAttribute("theBody");
%>
--->使用
WEB-INF/tags/sayhello.tag
<%@ taglibtagdir="/WEB-INF/tags/" prefix="you" %>
<you:sayhello />
9.标准标签库:
1.核心标签库
-->通用:
set: <c:set var=""value="" scope="" />
out: <c:out value="" />
remove: <c:remove var=""scope="" />
catch: <c:catch></c:catch>
-->条件:
if: <c:if test="">.....</c:if>
choose: <c:choose>
<c:when test="">...</c:when>
<c:when test="">...</c:when>
<c:when test="">...</c:when>
.....
<c:otherwise>... </otherwise>
</c:choose>
-->迭代:
forEach: <c:forEach var=""items="" varStatus="" begin=""end=""> --》 可以循环指定的步数或者遍历一个数组或集合(items="${}")
forTokens: <c:forTokens var=""items="" delim=",;|"> </foTodens>
例:Java,C#;SQL|C
2.I18N与格式化标签库
-->setLocale:设置本地区域
-->bundle:设置资源包
-->setBundle:设置资源包
-->message:输出消息
3.SQL标签库
-->setDataSource:设置数据源,用于获得与数据库的连接
-->query:执行查询
-->update:执行增,删,改
-->transaction:事务
-->param:参数
4.XML标签库
10.过滤器filter:
生命周期:
1.实例化:
2.初始化:init()
3.过滤:doFilter()
4.销毁:destroy()
5.不可用
配置:
<filter>
<filter-name> </filter-name>
<filter-class> </filter-class>
</filter>
<filter-mapping>
<filter-name> </filter-name>
<url-pattern> </url-pattern>
</filter-mapping>
几个重要的接口:
1.Filter:init(), doFilter(), destroy()
2.FilterChain: doFilter(request, response)
3.FilterConfig:getFilterName(),getInitParameter(),
过滤器链:--->1--->2--->3--->Servlet请求
<----1 <---2 <---3 <--- 响应
11.监听器Listener
分为两种:三个范围创建、销毁监听以及 三个范围中的属性创建、移除监听
1、三个范围创建、销毁监听 HttpSessionListener\ServletContextListener\ServletRequestListener
2、三个范围中的属性创建、移除监听HttpSessionAttributeListener\ServletContextAttributeListener\ServletRequestAttributeListener
监听器的web.xml配置
位置在filter之下,servlet之上
<listener>
<listener-class>
xxx.ListenerTest
</listener-class>
</listener>
web.xml中的JSP配置
对JSP本身可以和servlet一样等同配置,但servlet-class应该改为jsp-file,如
<servlet>
<servlet-name>EmpServlet</servlet-name>
<jsp-file>/emp.jsp</jsp-file>
</servlet>
servlet-mapping中可以使用多映射路径
<servlet-mapping>
<servlet-name>EmpServlet</servlet-name>
<url-pattern>/emp</url-pattern>
<url-pattern>/emp.html</url-pattern>
<url-pattern>/emp.php</url-pattern>
</servlet-mapping>
四.MVC设计模式
1.ModelI:jsp+JavaBean,jsp负责页面数据的获取和显示,javabean负责数据的业务逻辑处理
2.ModelII:jsp+Servlet+JavaBean+DAO jsp负责页面数据的获取和显示,serlvet负责业务逻辑的调用和页面显示数据的封转、跳转 javabean+DAO负责数据的业务逻辑处理
jsp---view
servlet---control
javabean+DAO---model
MVC:
M--Model:模型:访问后台数据库
V--view:视图:展示
C--control:控制器:控制程序流程
ModelII和MVC的关系:
MVC是一种设计模式,ModelII它是MVC的一种具体的实现
一、XML(Extensible Markup Language)扩展标记语言
1. 作用:描述数据,存储数据,交换数据
2. 格式:
<?xmlversion=”1.0” encoding=”GBK”?><!—xml声明注释 -->
<root>
<row>
<empno>7369</empno>
<ename>SMITH</ename>
</row>
</root>
3. 数据岛
<xml id=”emp”src=”emp.xml”/> 载入xml文件
4. DTD(Data Type Definition)
作用:限定XML的内容
分类(内部DTD,外部DTD,公用DTD)
子元素:<!DOCTYPE staff [<!ELEMENT staff any>
<!ELEMENTempno (#PCDATA)>]>
重复元素:+ * ? | (),无
5. XML文件解析(五种方法)
SAXReader sr = newSAXReader();
Document doc =sr.read(“emp.xml”);
Element el_root =doc.getRootElement();
1. Iteratorit = el_root.elementIterator();
2. Listrowlist = el_root.elements(“row”);
3. doc.accept(newVistor(){});
4. Visitorvt = new VisitorSupport(){};
doc.accept();
5.List list = doc.selectNodes(“ROWDATA/ROW/ENAME”);
6. XML文件的写入、删除、更新
用到的方法主要有:
Document.createDocument(); //建立XML文档
doc.addElement(“”);
newFileWriter(“url”);
Output.createPrettyPrint();
setEncoding(“GBK”);
newXMLWriter();
二、JDBC(java database connectivity) java数据库连接
1. JDBC是Java调用相关数据库的API,它独立于数据库
2.java 调用数据库的步骤:(主要有四步)
Class.forName(oracle.jdbc.driver.OracleDriver); //加载驱动
Connection con =DriverManager.getConnection(url,username,password); //建立连接
Statement st = con.createStatement(); //建立sql分析器
ResultSet rs = st.executeQuery(“select *from emp”); //执行sql语句分析
3. JDBC 与ODBC的比较
1.连接驱动方式:
JDBC :有三种驱动方式,OCI NET8,thin(瘦客户端的连接方式,客户端只需加载几个专用jar包),KPR8方式
ODBC:ODBC桥的方式,必须在windows环境下安装驱动程序,创建数据源
2. 加载驱动的代码:
JDBC:oracle.java.driver.OracleDriver
ODBC:sun.jdbc.ocbc.jdbcodbcDriver
3. 连接数据库的url
JDBC:jdbc:oracle.thin:@127.0.0.1:1521:ORCL
ODBC:jdbc:odbc:数据源名称
4. 几种sql分析器的比较:
Statement:普通分析器
PreparedStatement:预编译的sql分析器(效率高),可以使用通配符”?”
CallableStatement:Java中专门用来调用过程和函数的分析器
6. 事务处理:
con.setAutoCommit(false);
con.commit();
con.rollback();
注:多个会话同时开启时:只对Update挂起,insert和delete不挂起
7. Connection的三种连接方式:滚动,并发只读,并发更新
8. 使用结果集ResultSet修改、插入、删除、查询指定记录
插入:rs.absolute(8);
rs.movetoInsertRow();
rs.updateInt(1,1234);
rs.uptadeString(2,”Lee”);
rs.insertRow();
rs.movetoCurrentRow();
删除: rs.absolute(3);
rs.deleteRow();
修改: rs.absolute(5);
rs.updateInt(8888);
rs.updateRow();
9.使用JDBC调用函数、过程、包、游标
三、HTML基础
1. 作用:显示信息。
HTML是静态的,IE可以直接解析,而JSP是动态的,需要服务器解析
2. HTML基本结构:
<HTML>
<HEAD></HEAD>
<BODY></BODY>
</HTML>
3. HTML主要元素(控件)
文本:<input type=”text” name=”username”>
密码框:<input type=”password” name=”pwd”>
单选框:<input type=”radio” name=”sex”>
多选框:<input type=”checkbox” name=”favor”>
文本输入框:<input type=”file” name=”myfile”>
隐藏域:<input type=”hidden” name=”user” value=”username”>
多行文本框:<textarea rows=”10”cols=”30”></textarea>
列表框:<select><option><option><select>
提交按钮:<input type=”submit” value=”提交”>
重置按钮:<input type=”reset” value=”重置”>
普通按钮:<input type=”button” value=”点击” οnclick=”window.close()”>
Form表单:<form action=”A.html”method=”post”></form>
图片标签:<img src=”” height =”” width=””>
Meta标记:<meta http-equiv=”refresh”content=”2,url=”http://www.126.com””>
Div标记:<div align=”center”style=””></div> 另起一行显示
Span标记:<span></span> 直接在上一行后面显示
跑马灯:<marqueebehavior=”scroll/slide/alternate” direction=”” scrollmout=””>
预格式:<pre><pre>
字段集:<fieldset><legend>标题<legend></fieldset>
框架集:<frameset><framecols=”30%,*”><frameset>
超链接:<a href=””></a>
网页内嵌:<iframe>
视频:<embed src=””> <img dynsrc=”” start=”moveorver”>
背景音乐:<bgsound src=””>
四、Javascript基础(一种脚本语言)
1. 简介:Javascript是一种弱类型的语言,是基于对象,基于事件的。
2. Javascript语法:
它的变量都定义为var类型,它的语法检验很弱,区分大小写,它的内建对象和内建函数都是小写。
数组:new Array(8);
循环:while,for,
判断:if ,swich case
常用内置对象:
Window:alert,confirm,prompt,open,print,close
Document:prompt,all(“”).style.display
Location: href ,replace(不可回退)
history
事件: onclick,ondblclick,
onload,onunload(这两个只在body中使用)
onmouseover,onmouseout,
oncommit(在form中使用)
onchange(用在Select中)
onselect(用在文本的选中)
内置HTML:innerHTML(用于改变元素的源代码)
网页内嵌:<iframe id=”message” src=”sports.html”>
document.all(“message”).src=”sports.html”
五、JSP
1. 简介:JSP是动态代码,必须有服务器来解析。需要整合myEclipse和TomCat。发布的只是webroot下的内容。JSP第一次执行时在服务器端由引擎转换为Servlet代码,最终编译成class文件。
2. JSP语法:
声明:<%! %>声明变量或函数,是公有的,全局的
输出:<%= %>
指令:page,include,taglib
<%@ pageimport=”” contentType=”text/html;charset=GBK”%>
3. JSP应用:
设置错误页:
errorPage=”error.jsp”
isErrorPage=”true” 与out.println(exception.getMessage()) 合用
文件的静态引入:
<%@include file=”A.jsp”%> 直接拷贝执行
文件的动态引入:
<jsp:includeflush=”true” page=”A.jsp” ></jsp:include>
页面转向:
<jsp:forward></jsp:forword>
<jsp:include></jsp:include>
JSP内置对象:(setAttribute() 临时存储数据,getAttribute()获取数据)
pageContext 仅当前页面有效
request 请求页面有效
response 对整个IE窗口有效
application
4. 参数传递:
1)超链接方式:<ahref=”A.jsp?username=Lee&pwd=888”></a>
2)Form提交:post可传递大数据
3)Jsp:forward 或jsp:include方式
4)Javascript方式:loacation.href 或location.replace(“A.jsp?.....”)
5. request的使用:
request.getContextPath();
request.getRealPath();
request.getParameterValues();
request.setCharacterEncoding(“GBK”);
request.getRequestDispatcher(“A.jsp”).forward(request,response);
6. response的使用:(response 是服务器端得响应)
sendError();
setContentType(“text/html;charset=GBK”);
sendRedirect() 页面重定向,相当于location.replace()
注:sendRedirect重定向后,request不再是原来的request
六、JavaBean
1. javaBean将jsp中的Java代码抽取出来,减小代码耦合,提高内聚。
2. 组件:做好的一个软件模块,常用组件有:COM,JavaBean,EJB,CORBA
3. 写JavaBean的四个要求:
A.无参的构造函数
B.在一个包下
C.应该没有public类型的属性
D.对属性的访问,通过setter.getter来访问
4. 应用:
<jsp:useBeanid=”emp” class=”com.sun.demo.Emp” scope=”request”>
<jsp:setProperty name=”emp”property=”name” value=”tiger”>
</jsp:useBean>
以上是javaBean的生存周期,效果相当于:
Emp e = new Emp();
Request.setAttribute(“emp”,e);
<jsp:getPropertyname=”emp” property=”name”>
七、Servlet
1. 简介:servlet是位于服务器上的Java应用程序。继承HttpServlet类,必须在web.xml中注册。Web.xml 是部署描述文件。服务器在启动时,根据web.xml中的配置加载Servlet。
2. 作用:作为MVC模式中的控制层,用作控制转发。
3. Servlet生命周期:
init() 第一次访问时调用,只调一次
service()每次访问都调用,决定调用doGet()还是doPost()
destroy()服务器关闭时调用
4. web.xml 部署描述文件的配置:
<servlet>
<servlet-name>
<servlet-class>
<init-param> 初始化参数
<param-name>
</init-param>
</servlet>
<servlet-maping>
<servlet-name>
<url-pattern>
</servlet-maping>
<welcome-file-list> 设置欢迎页面
<welcome-file>
</welcome-file-list>
<error-page> 设置错误页
<error-code>(或exception-type)
<location>
</error-page>
<session-config> 设置session的有效生命
<session-timeout>(以分钟为单位)
</session-config>
5. Servlet访问:(与JSP类似)
6. 过滤器:
作用:权限校验,日志记录,图片转换,数据加密等
实现:实现Filter接口,重写doFilter方法,传递过滤链,放请求过去chain.doFilter(),在web.xml中注册过滤器。
生存周期: init()服务器启动是执行,只调用一次
doFilter()
destroy()
每当访问网页,过滤器自动执行。
7. 监听器:
作用:监听客户请求和服务器操作。可以自动激发一些操作,如监听在线用户数量(即做访问统计)。靠事件触发:如setAttribute();
实现:实现Listener接口,在web.xml中注册
常用接口:
ServletContextAttributeListener
ServletContextListener
HttpSessionAttributeListener
HttpSessionListener
8. 字符集转换问题:
contentType=”text/html;charset=GBK”
request.setCharacterEncoding(“GBK”);
response.setContentType(”text/html;charset=GBK”);
9. 编写安全的Servlet(避免数据共享)
10. 自动加载Servlet?
在web.xml 文件中添加<load-on-startup>配置节点
八、EL表达式
1.EL是Jsp中使用的表达式语言(只在Jsp中使用)
2.使用方法:${变量名称}
3.作用:访问存储对象,简化JavaBean操作、集合操作、Map操作
4.注意:EL只能用于提取数据
5.EL访问JavaBean:${emp.empno}
6.EL访问集合:${list[3].ename}
7.EL访问Map:${map.username}
8.访问特定作用域中的值,如:${applicationScope.username}
9.获取参数:${param.username} ,${paramvalues[1].username}