java web入门案例,一文入门Java Web

前言

Java Web属于JAVAEE 方向,一般为服务器端的程序应用。指使用java语言对web进行开发,而jsp服务于Java Web开发。

简介

JSP全称Java Server Pages,是一种动态网页开发的标准。当浏览器访问一个jsp页面时,jsp引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,再由Servlet引擎加载编译后的代码并执行,把执行结果返回给客户端。

第一个Java Web 应用程序

使用eclipse创建项目,编写第一个java web应用程序。

image.png

WebContent 为web应用程序的根目录

WEB-INF 存放java包和驱动

META-INF 用来配置应用程序、扩展程序等等

访问该页面

image.png

JSP语法

jsp声明

在jsp页面声明变量和方法

jsp表达式

在jsp页面执行的表达式

注:表达式不以分号为结束

jsp注释

JSP是嵌入在HTML语言中,同样可以使用HTML注释

右击源代码可显示内容,完全暴露给用户。

this is jsp comments

--%>

查看源代码并不会显示。

JSP程序段中的注释

//this is comments

/*this is comments*/

%>

查看源代码也不会显示,同样适用。

jsp生命周期

jsp生命周期大概需要以下阶段

编译阶段

当浏览器请求jsp页面时,jsp引擎首先会编译这个文件。而编译这个文件需要解析jsp文件、将jsp转化为servlet、编译servlet。

初始化阶段

载入jsp文件后,在请求之前调用jspInit()方法进行初始化。

执行阶段

当jsp页面完成初始化后,jsp引擎会调用_jspService()方法。然后和请求行为进行交互。

销毁阶段

当jsp页面从容器移除,调用jspDestroy()方法进行销毁。

JSP指令

jsp指令用来设置jsp页面相关的属性。

常用的是page指令、include指令、taglib指令。

page指令

主要用来定义JSP当前的全局属性,位于页面的最上方。

常见属性有:

language 属性,指定jsp页面使用的脚本语言;

contentType 属性,指定jsp页面的编码格式,默认ISO8859编码格式,建议UTF-8编码;

import 属性,设置默认导入的java类;

pageEncoding 属性,jsp文件本身的编码;

include指令

将外部文件嵌入到当前jsp语句中,这个web文件可以是jsp文件、html文件。同时解析页面的jsp语句。

JSP动作元素

动作元素在请求处理的时候起作用,用XML语法编写。

forward元素

把请求转发到一个新的页面。

等同于

request.getRequestDispatcher("login.jsp").forward(request,response);

注意forward指令下面的内容不会输出。

举例登录页面,访问index.jsp将调转到login.jsp页面。

index.jsp

pageEncoding="UTF-8"%>

login.jsp

pageEncoding="UTF-8"%>

login

String userName = request.getParameter("username");

String passWord = request.getParameter("password");

out.println("用户名:"+userName);

out.println("
");

out.println("密码:"+passWord);

%>

login.jsp接收到username、password参数

image.png

include元素

包含静态和动态文件。

语法格式

flush 表示是否从缓冲区读取。默认为false。

举例,传递bgcoloe颜色参数到body.jsp

body.jsp

hello

bgcolor参数通过指令传递了进来。

image.png

附加

include 指令是包含页面的源代码,转化为一个servlet

include 动作是包含的页面的输出结果,主页面和被包含页面是两个独立的servelet。

useBean元素

用来在jsp页面中实例化或指定范围内使用javabean:

需要首先在src目录创建包名。

image.png

这里创建com.po包,Users类

Users.java

package com.po;

public class Users {

private String username;

private String password;

//保留默认的构造方法

public Users() {

}

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;

}

}

再在useBean元素的class属性指定包名。

bean.jsp

pageEncoding="UTF-8"%>

useBean动作创建javaBean

用户名:

密码:

因为用户名、密码没有进行初始化,所以为null。

image.png

setProperty元素

给实例化的JavaBean对象的属性赋值。

可以通过表单赋值也可以通过手工设置。

这里以手工设置用户名、密码,还是上面的实例:

pageEncoding="UTF-8"%>

useBean动作创建javaBean

用户名:

密码:

image.png

JSP九大隐式内置对象

Out对象

out对象是JspWriter类的实例,是向客户端打印字符串。

out.println("hello");

out.print("world");

out.newLine();

%>

println和print都会输出一个换行符,但需要查看源代码才可以看得到。

也可以对输出缓冲区进行管理。

pageEncoding="UTF-8"%>

out.println("获取当前缓冲区" + out.getBufferSize());

