javaweb的优势_JavaWeb—1

Java web学习

贴士:常见状态码

(1)200:一切正常

(2)300/301:页面重定向(跳转)

(3)404:资源不存在

(4)403:权限不足

(5)500:服务器内部错误(代码有bug)

JSP:就是在HTML里嵌套java代码

JSP九大内置对象(自带的,不需要new也能使用的对象)

Out向客户端输出对象

pageContext

request请求对象

reponse

session

application

config

page

exception

1JSP:动态网页

静态、动态:

1.不用和是否有“动感”混为一谈 

2.是否随着时间、地点、用户操作  的改变而改变

动态网页需要使用到服务端脚本语言(JSP)

2架构

CS:Client Server

3365bc6b9537565265321a6137b8a247.png

CS不足:

a.如果软件升级,那么全部软件都需要升级

b.维护麻烦:需要维护每一台客户端软件

c.每一台客户端都需要安装客户端软件

BS :Broswer Server

客户端可以通过浏览器  直接访问服务端

f93d8fa98e6c6a289b779c5b3bbd6428.png

注意:bs和cs各有优势。

3.tomcat解压后目录:

bin:可执行文件(startup.bat    shutdown.bat)

conf:配置文件(server.xml)

lib:tomcat依赖的jar文件

log:日志文件(记录出错等信息)

temp:临时文件

webapps:可执行的项目(将我们开发的项目放入该目录)

work:存放由jsp翻译成的java,以及编辑成的class文件(jsp  ->java ->class)

20fc5424e8be6eb87d6dc7238f8d674c.png

4.配置tomcat

a.配置jdk (必须配置JAVA_HOME)

java_home  classPath path

b.配置catalina_home

双击bin/startup.bat启动tomacat,

常见错误:可能与其他服务的端口号冲突

tomcat端口号默认8080 (此端口号较为常见,容易冲突),建议修改此端口(8888)

修改端口号:

5.访问tomcat

http://localhost:8888/

jsp:在html中嵌套的java代码

 在项目/WEB-INF/web.xml中设置默认的初始页面

       index.jsp

6.虚拟路径

a.方式一

将web项目配置到 webapps以外的目录

conf/server.xml中配置

host标签中:

docBase:实际路径

path:虚拟路径  (绝对路径、相对路径【相对于webapps】)

重启

b.方式二

D:\study\apache-tomcat-8.5.30\conf\Catalina\localhost

中新建   “项目名.xml”中新增一行:

7.虚拟主机

通过www.test.com访问本机

a. conf/server.xml

b.C:\Windows\System32\drivers\etc\host

增加

127.0.0.1       www.test.com

流程:

www.test.com ->host找映射关系 ->server.xml找Engine的defaultHost->通过"/"映射到D:\study\JspProject

为了后续学习,将以上恢复成默认

7.JSP执行流程

jsp- java(Servlet文件) -class

D:\study\apache-tomcat-8.5.30\work\Catalina\localhost\JspProject\org\apache\jsp

2443e8ade8f013ed57ed7fe75eb73662.png

Jsp 和Servlet 可以相互转换 

因为第一请求服务端会有翻译和编译的过程,因此比较慢;后续访问可以直接访问class,因此速度较快。但是如果服务端修改了代码,则再次访问时  会重新的翻译、编译。

1.使用Eclipse开发Web项目(JSP项目) tomcat

2. 在Eclipse中创建的Web项目:

 浏览器可以直接访问WebContent中的文件,

例如http://localhost:8888/MyJspProject/index1.jsp

其中的index1.jsp就在WebContent目录中;

但是WEB-INF中的文件  无法通过客户端(浏览器)直接访问,只能通过请求转发来访问

注意:并不是任何的内部跳转都能访问WEB-INF;原因是跳转有2种方式:请求转发、重定向

3.配置tomcat运行时环境

       jspServlet

a.将tomcat/lib中的servlet-api.jar加入项目的构建路径

b.右键项目->Build Path -> Add library->Server Runtime

4.部署tomcat

在servers面板新建一个 tomcat实例,  再在该实例中部署项目(右键-add)

之后运行

注意:一般建议将eclipse中的tomcat与本地tomcat的配置信息保持一致:将eclipse中的tomcat设置为托管模式:【第一次】创建tomcat实例之后,双击,选择Server Location的第二项

5.统一字符集编码

a.编码分类:

