概述
## 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.
最后
以上就是妩媚枫叶为你收集整理的Java Web项目的基本概念的全部内容,希望文章能够帮你解决Java Web项目的基本概念所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复