预习博客4

JSP

Java server page,SUN公司提供的动态网页编程技术,是Java web服务器端的动态资源,其根本是一个简化的Servlet设计,相比HTML,jsp技术允许在页面中嵌套Java代码,为用户提供动态数据


文章目录

  • JSP
  • 一、JavaWeb简介
  • 二、Jsp基础语法
    • 1.Jsp页面元素构成
    • ①指令元素
      • 1,page指令
      • 2,include指令
      • 3,taglib指令
    • 2.JSP页面元素
      • ①Jsp注释
      • ②Jsp脚本
      • ③Jsp声明
      • ④Jsp表达式
      • ⑤Jsp页面生命周期
      • ⑥九九乘法表
  • 三,JSP内置对象
    • 1,内置对象简介
    • 2,四种作用域范围
    • 3,out
    • 4,request/response
      • ①get/post
      • ②request对象
      • ③response对象
    • 5,session
      • ①Session对象
      • ②Session的生命周期
    • 6,application
    • 7,page对象
    • 8,pageContext对象
    • 9,Config对象
    • 10,Exception对象
  • 四,JavaBeans
    • 1,简介
    • 2,JavaBean元素
      • ①JSP动作
      • ②在JSP页面中如何使用Javabeans
        • (1)像使用普通的Java类一样,创建JavaBean实例
        • (2)在JSP页面中通常使用JSP动作标签使用JavaBean
        • (3)Javabean的四个作用域范围
      • (4)Model1


这个是本人在学习当中的笔记啦,保持持续更新~

一、JavaWeb简介

1,WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录
2,web.xml,项目部署文件
3,classes文件夹,用以放置*.class文件
4,lib文件夹,用于存放需要的jar包

二、Jsp基础语法

1.Jsp页面元素构成

指令,表达式,小脚本,声明,注释,静态内容

<%@ page 属性1=“属性值” 属性2=“属性值1,属性值2”…属性n…%>
language属性 import属性 contentType属性

①指令元素

1,page指令

通常位于jsp页面的顶端,同一个页面可以有多个page指令
<%@ page language=“java” import=“java.util.*” contentType=“text/html;charset=utf-8”%>
语言,引入的包,文件类型和字符编码

2,include指令

将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句

3,taglib指令

使用标签库定义新的自定义标签,在JSP页面中启用定制行为

2.JSP页面元素

①Jsp注释

<!--html注释-->//HTML注释,客户端可见
<%--jsp注释-->//JSP注释,客户端不可见
//Java脚本注释,单行注释
/**/Java脚本注释,多行注释

②Jsp脚本

<% Java代码%>

③Jsp声明

<%!
	String s="张三"
	int add(int x,int y){
		return x+y;
	} 
%>

④Jsp表达式

表达式语句是不以分号结束的

<br>
你好,<%=s %>//调用上面的
x+y=<%=add(10,5) %>

⑤Jsp页面生命周期

用户发出请求index.jsp,判断是否是第一次请求,如果是就生成字节码文件(通过什么什么什么),不是就直接访问字节码文件,最后解析执行,jspService()
(第一次请求一个jsp页面时,首先被执行的方法是构造方法)

<%!
	String s="张三"
	int add(int x,int y){
		return x+y;
	} 
%>

⑥九九乘法表

<%!
	<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body> 
	<%!
		String printMultiTable(){
			String s="";
			for(int i=1;i<=9;i++){
				for(int j=1;j<=i;j++){
					s+=i+"*"+j+"="+(i*j)+"    ";
				}
				s+="
"
; } return s; } void printMultiTable2(JspWriter out)throws Exception{ String s=""; for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ out.println(i+"*"+j+"="+(i*j)+"    "); } out.println("
"
); } } %> <h1>九九乘法表</h1> <hr> <%=printMultiTable()%> <br> <% printMultiTable2(out); %> <br> </body> </html> %>

三,JSP内置对象

1,内置对象简介

JSP内置对象是web容器创建的一组对象,不使用new关键字就可以使用的内置对象
web程序的请求响应模式:用户发送请求,服务器给用户响应

out request response session application (不太常用的:page pageContext exception config)

buffer缓冲区:内存中一块区域用来保存临时数据

2,四种作用域范围

3,out