设置jsp文件的编码(jsp文件中的pageEncoding属性):  jsp -> java       

设置浏览器读取jsp文件的编码(jsp文件中content属性)

一般将上述设置成一致的编码,推荐使用UTF-8

文本编码:

       i.将整个eclipse中的文件统一设置(推荐)

       ii.设置某一个项目

       iii.设置单独文件

6.

JSP的页面元素: HTML java代码(脚本Scriptlet)、指令、注释

a.脚本Scriptlet

       i.   

                            局部变量、java语句

              %>

       ii.

                            全局变量、定义方法

              %>

       iii.

              输出表达式 %>

一般而言,修改web.xml、配置文件、java  需要重启tomcat服务

但是如果修改 Jsp\html\css\js ,不需要重启

注意,out.println()不能回车;要想回车:“”,即out.print() 可以直接解析html代码

b.指令

page指令

page指定的属性:

language:jsp页面使用的脚本语言

import:导入类

pageEncoding:jsp文件自身编码  jsp->java

contentType:浏览器解析jsp的编码

    pageEncoding="UTF-8"  import="java.util.Date" %>

c.注释

       html注释  ,可以被客户通过浏览器查看源码所观察到

       java注释//     /*...*/

       jsp注释

7.JSP九大内置对象(自带的,不需要new 也能使用的对象)

一、out:输出对象,向客户端输出内容

二、request:请求对象;存储“客户端向服务端发送的请求信息”

d6357f9894a3b97648581ba8cfadb6ea.png

request对象的常见方法

(1)StringgetParameter(String name) :根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)

(2)String[]getParameterValues(String name): 根据请求的字段名key ,返回多个字段值value  (checkbox)

(3)voidsetCharacterEncoding("编码格式utf-8"):设置post方式的请求编码  (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)

(4)getRequestDispatcher("b.jsp").forward(request,response);  :请求转发 的方式跳转页面   A - > B

(5)ServletContextgetServerContext():获取项目的ServletContext对象

示例:

注册

register.jsp  ,show.jsp

http://localhost:8888/MyJspProject/show.jsp?uname=aa&upwd=123&uage=22&uhobbies=%E7%AF%AE%E7%90%83

              连接/文件?参数名1=参数值1 & 参数名2=参数值2 & 参数名1=参数值1

get提交方式: method="get" 和地址栏、超链接()请求方式默认都属于get提交方式

注意:getpost请求方式的区别

(1)get方式:在地址栏显示 请求信息  (但是地址栏能够容纳的 信息有限,4-5KB;如果请求数据存在大文件,图片等  会出现地址栏无法容纳全部的数据而出错) ;post不会显示

(2)文件上传操作,必须是post

推荐使用post

8.统一请求的编码 request

get方式请求如果出现乱码,解决:

a.统一每一个变量的编码(不推荐)

       new String(  旧编码,新编码);

       name = new String(name.getBytes("iso-8859-1"),"utf-8");

b. 修改server.xml ,一次性的更改tomcat默认get提交方式的编码(utf-8)

建议使用tomcat时,首先在server.xml中统一get方式的编码..URIEncoding="UTF-8"

tomcat7(iso-8859-1)

tomcat8(utf-8)

post

request.setCharacterEncoding("utf-8");

注册页面:

page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>注册title>

head>

<body>

    <form action="show.jsp"method=post accept-charset="UTF-8">

                  用户名:<input type="text"  name="uname"/><br/>

                  密码:<input type="password"  name="upwd"/><br/>

                  年龄:<input type="text"  name="uage"/><br/>

                  爱好<br/>

         <input type="checkbox"  name="uhobbies"value="足球"/>足球,

         <input type="checkbox"  name="uhobbies"value="篮球"/>篮球,

         <input type="checkbox"  name="uhobbies"value="乒乓球"/>乒乓球<br/>

         <input type="submit"    value="注册">

    form>>

body>

html>

78043f9f52f077ab33a9181d313fdd72.png

跳转后显示页面:show.jsp

page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert title heretitle>

head>

<body>

      //设置统一编码

      request.setCharacterEncoding("utf-8");

      String name=request.getParameter("uname");

      int age=Integer.parseInt(request.getParameter("uage"));//将字符串转换成整数

      String pwd=request.getParameter("upwd");

      String[] hobbies=request.getParameterValues("uhobbies");

    %>

    注册成功,信息如下:<br/>

    姓名:name %><br/>

    年龄:age  %><br/>

    密码:pwd  %><br/>

    爱好: <br/>

    if(hobbies !=null){

    for(String hobby :hobbies){

    out.print(hobby+" ");

    }

    }

    %>

