jsp/java web基础知识回顾

因为太长时间没有做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页面
11.jsp动作组件:JSP动作组件是一些XML语法格式的标记,被用来控制Web容器的行为
 <jsp:include>动态包含
 <jsp:forward>使程序从当前页面跳转到另一个目标页面运行,浏览器地址栏不会发生任何变化;forward动作语句后的代码不能执
 行(已经带着request请求跳转到其他页面了)
 <jsp:param>,用来用于传递参数信息
 <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”;方便消息的集中存储和管理 ;方便消息的国际化

你可能感兴趣的:(Java Web)