out对象是JspWriter类的实例,向客户端输出内容常用的对象
1,void println()//向客户端打印字符串
2,void clear()//清除缓冲区的内容,如果再flush之后调用会抛出异常
3,void clearBuffer()//清除缓冲区的内容,如果在flush之后调用不会抛出异常
4,void flush()//将缓冲区的内容输出到客户端
5,int getBufferSize()//返回缓冲区以字节数的大小,如不设缓冲区则为0
6,int getRemaining()//返回缓冲区还剩余多少可用
7,boolean isAutoFlush()//返回缓冲区的时候,是自动清空还是抛出异常
8,void close()//关闭输出流

<body> 
	<h1>out内置对象</h1>
	<%
		out.println("

静夜思

"
); //out.flush//结果不会有不同,只是缓冲区剩余大小会变 //out.clear//只会打印到前面一句,因为会抛异常,后面的就不执行了 out.println("床前明月光
"
); %> 缓冲区大小:<%=out.getBufferSize() %>byte<br> 缓冲区剩余大小:<%=out.getRemaining() %>byte<br> 是否自动清空缓冲区:<%=out.isAutoFlush() %><br> </body>

4,request/response

①get/post

//

//表单有两种提交方式:get与post

get:安全性较低(以明文的方式通过URL提交数据,数据在URL(地址栏)中可以看到)但是效率相比高,适合提交数据量不大,安全性不高的数据。比如:搜索,查询等功能
post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册,修改,上传等功能

②request对象

表示客户端的请求,封装在request对象中,request对象具有请求域,即完成客户端请求前,该对象一直有效

<%!
	String getParameter(String name)//返回name指定参数的参数值
	String[] getParameterValues(String name)//返回包含参数name的所有值的数组
	void setAttribute(String,Object)//存储此请求中的属性
	object getAttribute(String name)//返回指定属性的属性值
	String getContentType()//得到请求体的MIME类型
	String getProtocol()//返回请求用的协议类型及版本号
	String getServerName()//返回接受请求的服务器主机名
	int getServerPort()//返回服务器接收此请求所用的端口号
	String getCharacterEncoding()//返回字符编码方式
	void setCharacterEncoding()//设置请求的字符编码方式
	int getContentLength()//返回请求体的长度(以字节数)
	String getRemoteAddr()//返回发送此请求的客户端IP地址
	String getRealPath(String path)//返回一虚拟路径的真实路径
	String request.getContextPath()//返回上下文路径
%>
<body>
    <h1>用户注册</h1>
    <hr>
    <% 
       int number=-1;
       //说明用户第一次访问页面,计数器对象还未创建
       if(application.getAttribute("counter")==null)
       {
           application.setAttribute("counter", 0);
       }
       number = Integer.parseInt(application.getAttribute("counter").toString());
       number++;
       application.setAttribute("counter", number);
    %>
    <!-- <form name="regForm" action="request.jsp" method="post"> -->
    <form name="regForm" action="response.jsp" method="post">
    <table>
      <tr>
        <td>用户名:</td>
        <td><input type="text" name="username"/></td>
      </tr>
      <tr>
        <td>爱好:</td>
        <td>
           <input type="checkbox" name="favorite" value="read">读书
           <input type="checkbox" name="favorite" value="music">音乐
           <input type="checkbox" name="favorite" value="movie">电影
           <input type="checkbox" name="favorite" value="internet">上网
        </td>
      </tr>
      <tr>
         <td colspan="2"><input type="submit" value="提交"/></td>
      </tr>
    </table>
    </form>
    <br>
    <br>
    <a href="request.jsp?username=李四">测试URL传参数</a>
    
    <br>
    <br>
    <center>
             您是第<%=number %>位访问本页面的用户。
    </center>
  </body>
<body>
    <h1>request内置对象</h1>
    <% 
       request.setCharacterEncoding("utf-8"); //解决中文乱码问题,无法解决URL传递中文出现的乱码问题。
       request.setAttribute("password", "123456");
    
    %>
        用户名:<%=request.getParameter("username") %><br>   
        爱好 :<% 
           if(request.getParameterValues("favorite")!=null)
           {
	           String[] favorites = request.getParameterValues("favorite");
	           for(int i=0;i<favorites.length;i++)
	           {
	              out.println(favorites[i]+"  ");
	           }
	        }
        %> <br>
         密码:<%=request.getAttribute("password") %><br> 
         请求体的MIME类型:<%=request.getContentType() %><br>
         协议类型及版本号:  <%=request.getProtocol() %><br>
         服务器主机名 :<%=request.getServerName() %><br>
         服务器端口号:<%=request.getServerPort() %><BR>
         请求文件的长度 :<%=request.getContentLength() %><BR>
         请求客户端的IP地址:<%=request.getRemoteAddr() %><BR>
         请求的真实路径:<%=request.getRealPath("request.jsp") %><br>
         请求的上下文路径:<%=request.getContextPath() %><BR>         
                 
         
                   
  </body>

