java web开发入门一(servlet和jsp)基于eclispe
servlet
用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据。类似于.net的ashx技术。
servlet生成的class文件存放在tomcat中webapps目录下。
1.开发一个servlet步骤:
1)在src下新建包并编写java类,继承HttpServlet类
2)重写doGet和doPost方法
- package com.eggtwo.boss;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet("/test")
- public class TestServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- public TestServlet() {
- super();
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.getWriter().append("Served at: ").append(request.getContextPath());
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
2.servlet的生命周期
构造方法: 创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象 只调用1次。证明servlet对象在tomcat是单实例的。
init方法: 创建完servlet对象的时候调用。只调用1次。
service方法: 每次发出请求时调用。调用n次。
destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。 只调用1次。
JSP
1.特点:
用java语言+html开发动态网站的技术。jsp就是servlet()。
类似于.net的webform,jsp页面可以java语言和html混合写。
tomcat的work目录存放jsp运行的临时文件(.java和.class文件),在运行jsp页面时动态生成并 执行。
访问方式:http://localhost:8080/javaweb/hello.jsp
2.创建方式:
在WebRoot下创建jsp页面。
- <%@page import="java.util.Date"%>
- <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
- pageEncoding="ISO-8859-1"%>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="ISO-8859-1">
- <title>Insert title here</title>
- </head>
- <body>
- <%
- out.write("hello");
- Date dt=new Date();
- String s=dt.toLocaleString();
- %>
- <h3><%=s %></h3>
- </body>
- </html>
3.生命周期:
1)翻译: jsp->java文件
2)编译: java文件->class文件(servlet程序)
3)构造方法(第1次访问)
4)init方法(第1次访问):_jspInit()
5)service方法:_jspService()
6)destroy方法:_jspDestroy()
4.jsp语法
4.1jsp表达式:
语法:<%=变量或表达式%>
作用: 向浏览器输出变量的值或表达式计算的结果
注意:
1)表达式的原理就是翻译成out.print(“变量” );通过该方法向浏览器写出内容
2)表达式后面不需要带分号结束。
4.2jsp脚本
语法:<% java代码 %>
作用: 执行java代码
注意:原理把脚本中java代码原封不动拷贝到_jspService方法中执行,不能声明方法
4.3jsp的声明
语法:<%! 变量或方法 %>
作用: 声明jsp的变量或方法
注意:
1)变量翻译成成员变量,方法翻译成成员方法。
4.4jsp的注释
语法: <%-- jsp注释 --%>
注意;
1)html的注释会被翻译和执行。而jsp的注释不能被翻译和执行。
4.5jsp指令
include指令:
作用: 在当前页面用于包含其他页面,类似于.net mvc中的分布视图
语法: <%@include file="common/header.jsp"%>
注意:
1)原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一 个java源文件,再编译运行!!,这种包含叫静态包含(源码包含)
2)如果使用静态包含,被包含页面中不需要出现全局的html标签了!!!(如html、head、 body)
page指令:
作用: 告诉tomcat服务器如何翻译jsp文件
- <%@ page
- language="java" --告诉服务器使用什么动态语言来翻译jsp文件
- import="java.util.*" --告诉服务器java文件使用什么包导入包,多个包之间用逗号分割
- pageEncoding="utf-8" --告诉服务器使用什么编码翻译jsp文件(成java文件)
- contentType="text/html; charset=utf-8" 服务器发送浏览器的数据类型和内容编码,注意:在开发工具中,以后只需要设置pageEncoding即可解决中文乱码问题
- errorPage="error.jsp" --指定当前jsp页面的错误处理页面。
- isErrorPage="false" --指定当前页面是否为错误处理页面。false,不是错误处理页面,则不能使用exception内置对象;true,是错误处理页面,可以使用exception内置对象。
- buffer="8kb" --jsp页面的缓存区大小
- session="true" --是否开启session功能。false,不能用session内置对象;true,可以使用session内置对象。
- isELIgnored="false" --是否忽略EL表达式
- %>
配置全局的错误处理页面:
在web.xml中的web-app节点下配置:
- <!-- 全局错误处理页面配置 -->
- <error-page>
- <error-code>500</error-code>
- <location>/common/500.jsp</location>
- </error-page>
- <error-page>
- <error-code>404</error-code>
- <location>/common/404.html</location>
- </error-page>
5.jsp内置对象
JSP内置对象(9个内置对象):
1.pageContext javax.servlet.jsp.PageContext JSP的页面容器
2.request javax.servlet.http.HttpServletrequest 获取用户的请求信息
3.response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
4.session javax.servlet.http.HttpSession 用来保存每一个用户的信息
5.application javax.servlet.ServletContext 表示所有用户的共享信息
6.config javax.servlet.ServletConfig 服务器配置信息,可以取得初始化参数
7.out javax.servlet.jsp.jspWriter 页面输出
8.page (java.lang.object)
9.exception java.lang.Throwable
4个域对象的范围:用于共享数据(设置、获取、删除)
page(pageContext):只在当前jsp页面中有效, 跳转之后无效。
request:只在一次请求中有效,服务器跳转(转发)之后有效。 客户端跳无效
session:在一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效
application:在整个服务器上保存,所有用户都可使用。 重启服务器后无效
- <%
- pageContext.setAttribute("age", 18);
- pageContext.setAttribute("tom", 11,pageContext.REQUEST_SCOPE);
- request.setAttribute("name","jack");
- session.setAttribute("lily", 12);
- application.setAttribute("全局",12);
- %>
- <h1>${name}</h1>
- <h1>${tom}</h1>
- <h1>${age}</h1>
- <h1>${lily}</h1>
- <h1>${全局}</h1>
域对象保存值,取值,删除的方法
- //设置值
- pageContext.setAttribute("age", 18);
- //取值
- Object obj=pageContext.getAttribute("age");
- if(obj==null){
- out.write("已删除");
- }else{
- //数字直接试用out.write输出会乱码
- int age=Integer.parseInt(obj.toString());
- out.write(Integer.toString(age));
- //或者
- //out.write(obj.toString());
- }
- out.write("<br/>");
- pageContext.removeAttribute("age");
- Object obj1=pageContext.getAttribute("age");
- if(obj1==null){
- out.write("已删除");
- }else{
- out.write(obj1.toString());
- }
注意:如果设置过多的application属性范围会影响服务器性能。
pageContext.PAGE_SCOPE
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE
pageContext.setAttribute("name", "liuyang", pageContext.APPLICATION_SCOPE);
6.EL表达式
6.1 作用
jsp的核心语法: jsp表达式 <%=%>和 jsp脚本<% %>。
以后开发jsp的原则: 尽量在jsp页面中少写甚至不写java代码。
使用EL表达式替换掉jsp表达式
EL表达式作用: 向浏览器输出域对象中的变量值或表达式计算的结果!!!
语法: ${变量或表达式}
6.2EL语法
1)输出基本数据类型变量
1.1 从四个域获取
${name}
1.2 指定域获取
${pageScope.name}
1.3 输出对象属性:student.name 注意:.name 相当于 getName()方法,其中name和Name要对应
域范围: pageScoep / requestScope / sessionScope / applicationScope
2)处理集合${studentList[0].name}
3)表达式计算 ${10+1}
7.jsp标签
7.1 jsp标签作用:
替换jsp脚本
7.2 Jsp标签分类:
1)内置标签(动作标签): 不需要在jsp页面导入标签
2)jstl标签: 需要在jsp页面中导入标签
3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签
内置标签(动作标签):
转发标签: <jsp:forward />
参数标签: <jsp:pararm/>
例如:内部跳转到second.jsp并带上参数name=jack
- <jsp:forward page="second.jsp">
- <jsp:param value="name" name="jack"/>
- </jsp:forward>
等同于
- request.getRequestDispatcher("second.jsp?name=jack").forward(request, response);
包含标签: <jsp:include/>
- <%@include file="common.jsp" %>
- <jsp:include page="comm.jsp">
- <jsp:param value="name" name="jack"/>
- </jsp:include>
静态包含语法: <%@inclue file="被包含的页面"%>
动态包含语法: <jsp:include page="被包含的页面">
静态包含: 先合并再翻译
动态包含: 先翻译再合并
7.3 JSTL标签
JSTL (全名:java standard tag libarary - java标准标签库 )
五套标签库:
1.核心标签库 (c标签库) 天天用
2.国际化标签(fmt标签库)
3.EL函数库(fn函数库)
4.xml标签库(x标签库)
5.sql标签库(sql标签库)
使用JSTL标签步骤
1) Eclispe需要导入jstl支持的jar包(标签背后隐藏的java代码)注意:MyEclispe使用javaee5.0的项目自动导入jstl支持jar包
eclispe导入方式:将standard.jar和jstl.jar文件拷贝到工程的\WEB-INF\lib\下,然后build path
2)使用taglib指令导入标签库 <%@taglib uri="tld文件的uri名称" prefix="简写" %>
例如:在jsp页面导入核心标签库:
- <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3)在jsp中使用jstl标签
保存数据: <c:set></c:set>
- <%--
- set标签:保存值到域中
- var:值的名称
- value:值
- scope:值的范围,page,request,session,application
- --%>
- <c:set var="sex" value="man" scope="request"></c:set>
获取数据:<c:out value=""></c:out>
- <%--
- out标签:获取域中设置的数据
- default:当value为null时,使用默认值
- escapeXml:是否对value进行转义,false不转义,true转义
- --%>
- <c:out value="${sex}" default="<h1>默认值</h1>" escapeXml="true"></c:out>
单条件判断: <c:if test=""></c:if>
- <%--if标签:单条件判断 --%>
- <c:if test="${5>3}">
多条件判断:
<c:choose></c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
- <c:set var="score" value="80"></c:set>
- <c:choose>
- <c:when test="${score>90}">
- 优秀
- </c:when>
- <c:when test="${score<=90&&score>60}">
- 良好
- </c:when>
- <c:otherwise>
- 差
- </c:otherwise>
- </c:choose>
循环数据:
<c:forEach></c:forEach>
- <%
- ArrayList<String> list=new ArrayList<String>();
- list.add("tom");
- list.add("jack");
- list.add("jack");
- pageContext.setAttribute("list", list);
- %>
- <%--forEach循环
- begin:从哪个元素开始,默认从0开始
- end:到哪个元素结束
- step:每次的增量
- items:要遍历的数据
- var:每个元素的名称
- varStatus:正在遍历的元素的状态对象,count属性默认从1开始
- --%>
- <c:forEach begin="0" end="2" step="1" items="${list}" var="names" varStatus="varSta">
- <h4>顺序:${varSta.count},${names}</h4>
- </c:forEach>
<c:forTokens items="" delims="" var=""></c:forTokens>
- <%
- String sps="a-b-c";
- pageContext.setAttribute("sps",sps);
- %>
- <c:forTokens items="${sps}" delims="-" var="ss">
- <h5>${ss}</h5>
- </c:forTokens>
重定向:<c:redirect url=""></c:redirect>
- <c:redirect url="http://www.baidu.com"> </c:redirect>
7.4 自定义标签
开发步骤:
1.
编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类
- public class ShowIpTag extends SimpleTagSupport {
- @Override
- public void doTag() throws JspException, IOException {
- // 向浏览器输出客户的ip地址
- PageContext pageContext = (PageContext) getJspContext();
- HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
- String ip = request.getRemoteHost();
- JspWriter out = pageContext.getOut();
- out.write("使用自定义标签输出客户IP地址:" + ip);
- }
- }
2)在web项目的WEB-INF目录下建立eggtwo.tld文件,这个tld叫标签库的声明文件。(参考核心标签库的tld文件)
- <?xml version="1.0" encoding="UTF-8" ?>
- <taglib xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
- version="2.1">
- <!-- 标签库版本 -->
- <tlib-version>1.1</tlib-version>
- <!-- 标签库前缀版本 -->
- <short-name>eggtwo</short-name>
- <!--tld文件的唯一标记,完整的uri -->
- <uri>http://tag.eggtwo.com</uri>
- <tag>
- <!--标签名称tld文件的唯一标记 -->
- <name>showIp</name>
- <!--标签处理器类的全称(包名+类名) -->
- <tag-class>com.eggtwo.boss.ShowIpTag</tag-class>
- <!--输出内容的格式 -->
- <body-content>scriptless</body-content>
- </tag>
- </taglib>
3) 在jsp页面的头部导入自定义标签库
- <%@taglib prefix="eggtwo" uri="http://tag.eggtwo.com" %>
4) 在jsp中使用自定义标签
- <eggtwo:showIp></eggtwo:showIp>
java web开发入门一(servlet和jsp)基于eclispe的更多相关文章
- java web开发入门二(struts)基于eclispe
JavaBean JavaBean, 咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提 ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- java web 开发入门 --- tomcat/servlet/jsp
在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...
- java web开发入门四(spring)基于intellig idea
spring 1.spring简介 Spring框架,可以解决对象创建以及对象之间依赖关系的一种框架. 且可以和其他框架一起使用:Spring与Struts, Spring与hibernate (起 ...
- java web开发入门七(mybatis)基于intellig idea
mybatis 一. 入门开发步骤 1.导入相关jar包 mybatis3.4.2核心开发包 asm-5.1.jarcglib-3.2.4.jarcommons-logging-1.1.3.jarlo ...
- java web开发入门三(Hibernate)基于intellig idea
Hibernate 1.开发流程 项目配置好后的结构: 1.下载源码: 版本:hibernate-distribution-3.6.0.Final 2.引入hibernate需要的开发包(3.6版本) ...
- day04 Java Web 开发入门
day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...
- 【Java Web开发学习】Servlet、Filter、Listener
[Java Web开发学习]Servlet 转发:https://www.cnblogs.com/yangchongxing/p/9274739.html 1.Servlet package cn.y ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- java WEB开发入门
WEB开发入门 1 进入web JAVASE:标准- standard JAVA桌面程序 GUI SOCKET JAVAEE:企业-浏览器控制 web 2 软件结构 C/S :client ...
随机推荐
- TransactionScope 使用的注意事项
前两天为了给代码做一些事务封装,写了个小Demo,用TransactionScope代码块实现. 第一条更新成功后第二条刻意抛出异常,结果发现第一条总执行成功,这不符合预期,于是开始一步步跟踪调试. ...
- CTS,CLS,CLR解释
问题阐述 CTS.CLS和 CLR分别是什么意思? 专家解答 CTS.CLS和 CLR是.NET框架的 3个核心部分,下面分别对它们进行介绍. (1)CTS CTS即通用类型系统,它定义了如何在.NE ...
- 在IIS下发布.Net Core MVC项目
1. 默认你已经安装了IIS,并且创建了一个.Net Core 项目 2. 发布.NET Core项目 在vs中右键点击MVC项目,点击"发布"按钮,选择"文件系统&qu ...
- redis的两种持久化方案
前言 人生在于折腾系列,网络,多线程等系列博客楼主还在继续折腾也不会放弃.缓存的知识其实并不仅仅在于简单的增删改查,我觉得有必要全面深入的学习一波.记录学习的过程与体悟. RDB 什么是RDB 对re ...
- js中的原型,原型链和继承
在传统的基于Class的语言如Java.C++中,继承的本质是扩展一个已有的Class,并生成新的Subclass. 由于这类语言严格区分类和实例,继承实际上是类型的扩展.但是,JavaScript最 ...
- Chrome headless三种安装方法
在使用chrome headless的时候,使用安装源有很多的依赖问题,提供三种方法,最简单的是使用一键安装脚本. 1.添加chrome源来安装chrome 添加源: ## 添加:vim /etc/y ...
- vue+element打印页面功能
项目中遇到了要打印页面的功能,我感之前使用的是一个第三方的插件,但是不兼容IE,后来发现直接调用window的API就可以了,MMP // 打印表单 printBtn() { window.print ...
- C++ OpenSSL 之五:生成P12文件
1.等同于使用: openssl pkcs12 -export -inkey "key_path" -in "pem_path" -out "save ...
- 3.redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
作者:中华石杉 面试题 redis 都有哪些数据类型?分别在哪些场景下使用比较合适? 面试官心理分析 除非是面试官感觉看你简历,是工作 3 年以内的比较初级的同学,可能对技术没有很深入的研究,面试官才 ...
- Linux磁盘查询指令
磁盘情况查询: 查询系统整体磁盘使用情况: df -h 查询指定目录的磁盘占用情况 du -h /目录 查询指定目录的磁盘占用情况,默认为当前目录 -s 指定目录占用大小汇总 -h 带计量单位 -a ...