当前位置:   article > 正文

javaweb期末总结一_javaweb实验总结

javaweb实验总结

1、服务器端:三层架构
第一层:web层(jsp+servlet),web层(使用springMVC框架)调用service层
第二层:service层:业务逻辑层,service层(使用spring框架)调用dao层
第三层:dao层:数据访问层,直接用jdbc技术、快捷开发工具类DBUtils、hibernate框架(少)、mybatis框架(都为数据持久层框架) 访问数据库
在这里插入图片描述2、请求:指的是客户端向服务器端发送的请求。
响应:指的是服务器端给客户端的回应。
3、http请求:
在这里插入图片描述
(1)请求行:
请求方式: POST、GET
请求的资源地址: /DemoEE/form.html协议版本: HTTP/1.1
HTTP/1.0,发送请求,创建一次连接,获得一个 web 资源,连接断开。
HTTP/1.1,发送请求,创建一次连接,获得多个 web 资源,保持连接。
(2)请求头:
请求头是客户端发送给服务器端的一些信息,使用键值对表示 key: value
1)Referer:浏览器通知服务器当前请求来自何处。如果是直接访问,则不会有这个头,常用于:防盗链
2)Cookie与会话有关技术,用于存放浏览器缓存的 cookie 信息。
3)connection:保持连接状态。Keep·Alive 连接中,close 已关团
4)Host:请求的服务器主机名,是个ip地址
5)Content-Length:请求体的长度
6)Content-Type:如果是 POST 请求,会有这个头,默认值为:请求体内容使用 url 编码
7)Accept-Encoding:请求的字符编码
8)Referer:该请求是来自于那个地方
在这里插入图片描述
(3)请求体:
当请求方式是 post 时,请求体会有请求的参数,格式如下:
username=admin&password=admin123
如果请求方式为 get,那么请求参数不会出现在请求体中,会拼接在 url 地址后面如下:
http:/localhost:8080.?username=admin&password admin123
1)直接在地址栏输入请求方式:默认为get方式
2)一般使用表单,提交请求,默认是 post 方式的。
3)使用get方式时,浏览器的地址栏里的 ? 号表示客户端向服务器端传递的参数,。如果传递的参数有多个,就用&进行连接。
4)get不安全,post更安全