③response对象

包含了响应客户请求的有关信息,但在JSP中很少直接使用,它具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。

<%!
	String getCharacterEncoding()//返回相应用的是何种字符编码
	void setContentType(String type)//设置响应的MIME类型
	PrintWriter getWriter()//返回可以向客户端输出字符的一个对象(注意比较 PrintWriter与内置out对象的区别)
	sendRedirect(java.lang.String location)//重新定向客户端的请求
%>

5,session

session表示客户端与服务器的一次对话,Web中的session指的是用户在浏览某个网站时所花费的时间,session实际上是一个特定的时间概念

在服务器的内存中保护着不同用户的session(和用户一一对应)

①Session对象

long getCreationTime()//返回session创建时间
public String getId()//返回session创建时JSP引擎为它设的唯一ID号
public Object setAttribute(String name,Object value)//使用指定名称将对象绑定到此会话
public Object getAttribute(String name)//返回与此会话中的指定名称绑定在一起的对象,如果没有,返回null
String[] getValueNames()//返回一个包含此session种所有可用属性的数组
int getMaxInactiveInterval()//返回两次请求间隔多长时间此session被取消(单位秒)
//page1
<h1>session内置对象</h1>
	<hr>
	<%
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		
		Date d=new Date(session.getCreationTime());
		session.setAttribute("username","admin");
		session.setAttribute("password","123456");
		session.setAttribute("age","20");
		
		//设置当前session最大生成期限单位为秒
		session.setMaxInactiveInterval(10);//10秒钟
	%>
	Session创建时间:<%=sdf.format(d)%><br>
	Session的ID编号:<%=session.getId() %><br>
	从Session中获取用户名<%=session.getAttribute("username") %><br>
	<a href="session_page2.jsp" target="blank">跳转到Session_page2.jsp</a>

//page2
<body>
	<h1>session内置对象</h1>
	<hr>
	<%
		/* SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		
		Date d=new Date(session.getCreationTime());
		session.setAttribute("username","admin"); */
	%>
	
	Session的ID编号:<%=session.getId() %><br>
	从Session中获取用户名<%=session.getAttribute("username") %><br>
	Session中保存的属性有:<%
						String[] names=session.getValueNames();
						for(int i=0;i<names.length;i++){
							out.println(names[i]+"  ");
						}
	
	%><br>

</body>

②Session的生命周期

创建阶段:每一个会话对应一个sessionID
活动阶段:某次会话中通过超链接打开新页面属于同一次会话 ;只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话;除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话

(即使创建了新的会话,旧的SessionID仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验)

销毁阶段:调用session.invalidate()方法;Session过期(超时);服务器重新启动(tomcat默认session超时时间为30分钟)

6,application

application对象实现了用户间数据的共享,可存放全局变量。
application开始于服务器的启动,终止于服务器的关闭
在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作
在任何地方对application对象属性的操作,都将影响到其它用户对此的访问
服务器的启动和关闭决定了application对象的生命
application对象是ServletContext类的实例

public Object setAttribute(String name,Object value)//使用指定名称将对象绑定到此会话
public Object getAttribute(String name)//返回与此会话中的指定名称绑定在一起的对象,如果没有,返回null
Enumeration getAttributeNames()//返回所有可用属性名的枚举
String getServerInfo()//返回JSP(SERVLET)引擎名及版本号
<body>
	<h1>application内置对象</h1>
	<%
		application.setAttribute("city","北京");//方法参数第一个为字符串,第二个参数为需要保存的对象
		application.setAttribute("postcode","10000");
		application.setAttribute("email","[email protected]");
		
		
		
	%>
	所在城市是:<%=application.getAttribute("city") %><br>
	application中的属性有:<%
		Enumeration attributes=application.getAttributeNames();
		while(attributes.hasMoreElements()){
			out.println(attributes.nextElement()+"  ");
		}
	
	
	%><br>
	JSP(SERVLET)引擎名及版本号:<%=application.getServerInfo() %><br>
	
	
