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的更多相关文章

  1. java web开发入门二(struts)基于eclispe

    JavaBean JavaBean,  咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提 ...

  2. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  3. java web 开发入门 --- tomcat/servlet/jsp

    在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...

  4. java web开发入门四(spring)基于intellig idea

    spring 1.spring简介 Spring框架,可以解决对象创建以及对象之间依赖关系的一种框架. 且可以和其他框架一起使用:Spring与Struts,  Spring与hibernate (起 ...

  5. java web开发入门七(mybatis)基于intellig idea

    mybatis 一. 入门开发步骤 1.导入相关jar包 mybatis3.4.2核心开发包 asm-5.1.jarcglib-3.2.4.jarcommons-logging-1.1.3.jarlo ...

  6. java web开发入门三(Hibernate)基于intellig idea

    Hibernate 1.开发流程 项目配置好后的结构: 1.下载源码: 版本:hibernate-distribution-3.6.0.Final 2.引入hibernate需要的开发包(3.6版本) ...

  7. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

  8. 【Java Web开发学习】Servlet、Filter、Listener

    [Java Web开发学习]Servlet 转发:https://www.cnblogs.com/yangchongxing/p/9274739.html 1.Servlet package cn.y ...

  9. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  10. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

随机推荐

  1. How to get the free disk space in PostgreSQL (PostgreSQL获取磁盘空间)

    Get the current free disk space in PostgreSQL PostgreSQL获取磁盘空间 from eshizhan Here has a simple way t ...

  2. C# 文件操作总结

    一.需求分析 1.将信息记录到本地记事本中. 2.将记录的信息读取出来. 3.计算出某个文件夹下所有后缀名为txt的数量和dll的数量. 4.从网络上下载文件. 二.二话不说上代码 using Sys ...

  3. 2019 苏州朗动java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.苏州朗动等公司offer,岗位是Java后端开发,因为发展原因最终选择去了苏州朗动,入职一年时间了,也成为了面 ...

  4. 深浅赋值+orm操作+Django-admin简单配置

    知识点 深浅copy 浅值深id orm操作 ManyToManyField 虚拟字段 告诉Django orm 自动帮你创建第三张表 查询的时候可以借助该字段跨表 外键属性可赋值外联对象 Model ...

  5. 如何提升Web前端性能?

    什么是WEB前端呢?就是用户电脑的浏览器所做的一切事情.我们来看看用户访问网站,浏览器都做了哪些事情:输入网址 –> 解析域名 -> 请求页面 -> 解析页面并发送页面中的资源请求 ...

  6. FileReader生成图片dataurl的分析

    目录 相关代码及html(来源:百度百科) File API及FileReader简介 结合补充知识进行代码分析 修改尝试: 拖曳图片到网页完成转换 相关代码及html(来源:百度百科) <!D ...

  7. WampServer出现You don’t have permission to access/on this server提示

    WampServer出现You don’t have permission to access/on this server提示 本地搭建WampServer,输入http://127.0.0.1访问 ...

  8. druid + mysql + mybatis 批量更新报错

    首先 批量更新报错 sql injection violation, multi-statement not allow 然后看了博客:https://blog.csdn.net/qq_3634595 ...

  9. ssh实现无密码登陆

    参考教程:https://linux.cn/article-5444-1.html 1.假设你有一台主机A(ip:111.111.111.111),用户名为server123,想无密码登陆到主机B(1 ...

  10. 1 NLP学习大纲

    一.自然语言处理概述 1)自然语言处理:利用计算机为工具,对书面实行或者口头形式进行各种各样的处理和加工的技术,是研究人与人交际中以及人与计算机交际中的演员问题的一门学科,是人工智能的主要内容. 2) ...