jsp: 全称javaServletPages servlet: result.jsp: Cookie就是服务器发送给客户端的 domain用来指定Cookie的域名!当多个二级域名共享时才有用 内容实现,一个jsp用来给客户端添加Cookie。另一个jsp来获取客户端返回的Cookie. 添加Cookie: 获取Cookie: AServlet:向session域中保存数据 保存: 获取: 案例相关页面和Servlet ps:只要用户没有关闭浏览器,Session就一直存在,那么保存在session中的用户信息也就一起存在!那么用户访问succ1和succ2都会通过 思维导图: LoginServlet: succ1.jsp: String getId():获取sessionId() int getMaxInactiveInterval():获取session的最大不活动时间(秒),默认为30分钟。当session在30分钟内没有使用,那么Tomcat会在session池中移除。 void invalidate():让sesion失效!调用这个让发会让session失效,当session失效后,客户端再次请求,服务端会给客户端创建一个新的session,并再响应。 boolean isNew():查看session是否为最新; web.xml中配置session的最大不活动时间: 这个类可以随机生成四个字母的验证码图片,并可以得到里面的字符串。 思维图: JSP指令的格式:<@指令名 attr1=”“attr2=””%>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的. 九个内置对象: include(静态包含) taglib(导入标签库): 两个属性: 这些jsp的动作标签,与html提供的标签有本质的区别。 内省图: 通过Bean Utils给JavaBean赋值: 通过map创建javabean对象: 删除域变量,如果不给出域,则会删除所有域中的指定对象,给出域后,就删除指定域中的变量名。 4.if:目录
一:jsp基础
1.jsp的作用
缺点:不适合设置html响应体,需要大量的response.getWriter().print(“<html>
“);
优点:动态资源,可以编程
缺点:html是静态页面,不能包含动态信息
优点:不用为输出html标签而发愁
优点:在原有的html基础上添加java脚本,构成jsp页面2.jsp和Servelt的分工
作为请求发起页面,例如显示表单、超链接。
作为请求结束页面,例如显示数据。
作为请求中处理数据的环节3.jsp的组成
输出语句里面能放什么他就能放什么。4.JSP和Servlet分工的案例
form.jsp:<form action="AServlet" method="post"> 整数1:<input type="text" name="value1" ></br> 整数2:<input type="text" name="value2"></br> <input type="submit" value="计算"> </form>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String value1=request.getParameter("value1"); String value2=request.getParameter("value2"); int sum=Integer.valueOf(value1)+Integer.valueOf(value2); request.setAttribute("sum", sum); System.out.println(request.getAttribute("sum")); request.getRequestDispatcher("result.jsp").forward(request, response); }
<body> <h>结果是:</h><% Integer result=(Integer)request.getAttribute("sum");%> <%=result %> </body>
5.JSP原理
当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个Servlet类)
然后再把Java编译成.class
然后再创建该类对象
最后调用它的service()fangfa
当第二次请求同一个jsp时,就会直接调用service()方法5.jsp注释
二:Cookie处理
1.Http协议与Cookie
responce.addHeader("Set-Cookie",“aaa=AAA”)
注意:Cookie是不能跨浏览器的!!!2.Cookie的用途
3.JavaWeb中使用Cookie
使用reponse发送Set-Cookie响应头
使用request获取Cookie请求头
使用reponse.addCookie()方法向浏览器保存Cookie
使用request.getCookies()向浏览器获取归还的Cookie4.Cookie详解
5.Cookie的跨域访问
例如,在www.baidu,com;xyz.baidu.com之间共享cookie时可以使用domain
cookie.setDomain(".baidu.com");
cookie.setPath("/");
6.Cookie的小案例
<h1>保存cookie</h1> <% Cookie cookie1 =new Cookie("aaa","AAA") ; Cookie cookie2=new Cookie("bbb","BBB"); response.addCookie(cookie1); response.addCookie(cookie2); %>
<h1>获取Cookie</h1> <% Cookie[] cookies=request.getCookies(); if(cookies!=null){ for(Cookie c:cookies){ out.print(c.getName()+":"+c.getValue()+"</br>"); } } %>
三:HttpSession
1.HTTPSession概述
2.HttpSession的作用
3.案例一:演示session中会话的多次请求中共享数据
Bservlet:向session域中获取数据<h1>向session中添加数据</h1> <% session.setAttribute("aaa", "AAA"); %>
<% String s=(String)session.getAttribute("aaa"); out.print(s); %>
4.案例二:演示保存用户登录信息
3.succ2.jsp:只有登录成功才能访问的页面。从Session域中获取用户信息,如果不存在,显示“您还没有登录”.存在则显示用户信息
login.jsp:<body> <!-- /* 获取客户端存在的cookie将它显示到用户名文本框中 */ --> <% String uname=""; Cookie []cs=request.getCookies(); if(cs!=null){ for(Cookie c:cs){ if(c.getName().equals("uname")){ //找到用户名 uname=c.getValue(); } } } %> <% String message=""; String msg=(String)request.getAttribute("msg"); if(msg!=null){ message=msg; } %> <h1>登录界面</h1> <font color="red" ><b><% out.print(message);%></b></font> <form action="/learn1JSP/LoginServlet" method="POST"> 用户名:<input type="text" name="username" value="<%=uname%>"></br> 密 码: <input type="text" name="password"></br> <input type="submit" value="提交"> </form> </body> </html>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求编码 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //获取请求参数 String username=(String) request.getParameter("username"); String password=request.getParameter("password"); System.out.println(username); System.out.println(password); //附加项:如果登录成功,将用户名保存到Cookie中,当用户再次登录时会自动显示用户名 if(!"xyz".equalsIgnoreCase(username)) {//请求成功,将用户信息存储到session中,并且重定向到succ1.jsp HttpSession session=request.getSession(); session.setAttribute("username", username); Cookie cookie=new Cookie("uname",username); cookie.setMaxAge(60*60*20);//设置Cookie的存活时间 response.addCookie(cookie); response.sendRedirect("/learn1JSP/session2/succ1.jsp"); }else {//请求失败,转发到succ2.jsp request.setAttribute("msg", "用户名或密码错误");//返回提示信息 request.getRequestDispatcher("/session2/login.jsp").forward(request, response); } }
<body> <% String username=(String)session.getAttribute("username"); if(username==null){ request.setAttribute("msg", "您还没有登录,不要冒充领导"); request.getRequestDispatcher("login.jsp").forward(request, response); return ; } %> <h1>succ1</h1> 欢迎<%= username%>来视察工作 </body>
5.HttpSession的原理
获取Cookie中的JSESSIONID:
1. 如果sessionId不存在,创建session,把session保存起来,把新创建的sessionId保存到cookie中。
2. 如果sessionId存在,通过sessionId查到session对象,如果没有查找到,创建session,把session保存起来,把新创建的sessionId保存到Cookie中。
3. 如果sessionId存在,通过sessionId查找到了session对象,那么就不会再创建session对象了。
4. 返回session。
如果创建了新的session,浏览器会得到一个包含了sessionId的Cookie,这个Cookie的生命为-1,即只在浏览器内存中存在。如果不关闭浏览器,那么Cookie在下次请求时,再次执行request。getSeesion()方法时,因为可以通过Cookie中的sessionId找到session对象,所以与上一次请求使用的是同一session对象。
第一个方法:如果session缓存中(如果cookie不存在),不存在session,那么返回null,而不会创建session对象。6.HttpSession的其他方法
<session-config>
<session-timeout>30</session-timeout>
</sessionconfig>
7.session之url重写
让网站所有的超链接、表单中都添加一个特殊的请求参数,即sesionId
这样服务器可以通过获取请求参数的到sessionId,从而找到session对象。
该方法会对url进行智能的重写;当请求中没有归还sessionid这个cookie,那么该方法会重写url,否则不重写!当然url必须是指向本站的url。四:验证码
1.生成图片
public class VerifyCode { private int w=72; private int h=35; private Random r=new Random(); private String []fontNames= {"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"}; //可选字符 private String codes="23456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRXTUVWXYZ"; //背景色 private Color bgColor =new Color(255,255,255); //验证码上的文本 private String text; //生成随机的颜色 private Color randomColor() { int red=r.nextInt(150); int green= r.nextInt(150); int blue=r.nextInt(150); return new Color(red,green,blue); } //生成随机的字体 private Font randomFont() { int index=r.nextInt(fontNames.length); String fontName=fontNames[index]; int style=r.nextInt(4);//生成随机的样式,0(无样式)1(粗体)2(斜体)3.(粗体加斜体) int size=r.nextInt(5)+24; return new Font(fontName,style,size); } //画干扰线 private void drawLine(BufferedImage image) { int num=3;//一共画三条 Graphics2D g2=(Graphics2D) image.getGraphics(); for(int i=0;i<num;i++) {//生成两个点的坐标 int x1=r.nextInt(w); int y1=r.nextInt(h); int x2=r.nextInt(w); int y2=r.nextInt(h); g2.setStroke(new BasicStroke(1.5F)); g2.setColor(Color.BLUE); g2.drawLine(x1,y1,x2,y2); } } //随机生成一个字符 private char randomChar() { int index=r.nextInt(codes.length()); return codes.charAt(index); } //创建BufferImage private BufferedImage createImage() { BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); Graphics2D g2=(Graphics2D) image.getGraphics(); g2.setColor(this.bgColor); g2.fillRect(0,0,w,h); return image; } //调用这个方法得到验证码 public BufferedImage getImage() { BufferedImage image=createImage();//创建图片缓冲区 Graphics2D g2=(Graphics2D) image.getGraphics();//得到绘制环境 StringBuilder sb=new StringBuilder();//用来装载生成的验证码文本 //向图片中画4个字符 for(int i=0;i<4;i++) { String s=randomChar()+"";//随机生成一个字符 sb.append(s); float x=i*1.0F*w/4;//设置当前字符的x轴坐标 g2.setFont(randomFont());//设置随机字体 g2.setColor(randomColor());//设置随机颜色 g2.drawString(s,x,h-5);//画图 } this.text =sb.toString(); drawLine(image);//添加干扰线 return image; } //返回验证码图片上的文本 public String getText() { return text; } //保存图片到指定的输出流 public static void output (BufferedImage image,OutputStream out) throws IOException { ImageIO.write(image,"JPEG",out); } }
2.登录功能之添加验证码
VerifyCodeServlet:由于代码只是对上面的案例进行了补充,所以这里只写一个如果在客户端生成验证码图片吧。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置编码方式 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); /* * 1.向客户端返回图片 * 2.将图片中的文本信息保存到session域中 */ VerifyCode vc=new VerifyCode(); BufferedImage image=vc.getImage(); request.getSession().setAttribute("session", vc.getText()); VerifyCode.output(image, response.getOutputStream()); }
五:JSP指令
1.JSP指令概述
JSP 中有三大指令:page、inclue、taglib,最为常用也是最为复杂。2.page指令
如果两个属性值提供一个,那么另一个的默认值为设置的那一个。
如果两个属性都没有设置,那么默认为iso
<error-page>
在web.xml中进行配置,当页面出现指定状态错误或指定类型错误会跳转到相应的界面。 <error-page> <error-code>400</error-code> <location>/error/101</location> </error-page> <error-page> <exception-type>java.lang.RuntimeException</exception-type> <location>/error/100</location> </error-page>
Servlet中有三大域,而JSP中有四大域,它就是最后一个域对象!
pageContext:一个JSP页面!这个域是在当前jsp页面和当前jsp页面使用的标签之间共享数据!
– 域对象
– 代理其他域
– 全域查找:pageContext.findAttribute(‘xxx’);从小到大,依赖查找。
– 获取其他8个内置对象。3.include和laglib指令
3.JSP动作标签
<jsp:forward>
:转发!他与RequestDispatcher的forward方法是一样的,一个在Servlet中使用,一个在jsp中使用!<jsp:include>
:转发!他与RequestDispatcher的include方法是一样的,一个在Servlet中使用,一个在jsp中使用!<jsp:param>:
它用来作为forward和include的子标签!用来给转发或包含的页面传递参数!六:JavaBean
1.BeanUtils的使用
public static void main1(String[] args) { //通过类名得到一个对象 String className="net.xyz.domain.Person"; try { Class clase=Class.forName(className); Object bean=clase.newInstance(); BeanUtils.setProperty(bean, "name", "张三"); BeanUtils.setProperty(bean, "age", 18); BeanUtils.setProperty(bean, "gander", "男"); System.out.println(bean.getClass()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
//根据map生成一个Javabean,要求map中的属性要和Bean中的属性一致 public static void main3(String[] args) { Map<String,String> map=new HashMap<String, String>(); map.put("username","张三"); map.put("password","123"); map.put("username","张三"); map.put("password","123"); User user=new User(); try { BeanUtils.populate(user, map); System.out.println(user); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
2.jsp中与javaBean相关的标签
<jsp:useBean>
:创建或查询bean,如果没有就创建,如果有就查询
<jsp:useBean id="user1" calss="net.xyz.domain.user" scpoe="session"/>
<jsp:setProperty>
:设置属性
<jsp:serProperty property ="username" name="user1 value="admin"/>
<jsp:getProperty>
:得到属性
<jsp:getProperty property="username" name="user1"/>
七:EL表达式入门及EL函数库
1.EL入门
EL代替的的是<%=%>,也就是说EL只能做输出!
${xxx},
全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null
${pageScope.xxx}、${reqeustScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},
指定域获取属性!2.EL函数库
八:JSTL
1.JSTL概述
core:核心库
fmt: 格式化:日期、数字
sql:过时了
xml:过时了
jar包
在jsp页面中:<%@taglib perfix=“前缀” url=“路径”%>2.core库(c标签)
<% request.setAttribute("code", "<script>alert('hello')</script>"); %> ${code } <c:out value="${code }" escapeXML="true"/>
escapeXml:默认值为true,表示转义 2. set:创建域的属性
<c:set var="a" value="bb" scope="request"/>
<c:remove var="a" scope="request"/>
3. url: <c:url value="/jstl.jsp">//自动补全项目名 <c:param name="zhangsan " value="jj"/>//在url后面添加参数 </c:url >
5. choose:
6.forEach:
它用来循环遍历数组、集合
他还可以用计数方式来循环
循环变量:
7.fmt库:格式化库
格式化时间:
格式化数字:
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算