out.println("
");

out.println("当前缓冲区剩余字节数目" + out.getRemaining());

%>

image.png

out.flush() 强制刷新缓冲区的数据

out.clearBuffer() 清空缓冲区数据

out.isAutoFlush() 是否自动清除缓冲区

request对象

request对象用来完成客户端的请求,是HttpServletRequest类的实例。

pageEncoding="UTF-8"%>

request 对象实例

请求方法名:

请求的资源:

请求使用的协议:

请求的服务器IP:

请求的服务器端口:

客户端的IP地址:

客户端的主机名:

请求的真实路径:

表单提交数据:

image.png

以用户注册功能,访问注册页面,提交到do_register.jsp页面,并跳转到welcome.jsp欢迎页面。

register.jsp

pageEncoding="UTF-8"%>

录入表单信息

用户名:

技能:

java

php

python

golang

do_register.jsp

pageEncoding="UTF-8"%>

String userName = request.getParameter("userName");

String skills = "";

String[] skillArr = request.getParameterValues("skills");

if(skillArr != null && skillArr.length > 0){

for(int i=0;i

out.println(skillArr[i]+"
");

skills = skills + skillArr[i] + "";

}

}

request.setAttribute("userName",userName);

request.setAttribute("skills",skills);

%>

welcome.jsp

pageEncoding="UTF-8"%>

welcome user

信息展示页面

用户名:

技能:

image.png

image.png

重点关注

getParameter() 返回指定的参数值

getParameterValues() 返回指定参数值的数组

setAttribute() 存储请求中的属性

getAttribute() 返回指定属性的属性值

response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。

response.setHeader("Cache-Control","no-cache");//不缓存

response.sendRedirect("http://www.baidu.com"); //请求重定向,跳转至百度

response.setIntHeader("Refresh",2);

out.println("data is "+ new java.util.Date().toString()+"
" );//每个两秒自动刷新一次

%>

设置Cookie相关属性

Cookie myCookie = new Cookie("cseroad","cseroad-password");

myCookie.setMaxAge(3600);

response.addCookie(myCookie);

%>

访问

image.png

session对象

session是一个时间概念,session对象在第一个jsp页面被装载时自动完成,完成会话管理。

只有当所有页面都关闭的时候,所有会话才都会被关闭。

pageEncoding="UTF-8"%>

session实例

session的唯一标识符:

session创建时间:

session最后的修改时间:

session的失效时间:

image.png

可以在WEB-INF的web.xml文件中修改session会话时间。

10

举个例子:

login.jsp登录页面,登录do_login.jsp在session中保存username,然后跳转到welcome.jsp欢迎用户页面。再超链接到注销logout.jsp页面。

代码如下:

login.jsp

pageEncoding="UTF-8"%>

登陆表单

userName:

passWord:

do_login.jsp

pageEncoding="UTF-8"%>

String userName = request.getParameter("userName");

String passWord = request.getParameter("passWord");

if(userName != null && passWord != null){

session.setAttribute("userName",userName);//在session中保存userName

response.setHeader("refresh","2;URL=welcome.jsp");

}

%>

welcome.jsp

pageEncoding="UTF-8"%>

欢迎页面

欢迎

注销

请先登录

登录

欢迎新用户

欢迎老用户

logout.jsp

pageEncoding="UTF-8"%>

session.invalidate();

response.setHeader("refresh", "2;URL=welcome.jsp");

%>

以上代码用到的主要方法有

getAttribute() 返回与会话中指定名称绑定在一起的对象

setAttribute() 使用指定名称将对象绑定到会话

getValueNames() 返回一个包含此SESSION种可用属性的数组,可以理解为表单提交的数组

application对象

application对象实现了用户间数据的共享,可存放全局变量。

开始于服务器启动,终止与服务器关闭。

服务器信息:

应用名称:

image.png

举个例子统计页面访问计数器:

pageEncoding="UTF-8"%>

Insert title here

Object obj = application.getAttribute("counter");

if(obj == null){

application.setAttribute("counter", new Integer(1));

out.println("该页面被访问1次
");

}else{

int counterValue = Integer.parseInt(obj.toString());

counterValue++;

out.println("该页面被访问了"+counterValue+"次
");

application.setAttribute("counter", counterValue);

}

%>

config对象

config 对象是在一个Servlet初始化时,JSP引擎向他传递信息用的。

在web.xml中添加内容

config

/01/config.jsp

username

cseroad

password

123456

config

/01/*

config.jsp

pageEncoding="UTF-8"%>

config对象实例

用户名:

密码:

访问config.jsp,可以获取到用户名、密码。

image.png

exception对象

当页面产生异常,就会有exception对象。如果jsp页面要使用该对象,必须设置 isErrorPage为true,否则无法编译。

设置除数为零的异常。访问index.jsp

pageEncoding="UTF-8"%>

int a = 1/0;

%>

跳转到throw_error.jsp捕捉异常文件

pageEncoding="UTF-8"%>

异常处理

异常描述信息

out.println(exception.getMessage());

%>

exception对象的字符串描述

out.println(exception.toString());

%>

image.png

page对象

page对象指当前jsp页面本身,像类的this指针,是java.lang.Object类的实例。

和Object类的方法相同。

当前page页面对象的字符串描述:

访问:

image.png

查看Catalina文件可获取到该文件编译后的class类。

image.png

pageContent对象

pageContent 对象提供了对jsp页面所有对象和空间的访问。也可以访问本页面的session。

通过pageContent对象输出hello world。

JspWriter myOut = pageContext.getOut();

myOut.println("hello world");

%>

通过pageContent对象设置username属性保存到session,并输出。

pageContext.setAttribute("username", "cseroad",pageContext.SESSION_SCOPE);

String value = session.getAttribute("username").toString();

out.println(value);

%>

image.png

参考资料

你可能感兴趣的:(java,web入门案例)