webapps 目录 : 需要访问 静态文件/jsp文件/web项目 必须加载到这个目录下
清除Tomcat缓存 : 删除 work / webAPPs 目录下的内容
如果JSP名字 index.jsp 访问可以省略文件名
http:\ip地址:端口号\文件路径\文件名
http://127.0.0.1:8080/项目名/文件路径名
404 请求资源不可用 路径错了
500 代码错误
JSP环境的构建(jdk,tomcat,eclipse)
jdk+tomcat+myEclipse3.7
- 配置 Java开发工具( JDK)
- 设置 Web服务器: Tomcat[CATALINA_HOME]
1.jsp被放在tomcat这个web服务器里面
2.tomcat是jsp容器
3.tomcat是Apache(阿帕奇)开源组织下一个web服务器
4.tomcat的版本号为6.0/7.0/8.0
5.tomcat6和jdk1.6/ tomcat7和jdk1.7 /tomcat8和jdk1.8
6.tomcat默认的端口号为8080 - 安装 Eclipse或者 MyEclipse
1.在myeclispe中配置jdk
2.在myeclispe中配置tomcat
3.设置eclipse中java文件以及jsp文件的编码为utf-8,设置字体大小
4.新建web project
5.新建tomcat server,部署web project,启动tomcat server## 标题
分包:
controller包 -----------------------------------------------------------------------控制层-----servlet --控制类
service包--------------------------------------------------------------------业务层 -------空
pojo /entity/ model包 ----------------------------------------------------实体层-----------封装类 实体类 (表)
dao包 -------------------------------------------------------------------- --持久层--------操作数据库—jdbcJSP本质
就是 servlet
servlet(server applet) 专门用来处理客户端请求的 java web 应用程序
Servlet应用:
命名:×××Servlet 首字母大写 驼峰规则 见名识意
继承 HttpServlet
重写 init() service()(doGet() doPost() ) destroy()
配置:web.xml
什么是XML
XML(Extensible Markup Language)XML是一种可扩展标识语言,是一种简单的数据存储语言,使用一系列简
第1行是XML声明:<?xml version="1.0"?>
单的标记描述数据。目前推荐遵循的是W3C组织,文档的
如何编写xml文件
文档的第1行是XML声明:<?xml version="1.0"?>
根元素的开始
文档的第2行是
文档的最后一行是根元素的结束
XML 中的注释:
年发布的XML1.0版本。
XML语法规则
所有XML 元素都须有关闭标签
可以在一个标签中同时表示起始和结束标签(单标签)
大小写敏感
XML标签必须正确地嵌套
XML 文档有且只有一个根元素
XML元素的属性必须有属性值
XML元素的属性值必须加引号(单引或双引都可以)
使用预定义的实体引用代替特殊字符
在XML 中,一些字符拥有特殊的意义,为避免混淆和错误,请用实体引用来代替特殊字符。
在XML 中,有5 个预定义的实体引用:
< 小于号<
> 大于号>
& 和号&
’ 单引号‘
" 双引号”
空格
xml元素命名规则
名字可以包含字母,数字和其他字符。
名字不能以数字或者标点符号开头。
名字不能以XML(或xml,Xml,xMl)开头。
名字不能包含空格
xml的特点
XML标记并不是预先规定好的,必须自己创造标记。
XML具有很好的扩展性,可根据需求简单的自行添加元素和属性。
XML是一种跨平台的,与软、硬件无关的,处理信息的工具。
JavaBean:
什么是Servlet?
javax.servlet包
javax.servlet.http包
Servlet运行流程
表单form action=“” 写入web.xml 文件下下的内容
根据请求的路径去WEB.xml中找对应的 找到对应的
中的 与下的一致
根据下的找到
根据中的servlet实体类的路径请求到 servlet实体类中 根据form提交方式method = get/post 调用 doGET() doPost()方法 不写默
认是get方式
Servlet的生命周期
Servlet容器是指tomcat
- 实例化 servlet容器创建servlet实例
- 初始化 调用init()方法
在web.xml文件中配置 标签
当标签中值 0或者大于0时候 ,在tomcat启动时初始化指定servlet,数值越小优先级越高。当值为负数或者没有 - 销毁 destroy() 销毁servlet对象 释放资源
- 标为不可用 垃圾回收
生命周期中servlet的初始化和销毁只发生一次,init() destroy()方法只调用一次,service()调用次数取决于请求
次数
ServletConfig 获取配置信息 和初始化参数
注意:
EL表达式
jsp中的EL表达式
外的jar包。一、JSP EL简介
1、 语法结构
${expression} expression 表达式
2、 [ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
注意:使用[]的时候参数要加“” 使用[]参数错误是会什么都不输出,而使用.参数错误时,会报错
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[
${user.My_Name}应当改为${user["My_Name"] },如果使用中括号则key需要将其用双引号括起来。
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
3、 变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username
的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application
范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回
传null。<不显示> el表达式的取值范围是根据作用域从小到大查找的, pageContext–》request–》session-
-》application
属性范围在EL中的名称
Page PageScope Request RequestScope
Session SessionScope sessionScope
Application ApplicationScope applicationScope
二、JSP EL 中的有效表达式
有效表达式可以包含文字、操作符、变量(对象引用)和函数调用。我们将分别了解这些有效表达式中的
每一种:
1、 文字
JSP 表达式语言定义可在表达式中使用的以下文字:
文字 文字的值
Boolean true 和 false
Intege r 与 Java 类似。可以包含任何正数或负数,例如 24、-45、567
Float 与 Java 类似。可以包含任何正的或负的浮点数,例如 -1.8E-45、4.567
String 任何由单引号或双引号限定的字符串。对
于单引号、双引号和反斜杠,使用反斜杠
字符作为转义序列。必须注意,如果在字
符串两端使用双引号,则单引号不需要转
义。
Null null
2、 操作符
JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:
术语 定义
算术
型 +、-(二元)、*、/、div、%、mod、-(一元数学运算符,减操作或者对一个值取反)
逻辑
型 and、&&、or、||、!、not
关系
型 ==、eq、!=、ne、>、gt、<=、le、>=
、ge。可以与其他值进行比较,或与
布尔型、字符串型、整型或浮点型文
字进行比较。
空 空操作符是前缀操作,可用于确定值是否为空。empty
条件
型 A ?B :C。根据 A 赋值的结果来赋值 B 或 C。
3、 隐式对象
JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用:
pageCo ntext JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求
、响应、会话、输出、
servletContext 等。例如,${pageContext.response} 为页面
的响应对象赋值。
此外,还提供几个隐式对象,允许对以下对象进行简易访问:
术语 定义
param 将请求参数名称映射到单个字符串参数值(通过调用 Se rvletRequest.getParameter (String name) 获得)。getParam
eter (String) 方法返回带有特定名称的参数。表达式 $(par am.name) 相当于 request.getParameter (name)。
param
Values 将请求参数名称映射到一个数值数组(通过调用 Servlet
Request.getParameter (String name) 获得)。它与 param
隐式对象非常类似,但它检索一个字符串数组而不是单
个值。表达式 ${paramvalues.name) 相当于 request.getPar amterValues(name)。
heade r 将请求头名称映射到单个字符串头值(通过调用 Servlet
Request.getHeader(String name) 获得)。表达式 ${header .name} 相当于 request.getHeader(name)。
heade rValue s 将请求头名称映射到一个数值数组(通过调用 ServletRe quest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues.name} 相当于 request.getHea derValues(name)。
cookie 将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cooki e.name.value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用 ${headerVal ues.name} 表达式。
initPar
am 将上下文初始化参数名称映射到单个值(通过调用 Servl etContext.getInitparameter(String name) 获得)。
除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、
页面:
术语 定义
pageSco pe 将页面范围的变量名称映射到其值。例
如,EL 表达式可以使用
${pageScope.objectName} 访问一个 JSP
中页面范围的对象,还可以使用
${pageScope.objectName.attributeName}
访问对象的属性。
requestS cope 将请求范围的变量名称映射到其值。该
对象允许访问请求对象的属性。
例如,EL 表达式可以使用 ${requestSco pe.objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope.obje ctName.attributeName} 访问对象的属性
。
sessionS cope 将会话范围的变量名称映射到其值。该
对象允许访问会话对象的属性。例如:
KaTeX parse error: Expected 'EOF', got '}' at position 18: …ssionScope.name}̲ applicati onSc…{pageContext} 也返回 PageContext 对象。
2、 注意 <%@ page isELIgnored=“true” %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0
中默认的启用EL语言。四、举例说明
1、 例如,
< %=request.getParameter(“username”)% > 等价于 ${ param.username }
2、 例如,但是下面的那句EL语言可以完成如果得到一个username为空,则不显示null,而是不显示值。s
<%=user.getAddr( ) %> 等价于 ${user.addr}。
3、 例如:
<% =request.getAttribute(“userlist”) %> 等价于${ requestScope.userlist }
4、 例如,原理如上例3。
${ sessionScope.userlist } 1
${ sessionScope.userlist } 2
${ applicationScope.userlist } 3
${ pageScope.userlist } 4
${uselist} 含义:执行顺序为4 1 2 3。
“.”后面的只是一个字符串,并不是真正的内置对象,不能调用对象。
4、例如,
<%=user.getAddr( ) %> 等价于 ${user.addr}
第一句前面的user,为一个变量。
第二句后面user,必须为在某一个范围里的属性。
jstl
JSTL 核心标签库
JSTL:
JSTL全名为JavaServer Pages Standard Tag Library即java服务端页面的标准标签库,Web程序员能够利
用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(jsp scriptlet)的做法,以提高程序
的阅读性、维护性和方便性。
使用标签时,一定要在jsp文件头加入以下代码:
<% @taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
下面分别对这些标签进行说明:
- <c:out> 用来显示数据对象(字符串、表达式)的内容或结果 用于在JSP中显示数据,就像<%= … >
使用Java脚本的方式为:<% out.println(“hello”) %> <% =表达式 %> 使用JSTL标签:<c:out value=“字符串”>,
属性 描述 是否必要 默认值
value 要输出的内容 是 无
default 输出的默认值 否 主体中的内容
escapeXml 是否忽略XML特殊字
符 否 true
例如:
那么网页显示效果为:
<% @ page language=“java” import=“java.util.*” pageEncoding=“gb2312” %>
<% @page contentType=“text/html; charset=utf-8” %>
jsp:useBean id=“person” class=“lihui.Person”></jsp:useBean
<>
<% @taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
html
<>
head
<>
title > JSTL测试</title
<>
- 从session中得到的值:${sessionScope.name1}
- 从session中得到的值:${sessionScope.name2}
- 从Bean中获取对象person的name值: < c:out value="${person.name}">
- 从Bean中获取对象person的age值: < c:out value="${person.age}">
- 一共有四种语法格式,前两种是给jsp的范围变量赋值,后两个是给 javabean 变量赋值 效果如下: 3. 主要用来从指定的 jsp 范围内移除指定的变量。使用类似,下面只给出语法:
例:
<c:set var=“score”>85</c:setc:choose
<>
<c:when test="${score>=90}">
你的成绩为优秀!
</c:when<c:when test="${score>=70&&score<90}">
您的成绩为良好!
</c:when<c:when test="${score>60&&score<70}">
您的成绩为及格
</c:whenc:otherwise
<>
对不起,您没有通过考试!
</c:otherwise</c:choose
7.<c:forEach>
语法:<c:forEach var=“name” items=“Collection” varStatus=“statusName” begin=“begin” end=“end” step=“step”>
</c:forEach>
该标签根据循环条件遍历集合 Collection 中的元素。 var 用于存储从集合中取出的元素;items 指定要遍历的
集合;varStatus 用于存放集合中元素的信息。varStatus 一共有4种状态属性,下面例子中说明:
View Code
显示效果:
8.<c: forTokens> 用于浏览字符串,并根据指定的字符串截取字符串
语法:<c:forTokens items=“stringOfTokens” delims=“delimiters” [var=“name” begin=“begin” end=“end” step=“len” varStatus=“statusName”]></c:forTokens>
还是看个例子吧:
View Code
( 1)<c:import> 把其他静态或动态文件包含到 JSP 页面。与jsp:include的区别是后者只能包含同一个web
应用中的文件,前者可以包含其他web应用中的文件,甚至是网络上的资源。
语法:<c:import url=“url” [context=“context”] [value=“value”] [scope="…"] [charEncoding=“encoding”]> </c:import>
<c:import url=“url” varReader=“name” [context=“context”][charEncoding=“encoding”]></c:import>
看个例子:
View Code
显示结果:URL路径有个绝对路径和相对路径。相对路径:<c:import url=“a.txt”/>那么,a.txt必须与当前文件放在同一个
文件目录下。如果以"/“开头,表示存放在应用程序的根目录下,如Tomcat应用程序的根目录文件夹为
webapps。导入该文件夹下的 b.txt 的编写方式: <c:import url=”/b.txt">。如果要访问webapps管理文件夹中的其他Web应用,就要用context属性。例如访问demoProj下的index.jsp,则:<c:import url="/index.jsp" context="/demoProj"/>.
(2)<c:redirect> 该标签用来实现请求的重定向。例如,对用户输入的用户名和密码进行验证,不成功则重定向到登录页面。或者实现Web应用不同模块之间的衔接
语法:<c:redirect url=“url” [context=“context”]/> 或:<c:redirect url=“url” [context=“context”]> <c:param name=“name1” value=“value1”>
</c:redirect>
看个例子:
<% @ page contentType=“text/html;charset=GBK” %>
1
<% @ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
2
3<c:redirect url=“http://127.0.0.1:8080”>
4<c:param name=“uname”>lihui</c:param>
5<c:param name=“password”>11111</c:param>
6</c:redirect>
则运行后,页面跳转为:http://127.0.0.1:8080/?uname=lihui&password=11111
(3)<c:url> 用于动态生成一个 String 类型的URL,可以同上个标签共同使用,也可以使用HTML的标签
实验超链接。
语法:<c:url value=“value” [var=“name”] [scope="…"] [context=“context”]>
<c:param name=“name1” value=“value1”>
</c:url>
或:<c:url value=“value” [var=“name”] [scope="…"] [context=“context”]/>
看个例子:
View Code
显示:Spring Mvc
Spring MVC概述:
Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,框架的目的就是帮助我们简化开发,Spring MVC也是要简化我们日常Web开发的。
Spring MVC框架搭建- 创建WEB项目,引入Spring MVC依赖Jar包
- 创建包结构,创建controller层
- 配置web.xml文件
-
引入Spring MVC配置文件 配置扫描和视图解析器 放在web项目的src下
<mvc:annotation-driven />
<context:component-scan base-package=“com.jk” />
<beans:bean id=“viewResolver” class=“org.springframework.web.servlet.view.InternalResourceViewResolver”>
<beans:property name=“prefix” value="/user/" />
<beans:property name=“suffix” value=".jsp" />
</beans:bean> -
根据注解和web.xml配置请求到Controller即可
context:component-scan/ 扫描指定的包中的类上的注解,常用的注解有:
@Controller 声明controller
@RequestMapping("/menu") 请求映射
@RequestMapping(value = “”,method = RequestMethod.POST) 标注该方法只能使用Post请求调用
@RequestParam(“param”) 请求参数
@PathVariable(“param”)
Spring MVC 传参方式接收请求参数: -
request
-
对象 3. String
-
@RequestParam(“name”)注解
-
@PathVariable(“param”)注解获取请求动态参数 向页面传值:
1,使用HttpServletRequest 和 Session 然后setAttribute(),就和Servlet中一样
2,使用Model/ModelMap对象
3,使用ModelAndView对象
4,使用@ModelAttribute注解
Spring MVC 默认采用的是转发来定位视图,如果要使用重定向:
return “redirect:show”;
Spring Web MVC也是服务到工作者模式的实现,但进行可优化。[前端控制器是DispatcherServlet;应用控制器其实拆为处理映射器
(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口;二、Spring MVC的优势(简单说两个)?
1、 简单、容易上手;
2、 性能优异:jsp+sevlet > struts == SpringMVC > struts2(但是struts2出现了一个不可修复的bug)
3、 灵活,易于扩展
2.SpringMVC运行流程
DispatcherServlet(分发器)
- 浏览器发送请求到
- 由DispatcherServlet分发器根据注解找到指定的Controller
-
- 5 调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView (6)(7) : DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
(8) Http响应:视图负责将结果显示到浏览器。
- 5 调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView (6)(7) : DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
- 启动Tomcat,服务器加载web项目 web.xml文件,初始化DispatcherServlet,并加载SpringMVC配置文件
- 浏览器发送请求到DispatcherServlet(分发器)
- 根据SpringMVC配置文件根据注解(@Controller @requestMapping)找到指定Action和方法
ModelAndView(模型视图对象) - Controller调用业务逻辑处理后,返回(分发器)
ViewResoler视图解析器 - DispatcherServlet查询,找到ModelAndView指定的视图。
- Http响应:视图负责将返回结果显示到浏览器。
3.SpringMVC接口解释
(1)DispatcherServlet接口:
Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。
(2)HandlerMapping接口:
能够完成客户请求到Controller映射。
(3)Controller接口:
Controller将处理用户请求。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。
从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而 ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。(4)ViewResolver接口:
Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果返回给客户。
4.DispatcherServlet:是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
(1) 截获符合特定格式的URL请求。
(2) 初始化DispatcherServlet上下文对应WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
(3) 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。
HandlerMapping
HandlerMapping:处理映射器,为用户发送的请求找到合适的Handler Adapter。
使用 mvc:annotation-driven 做配置,spring mvc 会默认使用 DefaultAnnoationHandlerMapping 和 AnnotationMethodHandlerAdapter
<beans:bean class=“org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping” />
<beans:bean
class=“org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter” />
根据beanname来配置
根据简单URL 来查找Controller :
userController
根据控制类的类名访问controller: