web开发

//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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容