赞
踩
目录
10.1 expression language :el表达式
Java web程序,类通过继承HttpServlet,重写service方法,配置这个servlet的url地址,把Java web程序,部署到tomcat软件中,然后启动tomcat软件,就可以通过浏览器访问url地址了
servlet是sun公司指定的一种用于扩展web服务器的功能组件规范
接收前端提交的数据
响应结果
浏览器与服务器建立连接(ip,port)
浏览器向服务器发送请求(请求数据包)
服务器tomcat解析请求数据包,创建request,response对象,将请求的参数保存在request对象中
tomcat创建Servlet对象
调用service(request,response)
服务器响应结果
浏览器解析响应结果,渲染到网页上
断开连接
测试地址是否符合要求 , 静态资源是否被拦截。
当浏览器发送请求的时候, tomcat 通过web.xml文件, 优先 访问servlet ,找到servlet类,就访问其service方法;如果没有servlet ,就 找静态资源, 如果找不到静态资源, 就响应404 .
应用程序执行期间都是同一个ServletContext对象,可以在所有请求中,获取该对象,获取该对象中的数据,操作该对象中的数据
- //servletContext:容器运行程序期间都有效,可以共享数据。
- // 容器停止运行,servletContext就无效了。
- servletContext servlContext = request.getServletContext();
- // 获取数据
- Object total = servletContext.getAttribute("total");
- // 设置数据
- servletContext.setAttribute("total" , 1);
servlet中数据可以存储的区域:
servlet的service方法中的变量
request对象:可以通过转发的方式,把数据转发到其他的数据当中
session对象:可以让一个登录用户在会话期间,直接使用session中的数据
servletContext对象:可以让所有请求在容器运行期间,直接使用servletContext中的数据
1. 通信方式
2. 数据包格式
3. 请求方式
请求参数在url后显示
数据量比较小
不安全
不支持文件上传
get请求:浏览器地址直接访问; from表单中的method设置为get ; 超链接 ; 异步请求设置为get
数据存放在消息体中
数据量大
安全
能够支持文件上传
post请求:form表单中method属性设置为post ; 异步请求设置为post
jsp是sum公司指定的一种用于服务器端的动态页面的技术规范,也是一种组件,依赖于容器(tomcat)进行运行。
jsp不需要在web.xml中进行配置,直接通过它的路径和文件名进行访问
jsp是一种运行在服务器端的一个页面,它里面可以包含html,嵌入一些Java代码,通过在tomcat容器中经过解析,输出html页面
servlet :数据处理和数据的展示(拼html 标签)
servlet+jsp:servlet做数据处理,jsp做数据的展示
servlet做数据展示的时候,不方便(编写代码的时候,维护代码的时候)
jsp:让数据的处理和数据的展示进行分离(解耦)
jsp的本质就是servlet
第一次访问jsp页面的时候,会将jsp页面转换为一个servlet类
html , js ,css 这种内容就直接使用输出语句拼接
其他和Java相关的内容就按Java语法规则转换
转发:
一个请求完成部分功能,希望剩下的功能由另一个请求完成,这种时候使用转发
一般使用servlet完成数据处理,转发数据到jsp页面,实现数据的展示
转发可以通过request对象,把数据转发到另一个请求
转发的本质就是一个请求,因为request对象不变(可以共享request中的数据)
转发之后,浏览器地址显示的第一个请求的地址
重定向:
某个请求完成之后,希望浏览器自动发起另一个请求,则使用重定向
使用重定向的时候,浏览器消息头中接收到一个302状态码和url地址,浏览器根据这个状态码和url地址,自动发起请求
重定向是完全不同的两个请求,是两个request对象,两个请求无法共享
浏览器中显示的是第二个请求的地址
路径的写法:
资源文件的路径(.js , css , 图片),表单提交的路径,超链接,重定向的路径,建议使用绝对路径
转发的路径,建议使用相对路径。
servlet 的绝对路径 :/application context/servlet path. (application context 项目部署的时候设置的项目访问路径)
实现一个登录功能,记住密码
提供一个用户可以输入用户名和密码的界面,有一个选项可以选择是否记住密码。
提供一个请求,完成登录校验。( servlet) 根据用户名和密码查询数据库,返回结果(数据库的操作)
密码怎么记住???
使用cookie技术,然后把用户名和密码保存在浏览器中
1. 登录的时候,如果用户选择了记住密码,需要把用户的用户名和密码给保存在cookie中,然后给浏览器,帮忙记住用户名和密码。
2. 每次访问登录界面的时候,就需要把cookie中的数据获取出来,然后设置到这个输入框中
5.1cookie的使用
服务器端创建cookie对象,再添加到浏览器中
浏览器保存响应结果中邀请你需要add的cookie对象,每个cookie和自己的请求的域名一致
浏览器每次给服务器发送请求的时候,就会将请求对应的域名中保存的cookie数据一起发送到服务器
服务器通过request获取cookie对象的数据,根据cookie的name找到value值,并使用value
setMaxAge(正数) :有效期就是当前时间+正数的秒数
setMaxAge(0):立即失效
没有调用setMxaAge或者setMaxAge(负数):表示会话期间有效,浏览器关闭,cookie失效了
会话期间:浏览器第一次访问某个服务器,但浏览器关闭期间称为一个会话
用户可以删除cookie
用户可以禁止使用cookie
存储小于4k的内容
cookie的个数不能超过300个
只能存储字符串
cookie不安全
session对象的获取,和请求中从浏览器中传输到服务器的cookie(JSESSIONID)有关系
根据JSESSION这个cookie,去查找当前请求对应的session对象
如果没有设置有效期,默认有效期就是30分钟,如果会话结束了,session一般就无效了
invalidate方法设置session无效
登录校验:
- public class LoginServlet extends HttpServlet {
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //编码转换
- req.setCharacterEncoding("utf-8");
- resp.setContentType("text/html;charset=utf-8");
- //获取参数
- String uname = req.getParameter("uname");
- String uname = req.getParameter("upwd");
- String save = req.getParameter("save");
- //判断用户名密码是否正确,正确就重定向到list.do
- UserService service = new UserService();
- User user = new User();
- user.setUname(Uname);
- User.setUpwd(Upwd);
- User us = service.findUser(user);
- if(us!=null){
- //登录成功,把用户信息保存到session对象中
- HttpSession session = req.getSession; //获取session对象
- session.setMaxInactiveInterval(5*60); // 设置session的有效期为5分钟
- session.setAttribute("myuser" , us); // 把数据设置到session对象中。
-
- if(save!=null){ //需要记住密码
- Cookie cookie = new Chookie("username",uname);
- Cookie cookie1 = new Chookie("password",upwd);
- cookie.setMaxAge(180*24*60*60); // 半年有效期
- cookie1.setMaxAge(180*24*60*60);
- resp.addCookie(cookie);
- resp.addCookie(cookie1);//通知浏览器
- }else{ //不需要被记住,就删除原来的cookie
- Cookie[] cookies = req.getCookies();
- for(Cookie c: cookies){
- if(c.getName().equals("username")||c.getName().equals("password")){
- c.setMaxAge(0) ;// 设置cookie立即无效
- resp.addCookie(c);
- }
- }
- }
- resp.sendRedirect(req.getContextPath() +"/list.do");
- }else {
- // 不正确, 转发index.jsp
- resp.sendRedirect(req.getContextPath() + "/index.jsp");
- }
其他请求中,获取session中的数据,进行判断
- public class BookInfoServlet extends HttpServlet {
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //1.设置编码
- req.setCharacterEncoding("utf-8");
- resp.setContentType("text/html;charset=utf-8");
- //2.获取参数
- BookInfoService service = new BookInfoService();
- // -- ServletPath : 访问servlet 的路径(配置的servlet的url)
- String servletPath = req.getServletPath();
- //先判断用户是否登录过
- HttpSession session = req.getSession();
- Object myuser = session.getAttribute("myuser");
- if (myuser==null){
- resp.sendRedirect(req.getContextPath()+"/index.jsp"); //没有登陆过,直接重定向到登录界面
- return; //阻止后续代码的执行
- }
- ...
- ...
退出系统代码
jsp:
<a style="float: right" href="<%=request.getContextPath()%>/exit.do">退出系统</a>
servlet:
- if (servletPath.equals("/exit.do")) {
- session.invalidate();//设置session无效
- //重定向到登录页面
- resp.sendRedirect(req.getContextPath()+"/index.jsp");
-
- }
sun公司提供的一种特殊的组件规范,主要用于拦截容器的调用过程
规范:实现 Filter接口(实现 doFilter 方法)
特殊:过滤器不能单独使用,需要和servlet进行配合使用
组件:实现软件的某个模块功能,需要在容器中运行
容器:一个特殊的软件,可以运行组件
支持多个Filter ,已在web.xml中的配置的顺序进行过滤
实例化(调用构造函数)-- 1次
初始化(调用init函数) -- 1次
就绪(调用doFilter函数) -- 任意次
销毁(调用destroy函数) -- 1次
内置对象名字 | 作用 |
out | 在jsp上输出内容 |
pageContext | 可以存储数据,这个数据只能在本页使用 |
request | 请求对应的request对象,获取request中的数据,在jsp页面使用 |
session | session对象,服务器端状态管理 |
application | 存储数据,可以在整个程序运行期间使用 |
response | 响应结果的对象 |
page | 类似于this |
config | 初始化参数,存储在config中 |
exception | 异常对象,需要设置isErrorPage="true" |
el表达式,主要用于替换掉<%=xx%>输出语句
在jsp页面中,可以直接通过el表达式,获取到存储在pageContext,request ,session ,application中的数据
${对象} --[<%=xx%>]
${对象,属性名} --[<%=xx.getxxx()%>]
对象要符合Java bean 的规范(描述类的属性私有化,提供公开的get/set方法。比如属性名叫abc,对应的方法getAbc/setAbc)
$(对象,属性名),这里的本质调用属性名对应的get方法
从pageContext , request , session , application 等对象中,查找需要输出的对象
pageContext , request , session , application 如果出现了同名的key ,那么查找按小范围优选的原则查找
可以通过pageScope , requestScope , sessionScope , applicatiorlScope指定查找范围。
条件运算 : 结果是Boolean类型
数学运算:运算结果
逻辑运算 :结果是Boolean
empty运算 判断是否为空 :结果是Boolean
如果没有key,输出的是空字符串
如果有这个key,但是key对应的value值是null,输出的是空字符串
其他情况,输出的是key对应的value值
jstl标签,用于替换掉jsp页面上的<%java代码%>
jsp页面上,如果有太多的java代码,对于jsp页面的修改,维护,前端人员都不友好
jstl使用:
导入jstl的jar包
在jsp页面上,使用taglib指令,把想用的标签,导入到jsp页面上,让jsp支持标签的使用
taglib:jsp固定的导入标签库的指令
prefix:前缀,给标签添加上前缀之后,可以和其他重名标签进行区分
uri:标签的访问地址
head.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <h3 style="color: green">xx , 下午好, 欢迎使用本系统!</h3>
其他jsp
<%@ include file="head.jsp"%>
在java web 的学期阶段,很多细节容易忽略,然后记住的东西太少,在编写代码的时候很多代码也记不住,并且很多知识点没有办法用自己的理解总结出来,还是缺乏理解。在这个阶段的周测中也让我明白了很多不足的地方,平时的学习方法应该改变,不能只是一味的在老师的基础上改代码,应该从头要自己把思维理清楚过后才进行代码的编写,下周继续努力,加油。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。