Java Web项目的基本概念

## Web项目的基本文件结构:
1. Web Application  Name
    - WEB-INF(必须有)
        - web.xml(必须有)
            - 该web app 的配置文件
        - lib
           - 该web app 用到的库文件
        - classes
            - 存放编译好的servlet
    - META-INF(可以没有)
        - 存放该web app 的上下文信息,符合J2EE标准
2. Web Application 可以直接存放在webapp下面,也可通过配置文件指定到其他目录  
    - <Context path="虚拟路径名" docBase = "目录位置"
    debug = "0" reloadable="true">
<br/>


Tomcat是服务器而servlet是一种运行在服务器端的Java应用程序。</br>


Tomcat配置可能遇到的问题<A href = "/Tomcat配置小疑问">Tomacat</a>


编程出现错误处理:第一,不要慌。第二,好好读excption或者任何的警告信息,从错误开始的地方一个个分析排查。打印错误值,注释一段再运行。Debug


---
## Servlet
1. 从HttpServlet继承
2. 重写doGet和doPost方法
3. 在web.xml中配置。(Servlet后推荐使用renonation来配置)
4. Cookie/Session/Application的概念
5. 请求转发
6. 使用JavaBean(此处的JavaBean指的是别的Java类)
7. getServletConfig().getServletContext().getRequestDispatcher().forward(req,resp)


    > getServletConfig</br>
    public ServletConfig getServletConfig()</br>
    Returns this servlet's ServletConfig object. 
    getServletContext</br></br>
    public ServletContext getServletContext()</br>
    Returns a reference to the ServletContext in which this servlet is running. See ServletConfig#getServletContext. </br>
    This method is supplied for convenience. It gets the context from the servlet's ServletConfig object. </br></br>
    RequestDispatcher getRequestDispatcher(java.lang.String path)</br>
    Returns a RequestDispatcher object that acts as a wrapper for the resource located at the given path. A RequestDispatcher object can be used to forward a request to the resource or to include the resource in a response. The resource can be dynamic or static. </br>
    The pathname specified may be relative, although it cannot extend outside the current servlet context. If the path begins with a "/" it is interpreted as relative to the current context root. This method returns null if the servlet container cannot return a RequestDispatcher. </br>
    
    getServletContext()得到上下文环境
    RequestDispatcher()请求分发器拿到路径
    forward()路径








#### Cookies:
1. 服务器可以向客户端写内容
2. 客户端可以阻止服务器写入
3. 只能拿自己webapp写入的东西
4. 只能是文本内容
5. Cookies分为两种。
    1. 属于窗口,子窗口(会话Cookie)
    2. 属于文本
6. 一个servlet/jsp设置的cookies能够被同一个路径或者子路径下面的servlet/jsp读到(路径指的是URL不是真实路径)


#### Session:
1. 在Jsp/Servlet中,如果浏览器不支持==会话Cookie==,可以通过==URL重写==来实现,就是将一些额外数据追加到表示回话的每个URL末尾,服务器在该标识符与其存储的有关的该会话的数据之间建立关联。如helllo.jsp?jsessionid=1234
sion。 


2. 可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止对话。
3. 通过HttpSession来读写Session。


#### 规则:
1. 如果浏览器支持Cookie,创建Session的时候会把SessionID保存在临时的内存cookie中。只与浏览器窗口有关系,浏览器窗口关闭后,永不会有人访问此浏览器对应的Ses,
2. 如果不支持Cookie必须自己编程使用URL重写的方式实现Session。
        >>  response.encodeURL()
        1. 转码
        2. URL后加入SessionID
3. Session不像Cookie拥有路径访问的问题
    1. 同一个Application下的Servlet/jsp可以共享同一个Session,前提是同一个客户端窗口。


#### Java Bean(咖啡豆HAHAHA):
1.  在Servlet中使用Bean和在通用程序中使用Bean类似
    1. 属性名字第一个字母必须是小写。属性一般设置为private.
    2. 一般具有Setters和Getters方法。
