因为太长时间没有做java web开发了,所以写这边随笔用来简单回顾一下jsp/java web的相关知识
1.tomcat中server.xml,<Context>表示一个web应用上下文路径;
docBase:指明一个Web应用所在的物理文件夹名
path:定义Web应用的上下文路径名,上下文路径第1个字符一般为“/”。
reloadable:此属性取值为“true”时,表示让Catalina监控Web应用中WEB-INF\classes文件夹和WEB-INF\lib文件夹下文件的变化
2.tomcat默认的虚拟主机是localhost,它默认的Web应用发布文件夹是webapps。在此文件夹下发布的Web应用通过URL即可直接访问,不需要在<Context>中进行配置
3.Servlet将java代码与网页设计混合写在一起,不利于维护。JSP网页版面的设计与维护,比Servlet要直观和容易。JSP页面最终会被JSP服务器编译成一个Servlet程序来运行。
4.JSP采用“先编译后执行”的工作方式。一个JSP网页首次被访问时,Web服务器执行编译操作.(多线程运行)
5.<% 符合Java语言的Java语句 %>
6.jsp执行过程:
servlet
request->*.jsp->jsp parser->*.java->jsdk(servlet分析器)->*.class->执行->response
7.html注释<!-- --> jsp注释<%-- --%>
jsp声明<%!...%>,声明后的变量,方法或类都是jsp编译后的Servlet的类内成员
8.Tomcat把<% %>标记内的Java代码段放在Servlet实现类 _jspService()方法的try{}内,所以在<%%>内定义的变量属于局部变量,并且作用范围仅限于try{}内。如果有多个<% %>标记,则按出现的先后顺序转译到try{}内。
9.jsp表达式<%= expression %>,编译后Servlet为:out.println(expression);
10.jsp指令元素<%@ 指令元素 属性="值" %>,主要包括三个:include、page和taglib;主要供JSP容器使用,为JSP容器提供相关的页面属性信息,用于指示JSP容器如何正确地翻译代码,或者执行特定的操作
include:文件包含,是在JSP容器把JSP网页翻译成Servlet程序时,将指定文本文件的内容嵌入Servlet程序中,替换include指令
<%@ include file="" %> 静态绑定
page:用于设置当前JSP页面的属性
默认情况下已经被加入到当前JSP页面的类,包括java.lang.*;、java.servlet.*;、java.servlet.jsp.*; java.servlet.http.*;
isThreadSafe,表示生成的servlet是否是线程安全的;如果true的话,表示线程安全,JSP容器会以多线程方式运行JSP页面 www.2cto.com
11.jsp动作组件:JSP动作组件是一些XML语法格式的标记,被用来控制Web容器的行为
<jsp:include>动态包含
<jsp:forward>使程序从当前页面跳转到另一个目标页面运行,浏览器地址栏不会发生任何变化;forward动作语句后的代码不能执
行(已经带着request请求跳转到其他页面了)
<jsp:param>,用来用于传递参数信息 www.2cto.com
<jsp:plugin>,插入一个applet或Bean
< jsp:setProperty>:设置JavaBean的属性
< jsp:getProperty>:输出某个JavaBean的属性
< jsp:useBean>:寻找或者实例化一个JavaBean
12 jsp隐含对象
简化程序设计,JSP规范定义了常用的8个隐含对象(implicit objects),这些隐含对象不需要在JSP页面中用new关键字来创建,而是
由Servlet容器来创建与管理,并传递给JSP页面的Servlet实现类使用。
out(JspWriter),requeset(HttpServletRequest),response(HttpServletResponse),session(HttpSession),application(ServletContext),
exception(Throwable),config(ServletConfig),page(Object),pageContext(PageContext)
out.print()/out.println();out.write()?PrintWriter?
request.getParameter()/getParameterNames()/getParameterValues()/
两个JSP/Servlet程序间要交换数据时,可通过request作用范围变量来实现(getAttribute/setAttribute)
[forward方式跳转,会传递request,超链接与在浏览器地址栏输入该页面地址的访问方式一样,都是重新发送一个请求到链接页面]
getRequestDispatcher("''),转发器,获得目标资源的转发器,通过转发器将当前Servlet程序的request和response对象转发给目标资源,并跳转至目标资源上运行程序,这样,目标资源就可通过request对象读取上一资源传递给它的request属性
removeAttribute()/setCharacterEncoding()/getProtocol/getRemoteAddr()/
response.flushBuffer()/setBufferSize()/getWriter(PrintWriter)/setContentType()/setCharacterEncoding()/sendError()/setHeader()/sendRedirect("")/
response通过文件输出流实现下载
application对象被同一个上下文(同一个web应用)中的所有jsp/servlet程序共享,tomcat服务器开启的时候即被创建;
application访问web.xml中配置的<Context-param>/getInitParameter("")/attribute相关方法/log()/
config常用于给一个Servlet程序传送初始化参数
exception,JSP页面在运行时发生异常,系统会生成一个异常对象
page对象表示“当前”Servlet程序对象,类似于Java中的“this”关键字
pageContext获取其他隐含对象/转发跳转或包含
13 会话跟踪-
Cookie/response.addCookie()/request.getCookies()/
URL重写实现参数传递/隐藏表单域实现参数传递/
HTTP协议是一种无状态的协议,客户端每次打开一个Web 页面,它就会与服务器建立一个新的连接,发送一个新的请求到服务器,服务器处理客户端的请求,返回响应到客户端,并关闭与客户端建立的连接。当客户端发起新的请求,那么它重新与服务器建立连接,因此服务器并不记录关于客户的任何信息。
session-session会话,通常把从登录进入系统到注销退出系统之间所经历的时间,称为一次session通信周期;jsp中的Session会话:一次会话由客户打开一个浏览器开始到关闭浏览器或退出会话结束,用户重新打开1个浏览器并重新输入url,或访问2个web应用都是开启不同的会话;session隐含对象由Web服务器创建,并存储在服务器端;一次会话会创建一个session对象,在一次会话期 间,web应用内的所有程序共享一个session对象
attribute相关方法/isNew()/getId()/invalidate()/setMaxInactiveInterval()/
14 Servlet/ServletConfig/->GenericServlet->HttpServlet
servlet工作流程-(1)客户机将请求发送到服务器。
(2)服务器上的Web容器实例化Servlet。
(3)Web容器将请求信息发送到 Servlet。
(4)Servlet 创建一个响应,并将其返回到Web容器。
(5)Web容器将响应发回客户机。
(6)服务器关闭或Servlet空闲时间超过一定限度时,调用destory()方法退出。
生命周期-创建实例->init()->service()->destroy()
init()-两种方式init()/init(ServletConfig config){super.init(config)}
sevice(HttpServletRequest req,HttpServletResponse resp)
Servlet体系结构是建立在Java多线程机制之上的,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。对于Servet中成员变量,并发访问时需要采取线程同步的措施确保线程安全
destroy()-服务器删除servlet实例调用,程序员可以覆写它完成,关闭数据库连接等清理工作
15.Servlet API-javax.servlet和javax.servlet.http
javax.servlet.GenericServlet--独立于协议
javax.servlet.HttpServlet,--嵌入了对Http协议的支持
把数据传递给客户端
在Servlet中,可以通过直接向输出流写入数据来生成HTML页面;使用PrintWriter把数据发送回客户端
PrinteWriter out=response.getWriter();out.println(“<HTML>Inside HTML</HTML>”);
在开始进行任何输出之前,必须使用setContentType()方法指定MIME类型
response.setContentType(“text/html,charset=gb2312”);
16.访问servlet,需要在web.xml进行配置
<servlet>
<servlet-name>First</servlet-name>
<servlet-class>com.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>First</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
17.WEB-INF\classes目录存放Servlet类文件
WEB-INF\lib目录存放Web应用程序所使用的Java库文件(JAR文件)
18.web.xml中<servlet>定义的<init-param>可以通过servlet的getInitParameter()方法或者getServletConfig().getInitParameter()方法
19.过滤器Filter链式
request->filter1->filter2....->目标资源
response <- ..filter<-
javax.servlet.Filte接口
init()
doFilter(ServletRequest request, ServletResponse response,FilterChain chain)过滤器的业务逻辑代码在doFilter()方法内实现
{ ...程序段1...
chain.doFilter(request, response);
...程序段2...
}
destroy()
javax.servlet.FilterConfig接口
javax.servlet. FilterChain接口
web.xml配置
<filter>
<filter-name>
<filter-class>
<init-param>
</filter>
<filter-mapping>
<filter-name>
<url-pattern>//需要过滤的url
<dispatcher>//过滤请求类型
</filter-mapping>
过滤器的过滤执行次序与他在web.xml中定义的次序一致
20 侦听器主要侦听Servlet容器中的事件,所侦听的事件发生后,容器激活侦听器,执行预定的操作。侦听器侦听的事件主要是JSP
隐含对象application、session、request对象上发生的事件,主要有隐含对象的创建与销毁事件,相关作用范围变量的创建、修改和销
毁事件。
web.xml:
<listener>
<listener-class>
</listener>
javax.servlet.ServletRequestListener接口,主要侦听request隐含对象的创建与销毁事件
ServletRequestAttributeListener接口,侦听request属性的变化
javax.servlet.http.HttpSessionListener接口,侦听上下文中session对象的创建与销毁事件
javax.servlet.http. HttpSessionAttributeListener接口,侦听session属性的变化
javax.servlet.ServletContextListener接口,侦听Web应用Sevlet上下文的初始化事件和销毁事件
javax.servlet.ServletContextAttributeListener接口 ,侦听application属性事件
21.JavaBean
javabean即pojo类,plain old java objects,简单的java对象
jsp中使用JavaBean
1.<% %>内new
2.jsp动作<jsp:useBean><jsp:setProperty><jsp:getProperty>
注意userBean中class(找不到则创建新的)和type的区别,还有scope
利用外部的javabean,文件上传,email,poi等
22.数据库访问-jdbc
tomcat\conf\context.xml中配置数据库连接池<Context>
javax.sql.DataSource
java.sql.Blob blob = rs.getBlob("");
byte[] bytes = blob.getBytes(,);
23.MVC
struts1.x
controller-ActionServlet/Action
struts-config.xml
ActionServlet读取Struts-config.xml中的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个Action对象之间的映
射。Action对象会调用javabean完成业务操作.
流程:login.jsp->submit->login.do->web.xml->servlet(ActionServlet,struts自带)->读取struts-config.xml->action/actionform
(表单bean)->execute()
24.EL与JSTL
EL表达式引入EL表达式语言目的之一是为JSP页面计算;访问和打印数据提供方便,尽可能减少JSP页面中的Java代码,使JSP页
面更简洁、更易于开发和维护
EL表达式语言的基本语法为: ${表达式}
EL表达式通过“.”算符访问JavaBean中的属性,${JavaBean名.属性名}
JSTL的全称是JSP标准标记库(JSP Standard Tag Library,JSTL),它是SUN公司为简化JSP页面设计而提出的一种技术规范;
*.properties文件称为资源文件,在资源文件中,以“key=value”的形式存储一个变量及它的值,一行写一对“key=value”;方便消息的集中存储和管理 ;方便消息的国际化
摘自 I want to fly higher