//document.forms返回页面所有form表单构成的数组
web超文本http全球性动态交互跨平台
2.0基于配置文件形式开发
3.0基于注解形式开发
软件架构模式:C/S和B/S
C/S client,server,包含客户端和服务器端的应用。
B/S browser,server,由浏览器和服务器程序构成。
response响应request请求
URL-统一资源定位符,组成:协议、服务器地址(端口),具体资源路径
URI-统一资源标识符
HTTP协议:超文本传输协议
web服务器:Tomcat(常用),weblogic(商用大型开发)
src:后端代码
webcontent:前段代码
web-inf>web.xml:web工程的核心配置文件(3.0以后没有这个文件夹)点击source可查看源文件
eclipse点Window点show view可调出servers,console等
错误:http404路径错误,http500
tomcat目录结构:
bin(Tomcat可执行文件)
conf(Tomcat配置文件)>server.html(可改端口号)
libs(Tomcat编译环境.jar)
logs(Tomcat日志文件)
webapps(当前Tomcat部署的所有应用)
work(缓存文件可删除)
思考普通类实现一些功能:创建一个类继承某一个父类或接口就可以实现一些功能
servlet
servlet能接受请求创建响应
创建一个servlet类继承某httpservlet获取其方法,.或右键new选择servlet起名字(这个方法比前一种更容易获取其方法)。
在web.xml下的<url-pattern>/TestServlet</url-pattern>这个路径是重要的配置文件访问路径。
新建文件之后,配置文件就会变更,要重启服务。
servlet配置:
1.<servlet>
<description>和<display-name>无用,<servlet-name>在容器中的唯一标识,<servlet-class>要配置的servlet全类名即包名+类名。
2.<servlet-mapping>映射路径的配置
<servlet-name>与<servlet>中的<servlet-name>值是一样的(若改必须一致),<url-pattern>配置的映射路径(请求路径,建议首字母小写),默认和类名相同程序员可以改。
<url-pattern>的匹配形式:①默认精确路径匹配,/后写什么就访问路径就是什么。②采用正则表达式的方式进行一个映射。例如,*.action。
servlet内部实现:
httpservlet直接父类,generricserverlet是httpservlet的父类。
servlet 生命周期:
1.初始化阶段:执行一次
构造器,init()方法
2.业务处理阶段:执行多次
service(),doget()方法(url访问只能doget如果form访问则dopost)
3.销毁阶段:执行一次
destory()方法
Http协议
组成:1.请求行,请求方式,协议版本,URI
String method=request.getMethod();
String uri=request.getRequestURI();
StringBuffer url=request.getRequestURL();
2.报头信息
Enumeration<String> enums=request.getHeaderNames();
while(enums.hasMoreElements()){
String name=enums.nextElement();
String value=request.getHeader(name);
3.空行
4.请求正文
MVC
v:view视图层,html/css/js
c:controller控制层(servlet)
m:model模型层
①service业务处理、事务处理(一次需求下根据数据库的所有交互要同时成功同时失败,保证数据的一致性。)单例模式
②dao数据平台交互(增删改查)接口实现类的方式进行程序设计方便程序的扩展。
③bean实体类(持久化类),一般和数据库表一一对应,用于数据的封装和传递
所有增删改查都在dao层中
获取数据连接存储数据
数据真实校验
form表单中action属性设定请求路径,
1.不以斜线开头,相对路径
2.以斜线开头,绝对路径
页面跳转有两种方式:
①请求转达:url不发生变更,跳转到的路径可以以斜线开头,也可以不以斜线开头,永远是相对路径跳转,不支持站外跳转
request.getRequestDispatcher("login.html");参数指定往哪跳转
rd.forward(request, response);调用forward方法。参数是当前请求对象和响应对象
②重定向:url发生变更,不可以以斜线开头,跳转路径必须是相对当前路径进行跳转,如果以斜线开头是绝对路径要将工程名写上,支持站外跳转
response.sendRedirect("main.html");参数指定往哪跳转
response.sendRedirect(request.getContextPath()+"/main.html");建议用获取向下文路径的方法获取绝对路径,写入参数、
开发过程中应该采用哪种跳跳转方式取决于当前请求处理时进行数据共享的方式。
html是静态的页面,页面动态交互的,需要建立jsp文件,在web Content项new一个jsp file。需要调默认编码格式。
jsp本质也是一个servlet.
jsp的执行过程:
1.jsp文件首先被翻译成servlet源文件,
2.将servlet源文件编译成字节码文件,
3.初始化,执行构造方法和jsp的init方法进行类的初始化
4.业务处理,执行jspservice方法,
5.对象的销毁,执行jspdestory方法
jsp的生命周期:
初始化阶段:1.2.3出现一次
业务处理阶段:4出现多次
销毁阶段:5出现一次
第一次访问jsp文件时,速度比较慢,因为有翻译和编译的过程。
jsp页面结构:脚本元素,指令元素,静态内容
静态内容和html一样。
jsp脚本元素:作用可以在里面编写java代码
①jsp脚本(段):特点:被翻译成 servlet源文件的jspservice局部代码块,支持声明变量,语句块。
<% int i=4; %>
<% for(int j=0;j<5;j++){ }; %>
②jsp声明:特点:被翻译成 servlet源文件的类成员:成员变量,成员方法
<%! int x; %> //声明一个变量
<%! void method(){ } %> //声明一个方法
③jsp表达式:动态的显示数据信息,用于往页面输出信息。
<%= x %>
<%= hello world %>
jsp的注释:
jsp注释<%-- --%>翻译过程中忽略
html注释<!-- -->源代码中有
java注释 <%/* */%> 或者 <% // %> 翻译是有的但是编译的时候忽略
jsp指令:
<%@ 指令名称 指令支持的属性 %>
pege指令:设置页面的基本属性信息
属性:
①language支持的脚本语言
例:<%@ page language="java" contentType="text/html; utf-8" pageEncoding="utf-8"%>
②import指定多要引入的包或者类
例:<%@ page language="java" contentType="text/html; utf-8" pageEncoding="utf-8" import="java.util.Date" %>
③contentType指定jsp响应的内容类型和编码格式
④errorPage当页面出现异常时,跳转到的页面
⑤isErrorPage设置网页是否支持异常处理
例:<%@ page language="java" contentType="text/html; utf-8" pageEncoding="utf-8 isErrorPage=“true” %>
include指令:引入另外一个文件(jsp html js)
例:<%@ include file="new file.jsp" %>
taglib指令:引入自定义标签库。
数据共享:四个作用域
* servletContext 一个web应用只对应一个servletContext,作用域是整个工程范围内
* HttpSession 会话对象
* HttpsServletRequest 一次请求范围内
* PageContext 一个页面范围内
* 选择作用域的原则:尽可能使用范围小的作用域,避免多并发时产生的作用域混乱的问题
setAtrribute:存放数据
例:request.setAttribute(“loginUser”, user);
页面跳转方式补充:
请求转发:只产生一个request
重定向:产生两个request
jsp内置对象:
* request请求对象
* response响应对象
* out输出信息流对象
* session会话对象
* application应用程序对象
* pageContext页面上下文对象
* config页面配置对象
* page当前页面本身
* excetion异常对象
* setAttribute("" ,Object):存放数据
* getAttribute("") 取数据
* removeAttribute("") 删除数据
存储在浏览器
过滤器(Filter)也称之为拦截器,
实现javax.servlet.Filter接口
<filter>
<filter-name>MyFilter</servlet-name>
<filter-class>com.filter.MyFilter</servlet-class>
<init-param>
<param-name>assa</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFilter</servlet-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter的三个方法:
destory()销毁
init()初始化
doFilter()需要处理的代码写在这里,用户请求通过时调用这个方法。
三个形参
servletRequest
servletResponse
FilterChain
1.1设置编码集
arg0.setCharacterEncoding("utf-8");
arg1.setCharacterEncoding("utf-8");
1.2第三个形参,将用户的请求继续给下一个servlet
arg2.doFilter(arg0,arg1);
1.3innit(FillterConfig arg0)方法
String str=arg0.getInitParameter("assa");
session会话结束的情况:超时,invalidate,关闭浏览器
工具类解析:
util常用java操作,连接数据库,日期转换,非空判断,String转integer等等。
xx.properties配置文件客户可以直接更改不用编译,可以通过配置文件改变类型
public class DButil{
//静态语句块,在类加载时执行,并且只执行一次
static{}
Class.forName(“”);//加载这个类
创建一个类的实例两种方式:①new类名()②Class.forName(“包名.类名”)
DButil.class.getClassLoader().getResourceAsStream("db.properties");
DButil.class.getClassLoader();当前类名.class..getClassLoader()当前文件目录
getResourceAsStream("db.properties");getResourceAsStream("读取文件目录/文件名”)读取运行时文件目录
getProperty(“”)读取配置文件的键返回相应的值
DriverManager.getConnection()//获得连接
进行数据库操作:
1得到连接2写SQL语句执行3增删改提交4查结果集5关闭连接
servlet上下文监听器:
listener:监听器
Web应用被启动、用户会话开始、用户会话结束、用户请求到达等
servlet用于监听的事件源分别是ServletContext, HttpSession 和 ServletRequest
ServletContextListener 接口用于监听 ServletContext 对象的创建和销毁事件。
Tomcat3.0
@WebServlet(urlPatterns={"/LiServlet"})
@WebServlet注解
urlPatterns属性
{"/LiServlet"}属性值
文件上传:
加注解@WebServlet("/upload")
@MultipartConfig
doget方法中更改
this.doPost(request, response);
dopost方法更改
Part p=request.getPart("f1");
p.write("D:/abcdef");
文件下载:
//获取提交的超链接参数,作为文件名
String f=request.getParameter(“name”);
//将提交的中文信息转码
f=URLDecoder.decode(f,"utf-8");
//获取应用部署后所在路径分隔符+文件名
String filename=this.getServletContext().getRealPath("/WEB-INF/uploadFile/")+File.separator+f;
//获取服务器文件的文件字节输入流
InputStream in=new FileInputstream(fileName);
//设置用户下载文件名转码
f=URLEncoder.encode(f,"utf-8")
//content-Disposition消息头指示回复的内容该以何种形式展示,是以内联形式(即网页或者页面的一部分)
response.setHeader("content-Disposition","attachment";filename="+f);
//输出给用户的字节输出流
OutputStream out = response.getOutputStream();
//设置缓存数组大小--》流读写
byte[] temp = new byte[1024];
//设置变量,输入流读取文件数据到数组的长度
int len = 0;
//循环遍历
while((len = in.read(temp))>0){
//将数组中的数据,写入到字节输出流(用户),最后一次写读入数组的长度
out.write(temp,0,len);
//冲刷一下
out.flush();
}
//关闭
in.close();
//关闭
out.close();
}
要使得文件上载能够成功,必须要做到:
input type=file标签必须出现在form标签中
必须为input type=file标签指定name标签属性的值
form标签的method属性必须设置为post
form标签enctype属性必须设置为multipart/form-data