body>

html>

49f5cc6547196c69e2ffab188d7a0892.png

二、response :响应对象

提供的方法:

(1)void addCookie( Cookiecookie ); 服务端向客户端增加cookie对象

(2)void sendRedirect(Stringlocation ) throws IOException; :页面跳转的一种方式(重定向)

(3)voidsetContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)

e11224afc15ac6517f9888e46aa9b606.png

91869f46a3f108911b57f3fd2b1717b9.png

df10e2793886046833ef6e07fc5dab76.png

  测试:

bfe15a3995145f8d6826e50abc2af049.png

d22b71f1023d7e6793aaaa4cac6a3c47.png

但是会导致数据丢失;

使用请求转发重写check.jsp里的java方法

12ea91622fd393a7d70528916e1f6a27.png

e3a9244960d1fce3c7133cccfbda572d.png

请求转发与重定向:

 0b8b41eba9eb9b7b7b724b96007d28d9.png

请求次数问题:

请求转发:只有一次请求,一次响应;

重定向:两次请求,两次响应;

998eea7e88bb5f22131cc4d563d80b9f.png

示例:登陆

login.jsp  -> check.jsp  ->success.jsp

面试常考:

请求转发(request)

重定向(response)

地址栏是否改变

不变(check.jsp)

改变(success.jsp)

是否保留第一次请求时的数据

保留

不保留

请求的次数

1

2

跳转发生的位置

服务端

客户端发出的第二次跳转

b744071b87f672c65c42792910ef3e39.png

转发、重定向:

转发: 

    张三(客户端)    ->    【 服务窗口 A (服务端 )   ->  服务窗口B  】

重定向:

    张三(客户端)      ->   服务窗口 A (服务端 ) ->去找B

    张三(客户端)   ->     服务窗口 B (服务端 ) ->结束

三、  session(服务端)

Cookie(客户端,不是内置对象):Cookie是由服务端生成的 ,再发送给客户端保存。

相当于 本地缓存的作用:客户端(hello.mp4,zs/abc)->服务端(hello.mp4;zs/abc)

作用:提高访问服务端的效率,但是安全性较差。

Cookie:   name=value  

javax.servlet.http.Cookie

publicCookie(String name,String value)

StringgetName():获取name

StringgetValue():获取value

voidsetMaxAge(int expiry);最大有效期(秒)

服务端准备Cookie:

    response.addCookie(Cookie cookie)

页面跳转(转发,重定向)

客户端获取cookie:  request.getCookies();

a.服务端增加cookie :response对象;客户端获取对象:request对象

b.不能直接获取某一个单独对象,只能一次性将 全部的cookie拿到

b40b51da040bdd2d98c7403904dedccd.png

e2080ee2a2451d0bdbbc23d46c64394a.png

cdd3d9bb1e612730607404b43e5c278b.png

通过F12可以发现 除了自己设置的Cookie对象外,还有一个name为 JSESSIONID的cookie

建议 cookie只保存 英文数字,否则需要进行编码、解码

3. 使用Cookie实现  记住用户名  功能

4.session:会话

a.浏览网站:开始-关闭

b.购物:  浏览、付款、退出

c.电子邮件:浏览、写邮件、退出

    开始-结束

session机制:

客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息);

并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);

服务端会 产生一个cookie,并且 该cookie的name=JSESSIONID,value=服务端sessionId的值;

然后 服务端会在 响应客户端的同时将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID);

因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)

客户端第二/n次请求服务端时:服务端会先用客户端cookie中的JSESSIONID  去服务端的session中匹配sessionid,如果匹配成功(cookie  jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;

9e3b282e6e0236379781741cea94e67d.png

例子:

客户端:          顾客(客户端)

服务端: 存包处  -  商场(服务端)

顾客第一次存包:商场 判断此人是之前已经存过包(通过你手里是否有钥匙)。

 如果是新顾客(没钥匙) ,分配一个钥匙 给该顾客;钥匙 会和 柜子 一一对应;

 第二/n次 存包:商场 判断此人是 之前已经存过包(通过你手里是否有钥匙)

 如果是老顾客(有钥匙),则不需要分配;该顾客手里的钥匙 会 和柜子 自动一一对应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值