2.  Web中所使用的JavaBean一般不具有GUI表现。一般是用来实现某一业务逻辑或者取得特定的结果。
---
## JSP
1. JSP-Java Server Pages
2. 拥有Servlet的特性和优点(本身就是一个Servlet)
3. 直接在HTML中内嵌Jsp代码
4. JSP程序由JSP Engine先将它转化成Servlet代码,接着将它编译成类文件执行
5. 只有当客户端第一次请求Jsp时,才需要将其转化、编译
6. 优点:
    1. 平台无关性————操作系统无关,Web服务器无关
    2. 可扩展性————Tag的扩展机制,简化页面开发
---
## JSP语法小记:


1. 在声明变量时
    1. <%!成员变量%>只初始化一次,每当再次访问,这是调用doGet和doPost方法。如果页面计数回0。可能Tomcat内部还没有重新刷新。
    2. <%局部变量%>每访问页面一次,局部变量重新声明一次
2. Scriptlet</br>
    1. 基本语法:
        - <%程序代码区%>
    2. 可以放入任何的Java程序代码
    3. 例如:
    ```
    <%
        for(int i=0;i<10;i++)
        {
            
        }
    %>
    ```
    4. 注释(Comment)格式:
        - <%--HTML注释客户端可见--%>
        - <%//注释与次数则客户端不可见,咱程序员自己可以看见//%>
        - <%/*   */%>
    - 在JSP中使用Session时,直接使用Session对象即可
3. 表达式
    1. <%=此处的变量的值会被原封不动的输出%>
    2. “=”后面必须是字符串变量或者可以被转换成字符串的表达式
    3. 不需要以;结束
    4. 只有一行
4. Directive
    1. Directive(编译指令)相当于在编译期间的命令
    2. 格式:
        - <%@Directive 属性=“属性值”%>
    3. 常见的Directive:
        - Page
            - 指明与JSP Container的沟通方式
            - 基本格式:
            ``` 
            <%@page language="Java"|
                    import ="相当与Java中的import语句,引入了哪些包与类"|
                    buffer="none|kb size"|
                    session="true|false"|是否可以使用session,默认true
                    autoFlush="true|false"|缓冲器是否自动清除,默认ture
                    errorPage="errorPageURL"|当页面显示出现错误时,显示哪个页面
                    isErrorPage="true|false"当前页面是否为出错后显示页面
                    contentType="contentInfo"
            > 
            ```
        - include
            - 将制定的JSP程序或者HTML文件包含进来
            - 格式:
                - <%@ inculde fiel="被包含的网页的url"%>**现将被包含的网页先放到这里,再进行编译,即为编译指令。一般用于只包含非动态的代码。不可传参数,因为还没运行**
            - JSP Engine会在JSP程序的转换期间先把File属性设定的文件包含进来,然后开始执行转换及编译工作
            - 限制:
                - 不能向fileURL中传递参数
                - 错误示例:abc.jsp?user=aaa
        - taglib