</body>

7,page对象

page对象就是指当前JSP页面本身,有点像类中的this指针,它是java.lang.Obgect类的实例

class getClass()//返回此Object的类。
int hashCode()//返回Object的hash码。
 Boolean equals(Object obj)//判断此Object是否与指定的Object对象相等。
 void copy(Object obj)//把此Object拷贝到指定的Object对象中。
 Object clone()//克隆此object对象。
 String toString()//把Object对象转换成String类的对象。
 void notify()//唤醒一个等待的线程。
 void notifyAll()//唤醒所有等待的线程。
 void wait(int timeout)//使一个线程处于等待直到timeout结束或被唤醒。
 void wait()//使一个线程处于等待直到被唤醒。

8,pageContext对象

pageContext对象提供了对JSP页面所有的对象及名字空间的访问
pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值
pageContext对象相当于页面中所有功能的集大成者
pageContext对象的本类名也pageContext

JspWriter getOut() //返回当前客户端相应被使用的JspWriter流(out)
HttpSession getSession() //返回当前页面中HttpSession对象(session)
Object getPage() //返回当前页面的Object对象(page)
ServletRequest getRequest() //返回当前面的ServletRequest对象(request)
servletResponse getResponse() //返回当前页的ServletResponse对象(response)
void setAttribute(Strign name, Object attribute) //设置属性及属性值
Object getAttribute(String name ,int scope) //在指定范围内取属性值
int getAttributeScope(String name) //返回某属性的作用范围
void forward(String relativeUrlPath) //使当前页面跳转到另外一个页面(服务器转发)
void include(String relativeUrlPath) //在当前位置包含另一个文件

9,Config对象

config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时要用的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

 ServletContext getServletContext()//返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name)//返回初始化参数的值
Enumeration getInitParameterNames()//返回Servlet初始化所需所有参数的枚举

10,Exception对象

exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。它实际上时java.lang.Throwable的对象

String getMessage()// 返回描述异常的信息
String toString()// 返回关于异常的简短描述信息
void printStackTrace()// 显示异常及其栈轨迹
Throwable FillInStackTrace()// 重写异常的执行栈轨迹

四,JavaBeans

1,简介

就是符合某种特定的规范的Java类。使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性

设计原则:
①,公有类(public)
②,无参的公有的构造方法
③,属性私有(private)
④,getter和setter方法

2,JavaBean元素

①JSP动作

JSP动作元素,动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性,可选的内容,与开始标签匹配的结束标签

②在JSP页面中如何使用Javabeans

(1)像使用普通的Java类一样,创建JavaBean实例
package com;
/*
 *用户类
 **/

public class Users {//公有类

    private String username;//属性私有化
    private String password;//属性私有化
    //保留此默认的构造方法
    public Users(){

    }
    //所有的私有属性用getter和setter封装

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

<%
    Users user=new Users();
    user.setUsername("admin");//设置用户名
    user.setPassword("123456");//设置密码
  %>
  <h1>使用普通方式创建javabean的实例</h1>
  <hr>
  用户名:<%=user.getUsername()  %><br>
  密码:<%=user.getPassword()  %><br>

(2)在JSP页面中通常使用JSP动作标签使用JavaBean

useBeans动作
在jsp页面中实例化或者在指定范围内使用javabean

setProperty动作
给已经实例化的Javabean对象的属性赋值,一共有四种形式
//跟表单关联
//跟表单关联
//手工设置
//跟request参数关联

getProperty动作
获取指定Javabean对象的属性值

(3)Javabean的四个作用域范围

使用useBeans的scope属性可以用来指定javabean的作用范围

page//仅在当前页面有效
request//可以通过HttpRequest.getAttribute()方法取得JavaBean对象
session//可以通过HttpSession.getAttribute()方法取得JavaBean对象
application//可以通过application.getAttribute()方法取得JavaBean对象

(4)Model1

Model1模型出现前,整个Web应用的情况:几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应
(弊端:在界面层充斥着大量的业务逻辑的代码和数据访问层的代码,Web程序的可扩展性和可维护性非常差)


你可能感兴趣的:(java)