4、http响应:
在这里插入图片描述
(1)响应行:状态码
常用的状态码如下:
200 : 请求成功。
302 : 请求重定向。
304:请求资源没有改变,访问本地缓存。
404:请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。服务器关闭
500 : 服务器内部错误。通常程序抛异常。代码有逻辑方面的问题
(2)响应头:key:value形式
1)Location:指定响应的路径,需要与状态码 302 配合使用,完成跳转。
2)Content-Type:响应正文的类型,取值: text/html;charset=UTF-8
3)Set-Cookie:与会话相关技术。服务器向浏览器写入 cookie。
Cookie 它是在客户端的浏览器里,Cookie 里的数据是存放在客户端而不是服务器里的。
Session: Session 里的数据是放在服务器端的,但是 SessionlD 是存放在客户端的 Cookie里的。
4)Content-length:响应正文的长度
5)Refresh:定时刷新
格式:秒数;url = 路径。url .可省略,默认值为当前页。
eg:取值:3 ; url=www.itcast.cn //三秒刷新页面到 wwwitcast.cn
6)Server:服务器名称,如tomcat、Apache
(3)响应体:页面要显示的正文
响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析泣热显示页面内容
5、Servlet快速入门:
(1)新建一个普通类去实现Servlet接口
(2)覆盖Servlet接口中方法
(3)需要配置Servlet程序
(4)Servlet中三个重要方法:
1)public void service (ServletRequest requst,ServletResponse response)
1.每次请求都会被调用(也刷新一次,就调用一次)
2.request参数是封装了客户端发送过来的请求数据的。3.response参数是封装了服务器端给客户端的响应的结果
2)public void destroy()
当tomcat服务器被关闭的时候才执行
3)public void init(ServletConfig arg0)
当第一次访问tomcat服务器时,servlet就会被创建,就会调用该方法,而且后面在访问该服务器时,不会再调用
(5)Servlet生命周期:
1)servlet何时创建:默认第一次访问的时候创建
2)servlet 何时销毁:服务器关闭 servlet 就销毁了
3)每次访问必然执行的方法service
6、xml
(1)当一启动Tomcat时,就会读取xml配置文件的信息
(2)servlet
类名(别名)
全类名
/servlet:配置
servlet-mapping
类名
路径url
/servlet-mapping:映射
在这里插入图片描述
(3)url-patternurl的匹配规则有三种
1,完全匹配:如:url-pattern /demo /url-pattern>
2,目录匹配:如:url-pattern /aa/bb/* /url-pattern>
3,后缀匹配:如:url-pattern .html /url-pattern
(4)寻找步骤:
在这里插入图片描述
7、
(1)使用模板创建Servlet,不是实现servlet接口,而是继承HttpServlet父类(其中HttpServlet继承GenereicServlet的父类,而GenericServlet这个父类又实现了Servlet的接口),可以用注解来配置url,不用xml
(2)doget() :对应的是get请求
doPost():对应的是post请求
8、ServletContext对象
(1)一个 web 应用多个 servlet 对象,ServletContext 对象一个 web 应用只有一个
(2)init(ServetletConfig config)的config的参数,这个参数主要是获取web.xml的配置文件里的信息的
1.可以得到servelt的名称
2.可以得到该servlet的初始化参数 (也可以是多个) ,通过参数名得到参数的值
3.还可以得到ServletContext上下文
(3)获取ServletContext对象:
在这里插入图片描述
(4)在xml中配置全局(不要放在某一个类里面)的初始化参数
context-param>
param-name> driver /param-name>
param-value> mysql:driversxxxxx param-value>
context-param>
(5)获得meb.xml里面的全局初始化参数的值
String driver = servletContext .getInitParameter( “driver”)
就可以得到driver = mysql:driversxxxxx在这里插入图片描述
(6)根据相对地址,来得到它的绝对路径
String realPath = servletContext.getPath(“/index.jsp”)
在这里插入图片描述
(7)ServletContext是一个域对象(重要!)
1)域对象:存储数据(object类型:new的对象、字符串、数组、集合…)的区域
2)ServletContext 域对象的作用范围:整个 we 应(所有的 web 资源都可以随意向ssrvletcontext 域中存取(一个Servlet像Map集合一样,使用键值对存值,另外一个Servlet通过键得到值)数据,数据可以共享)
在这里插入图片描述
3)保存数据到上下文对象ServletContext中语句:
存:context.setAttribute( “name” , “zhangsan”);
取:context.getAttribute(“name”);
移:context.removeAttribute(“name”);
4、ServletConfig:
(1)可以得到web.xml的初始化参数
(2)ServletConfig参数是放在init()方法里面,
在这里插入图片描述
(3)初始化参数要写在Servlet里面(是名字为demo类里面)
在这里插入图片描述
(4)获取单个参数值(通过名获得值key-value):
String jdbcvalue = servletConfig.getInitParameter( “jdbe”)
(5)获取多个参数值:用Enumeration集合存所有初始化参数的名字
Enumeration(String )names = servletConfig.getInitParameterNames();
遍历名字的集合,即可一 一得到参数的名字
while(names. hasMoreElements ()){
String s = names.nextElement ();
根据名得到值
String jdbevalue = servletConfig.getInitParameter(s):
}
(6)得到servlet名称(这里为demo):servletConfig.getServletName()
5、response:
(1)重定向:客户端第一次访问服务器端,给你一个响应302,让你去找另外一个资源,又访问服务器端(总结:客户端访问两次服务器端,地址栏的url会发生变化)
在这里插入图片描述
例如:第一次在没有登录淘宝情况下,你在淘宝页面想要看购物车里的东西(第一次手动访问服务器端),服务器端自动(这就是第二次访问服务器端)跳跳转到登陆页面,
(2)状态码:302 响应头: Location:重定向地址(url),没有响应,告知客户端去重定向 servlet2
(3)重定向代码写法:
写法一(一般不会用):
response.setStatus(302);//注意302不能写错
response. setHeader( “Location”, "welcome. html (重定向的url) ")
写法二(简洁版):
response.sendRedirect( "welcome. html (重定向的url) ") **
(4)重定向和请求转发
相同与区别
*:
同:两者方式都能跳转到指定的服务器端
异:
1)本质:
请求转发(request调用):指的是服务器之间相互调用,客户端是不知道 的,所以客户端的地址栏里的地址是不变的。
重定向(response调用):指的是访问两次服务器,客户端是知道 的,所以客户端的地址栏里的地址会发生变化的。
2)写法:
请求转发:request.getRequestDispatcher( s: “demo(重定向的url)”).forward(request, response);
重定向:
response.sendRedirect( “demo(项目名+”/虚拟的url") “)
可以用request.getContextPath()来获得项目名
(5)定时刷新的重定向:
response.setHeader(“refresh”,
“5;url=http://www.baidu.com”)表示:隔5秒钟后刷新,并跳转到http://www.baidu.com页面
(6)在头字段中:
1)在响应头添加数据,可以添加多个:
response. addIntHeader(“age”,66)
response. addHeader(“name”,“zgzg”)
2)在响应头设置数据,只保留最后一个:
response. addHeader( “name”, “wangwu”)
response. setHeader( “name”, “lisi”)
response. setHeader( “name”, “zhaoliu”)
name的结果为zhaoliu
3)总结:使用add 添加的,如果有同名的,会保留下来,如果是set 设置的,如果有同名的,后面的会覆盖前面的
(7)中文乱码:
因为服务器端会给出响应到客户端,所以用response,在客户端的页面输出内容(注意不是控制台)(以流的形式)
PrintWriter out = response.getWriter() 第一种:out.println(” hello!!!)
第二种:out.write(” hello worid! ")(两者有区别),这两种输出编码格式默认为iso-8859-1,不支持中文,会乱码

解决方法:
1)在客户端响应结果之前,即在流输出前就要告诉客户端使用UTF-8,即为:
response. setCharacterEncoding(“utf-8”)一定要放在PrintWriter out = response.getWriter()之前

并且客户端的浏览器在解析时,也要按照utf-8的格式进行解析:
response.setHeader( “Content-Type”, "text/html;charset=utf-8” )

2)包括客户端和浏览器端的简洁版:
response.setContentType(“text/html;charset=utf-8”)

3)对客户端提交上来的数据也可能是乱码,所以也要进行UTF-8编码:
request.setCharacterEncoding(“utf-8”)
6、request:
(1)前端页面跳转到Servlet,通过form表单中的action,填写对应的映射路径
在这里插入图片描述(2)获取表单传过来的值:
request. getParameter( “userName” )获取前端传递的数据在这里插入图片描述
(3)面对复选框时,想获取已经选中的多个值,比如hobby有多个时,用数组接收,然后遍历
在这里插入图片描述
(4)请求头(头字段):
获取全部的value值:
先获得所有头信息的key, 然后返回的是一个存放所有key的名称的集合:
Enumeration (String) names =request.getHeaderNames();
遍历集合:
while(names.hasMoreElements()){
得到key名
String key = names.nextElement() ;
得到value值
String headervalue = request.getHeader (key)
}
7、request对象也是一个存储数据的域对象,
作用有效期范围:仅仅一次请求,若一次请求完成,服务器作出响应后,request对象被销毁则数据也被销毁
(1)存:setAttribute(String name, Object o)
取:getAttribute(String name)
(2)重定向方式:
//把info将象保存在request中
request. setAttribute( “user”, info) ;
//重定向到到Servlet2中
response. sendRedirect( request.getContextPath()+“/servlet2虚拟的url”),但是得不到数据(因为重定向是访问两次服务器,第一次数据已经被销毁)
(3)请求转发方式:
在一个servlet里面由request.setAttribute(“name”,“value”) 先添加key-value数据,然后再根据request.getRequestDispatcher( s: “servlet2虚拟的url”).forward(request, response)进行转发,最后在Servlet2里面通过request.getAttribute(“name”) 得到value值:
,注意得到的value默认是一个Object对象,要使用强转为所需要的类型),但是直接访问servlet3,却不能得到,因为已被销毁
8、会话:从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。
会话技术就是记录这次会话中客户端的状态与数据的。
(1)购物车,如果用request,则会只有一件商品(因为访问一次,数据就销毁)
在这里插入图片描述
最后只得到一个商品
如果使用ServletContxt,因为服务器端一直开着,多个人的购物商品都放在了一起,一人结算则全部都被清单了
在这里插入图片描述
(2)Cookie: 数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户
帮可以清除 cookie
Session: 将数据存储到服务器端,安全性相对好,增加服务器的压力
9、cookie:
(1)第一次服务器端会往客户端写入Cookie
// 创建cookie
Cookie ck = new Cookie(“name”,“zhangsan”);//只能是字符串类型
// 将cookie存储的信息发送到客户端-头(响应)(由服务器把cookie信息啊应客户端)
response.addCookie(ck);
//cookie中不要存储中文
第二次:浏览器去访问服务器时候,默认在请求头上会带着cookie
(2)可以创建多个Cookie,同名的cookie,后面会覆盖前面cookie的值
(3)sessionID:
1)当浏览器刷新时,SessionID不会变,cookie信息也不变
2)当换一个浏览器访问,又是另外一个SessionID
3)关闭浏览器,又重新打开该浏览器,又访问,此时SessionID也会改变(因为关闭浏览器后,cookie信息就清空了)
(4)总结:如果不设置 cookie 的有效时间,当浏览器被关闭之后即这一次会话结束之后,cookie信息会自动被删除!
(5)时间单位秒,设置如下(在添加Cookie之前进行):在这里插入图片描述
删除Cookie,把时间设置为0秒
(6)设置Cookie的携带路径
ck(Cookie名)
. setPath
(”/项目名/虚拟url"),(在添加Cookie之前进行) ;
(7)想要得到cookie的信息
1)获得全部:
用request.getCookies()方法,得到一个数组,然后遍历
在这里插入图片描述

2)获得指定的:
通过Cookie的名字比较
在这里插入图片描述
(3)删除Cookie
手动在一个Servlet类里面,先new 一个同名且value等于空值的Cookie(会覆盖最初同名的值),设置时间为0,(有可能还会设置路径)
10、Session:
(1)session也是一个域对象,有get/set/remove方法,保存的值为object
(2)大概过程:
4
ID是存在客户端,而正真的数据是存在服务器端
(3)服务器端回写ID在浏览器自动完成
通过request.getSession()方法获得SessionId值,而且该方法既是创建也是获取(第一、二次…很智能自动判断)
在这里插入图片描述
(4)失效:在web.xml中,有时间配置,单位分钟
session-config>
session-iimeout>!30
/session-timeout>
/session-config>
(5)补充:启动后,默认进入index.jsp页面,然后可以通过:在这里插入图片描述
可以在加载时就跳转到指定页面
(6)因为value为object类型,所以想要int类型,需要包装,jsp实质是java,在(%%)里面可以写代码,输出也有两种方式,out.write
(),或者是 = 属性名,而且修改jsp页面代码,只需要刷新页面,修改servlet需要重启服务器
在这里插入图片描述
在这里插入图片描述
(7)清除session里的内容,首先获取session对象:
HttpSession session = request.getSession()
然后清空指定的session对象,清空user的数据:
session. removeAttribute( “user(key)”) (注意:这种只能清空Session里面的一个数据,不能全部清空)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/191690
推荐阅读
相关标签
  

闽ICP备14008679号