5. Action
    1. Action(动作指令)在运行期间的命令
    2. 常见的:
        - jsp:useBean
        - jsp:include
            - 用于动态包含JSP程序或HTML文件等
            - 除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。
            - 格式:
                - <jsp:include page="URLSpec" flush="true"/> 
            - jsp:param用来设定include文件时的参数和对应的值
            - 例如:
                - date:jsp/include.jsp
                - Compute.html/Comput.jsp/divide.jsp/multiply.jsp
            - **与编译指令include的区别**:
                - include编译指令是在JSP程序的转换时期就将File属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入
                - include不能带参数,而<jsp:include>可以
        - jps:forward
            - 用于将一个jsp的内容传送到page所指定的JSP程序或者Sevlet中处理(URL)
            - 格式:
                - <jsp:forward page="urlSpec" flush="true"/>
                - <jsp:forward page="urlSpec"></br>
                        <jsp:param name="paramName" value="paramValue"/></br>
                - <jsp:forward>
                - 
            - <jsp:forward>与response.sendRedirect的区别
                - <jsp:forward>使用同一个request
                - response.sendRedirect是不同的request
                
                Jsp:forward
                ```
                graph LR
                客户端-->|1|forword1
                forword1-->|2|jsp:fordword1指向的最终url
                ```
                response.sendRedirect
                
                ```
                graph LR
                客户端-->|1|使用sendRedirect的页面
                使用sendRedirect的页面-->|2|客户端
                客户端-->|3|使用sendRedirect的页面的sendRedirect的最终URL
                ```
                
        - jsp:Bean
            - 通过jsp:useBean,可以在JSP中使用定义好的Bean
            - Bean的基本要素:
                - 必须要有一个不带参数的构造器。
                - 通过getter和setter方法来读/写变量的值,并且将对应的变量首字母改为大写
                - 基本语法
                     
                    ```
                    <jsp:useBean id="beanName" scope="page|request|session|application" class="package.BeanClass" type="typeName">
                    // scpoe:作用域 Jsp中的application相当于Servlet中的context
                    //type:你把New出来的对象当做什么去使用
                    //如:
                    <jsp:useBean id:"cb" class="Bean.CounterBean" type="Java.lanbg.Object> </jsp:useBean>  相当于 Object cb = new CounterBean();
                    <jsp:useBean id:"cb" class="Bean.CounterBean"> </jsp:useBean>  相当于  CounterBean cb = new CounterBean();
                    <jsp:setProperty name= "cb" property="count" value="23"/>  相当于  cb.setCount=23;
                    <jsp:getProperty name= "cb" property="count"/>  相当于  cb.getCount();
                    <jsp:setProperty name= "entry" property= "numItems" vallue="<%= request.getParameter("numItems")%>">  相当于  <jsp:setProperty name= "entry" property= "numItems" param= "numItems">
                    ``` 
                     
                    > Sun希望美工也能写Jsp语法,所以搞这么麻烦的东西。
                    
            - 通过request.setCharacterEncoding("GBK")将拿到的request转化为GBK编码
            
        - JSP内置对象:
            - OUT
                - OUT内置对象是一个缓冲的输出流,用来给客户端返回信息。它是javax.servlet.jsp.JspWriter的一个实例
                - 常用方法
                    - **println();向客户端输出各种类型数据**
                    - **newLine();输出一个换行符**
                    - close();关闭输出流
                    - flush();输出缓冲流里的数据
                    - clearBuffer;清除缓冲区里的数据,同时把数据输出到客户端
                    - clear();清除缓冲区里的数据,但不把数据输出到客户端
                    - getBufferSize();返回缓冲区的大小
            - request
                - 可以用此对象取得请求的各种消息Header,信息,请求方式,请求的参数名称等等等
                - 常用方法
                    - getMethod();返回客户端向服务器端传送数据的方法
                    - getParameter(String paramName);返回客户端向服务器传送的参数值,该参数由paramerName指定
                    - getParameterNames();获得客户端传给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration)
                    - getParameterValues(String name);获得指定参数的所有值,由name指定
                    - getRequestURL();获得发出请求字符串的客户端地址
                    - getRemoteAddr();获得客户端的IP地址
                    - getRemoteHost();获得客户端机器名称
                    - getSeverName();获得服务器的名字
                    - getServletName();客户端所请求的脚本文件路径
                    - getServePort();获得服务器端的端口
                    - 对应类:jaavx.servlet.http.HttpServletRequest
            - response
                - 表示的是返回给客户端的响应,经常用于设置HTTP标题,添加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL
                - 常用方法
                    - addCookie(Cookie cookie);添加一个Cookie对象,用于在客户端保存特定的信息
                    - addHeader(Stirng name,String name);添加Http头信息,该Head信息将发送至客户端
                    - containsHeader(String name);判断指定名字的Http头是否村在
                    - sendError(int);向客户端发送错误码404,500
                    - sendRedirect(String url);重定向JSP文件
                    - setContentType(String contentType);设置MIME类型与编码方式
 6. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值