下载apache-maven-版本号,修改conf/settings.xml的本地仓库的路径( <localRepository>f:/mylib1</localRepository>)
1. 基本环境和文件的建立方法
基于http的分布式访问
(1)配置tomcat的JAVA_HOME的环境变量,路径是jdk的文件路径
(2)外部开启和关闭:tomcat--bin---stratup.bat----shutdown.bat
(3)建立的所有网页存放在tomcat---webapps里--新建文件夹---新建html文件
(4)新建项目:
file---new--dynamic web project---next---project name---new runtime---apache版本--next---服务器name----tomcat安装路径---finish-next--next---勾选webxml---
(javaSources----写java文件 webContent----写html/jsp)
(5)服务器的建立
server--new--server---apache版本 server runtime environment(选择你要用的服务器名称)--next---finish
双击打开服务器--选中Use Tomcat installation ---Deploy path:webapps---保存关闭
(6)新建html文件及文件的运行:
webContent---new---other---web--html文件---(此时文件在workspace里)
选中一个服务器右击---add and remove--选中你的项目名---add--finish(此时文件在webapps里)
将该文件在网页中打开:servers 服务器右击---start ----在浏览器里输入地址进行访问
2. 注释的方法
<% %>外部的注释:<!- - - -> <%- - - -%>
<% %>内部的注释://(单行注释) /* */(多行注释)
“alt+/”-----提示性内容
3. jsp的运行环境
new---jsp文件--修改charset为UTF-8
jsp---java代码和html代码并存,html文件里只能是html代码
html,css,js,jquery执行环境 本地浏览器----服务器直接将静态页面给用户,在用户的本地浏览器解析
jsp的运行环境是tomcate(服务器)---tomcate在服务器端将jsp解析成一个类往客户端输入静态页面
(--------jsp在服务器端运行,html在客户端运行)
4. jsp页面的构成
静态内容 | HTML静态文本 |
指令 | <%@ %> 以<%@开始,以%>结束 |
表达式 | <%= java表达式 %> |
Scriptlet | <% java代码 %> |
声明 | <%!函数或方法> 类里的方法 |
动作 | 以<jsp:>开始,以</jsp>结束 |
注释 | <!--客户端注释--> <%--服务器端注释--%> |
(1) jsp指令:page include taglib
page:language:要在页面中嵌入的语言
contentType:页面的格式和编码的方式
pageEncoding:支持中文
immport:引入页面
errorPage=“”:指向处理错误的页面----该页面的page中isErrorPage(true):标明自己是处理错误的页面, 该页面除了写一些联系....,还可以打印出<%=exception%>
include:<%@include file=”hello.jsp” %>---引入文件
(2)_jspServers方法
scripelet的作用域在_jspServers方法里
表达式的作用域在_jspServers方法里---在页面中输出
out作用域在_jspServers方法里---在页面中输出
System.out.println()----在控制台输出
不能在方法里定义方法,可以在类中定义方法
jar包的加入---web_INF文件夹下
属性--build path---jar包
项目名右击---属性---deployment assembly---add---bulid path--jar包
(3)jsp标准动作---都可以翻译为java代码
javaBean:属性都是私有的,get和set()都是公有的
●useBean:实例化的对象必须有无参的构造函数
语法:
<jsp:useBean id=”” class=”” scope=””/>
<jsp:useBean id=”” class=”” scope=””></jsp:useBean>
id-----代表javaBean的实例名
class:指定javaBean对象路径的完整名称
scope:javaBean的作用域--带值方式(page,request,session,application)
例如:
<jsp:useBeanid=”bean1”class=”com.lore.entity.DUser”scope=”page”/>
相当于:<%
DUser bean1=new DUser();
pageContext.setAttribute(“user”,bean1);
%>
●<jsp:setProperty/>:为useBean里的属性设值,属性的类型可以自动转换
name---javaBean类的引用(useBean的id值) property---属性名
value---属性值 param----javaBean的参数值
//value:设置的是固定值 param:接收用户传过来的参数(表单的name值)
<jsp:setProperty name=”bean” property=”id” value=”12”/>
<jsp:setPropertyname=”bean1”property=”uname”param=”uname”/>
//当表单中的name值和属性名相同时,可以直接设为“*”
<jsp:setProperty name=”bean1” property=”*” />
●<jsp:getProperty../>
<jsp:getProperty name=”bean” property=”id” />//获取id的值
服务器的内部转向
属性用“*”----确保属性名和name参数名是一样的
●<jsp:forward />服务器内部转向
//request.getRequestDispatcher("addDuser.jsp?abc=12").forward(request, response);
<jsp:forward page=”跳转的页面”>
<jsp:param name="abc" value="12" />-----传参
</jsp:forward>
●<jsp:include... />--可以传参数
//<%@include file=”引入的jsp文件”%>---不能传参,只是静态的引入
<jsp:include page=”引入的jsp文件”>
<jsp:param name="abc" value="12" />
</jsp:include>
request.getRequestDispatcher("addDuser.jsp?abc=12").include(request, response);----动态传参引入页面
5. 隐式对象:用在java代码里
隐式对象 | |
输入/输出对象 | out |
request | |
response | |
作用域通信对象 | pageContext |
session | |
application | |
Servlet对象 | page |
config | |
错误对象 | exception |
(1)out:out.print();//在页面输出
(2)request:地址栏中“?”后边的参数
请求方式:get/post
get方式---明码提交(?后边字符串显示在地址后边)(可以直接在地址后+?字符串或者借助于表单提交)---一般只能接收英文,不建议用中文
例如:http://127.0.0.1:8080/myweb/index.jsp?uname=zhangsan&pw=111
post方式---暗码提交(?字符串不再浏览器地址栏中显示)(只能借助于表单提交---提交之后用get也获取不到?后的字符串)----可以接收中文
request.setCharacterEncoding("UTF-8"); //设置请求编码的格式,请求方式是post
request方法(getParameter()获取的是String类型)
//当参数名称相同时,getParameterValues(String name)获取参数值
//当参数名称不同时,getParameter (String name)获取参数值
String s=request.getParameter();
String[] favs=request.getParameterValues("fav");
//Enumeration getParameterNames()//获取所有的参数名称
//枚举也是个集合
Enumeration<String> str=request.getParameterNames();
while(str.hasMoreElements()){ //迭代器遍历
String s=str.nextElement();
out.print(s);
}
request.getRemoteAddr();//获取客户端的ip地址
request.getMethod();//获取客户端的请求方式
request.getRequestURL().toString();//获取?前边的
request.getRequestURI();//获取?前边的文件夹及文件名
request.getQueryString();//获取客户端字符串(?后边的字符串)
request.getContextPath();//获取根路径
button按钮可以用js提交表单,用于验证数据的合法性
submit---可以直接提交表单,但不能验证数据的合法性
jsp的主要功能:接收用户提交的参数,跟数据库进行比对,成功跳转首页面,失败跳转登录界面
跳转两种方式:重定向/服务器内部转向
response.sendRedirect();//重定向,不同请求下,浏览器的地址会变化
//服务器内部转向,同一请求下,浏览器地址不会变
request.getRequestDispatcher(“跳转页面”).forward(request,response);
request.setAttribute(“参数名称”,值);//页面之间带值,必须在同一请求下
request.getAttribute(“参数名称”);
//页面之间带值方式:
pageContext--request---session--application
//使用范围(能用小的就不用大的,用大的服务器会崩溃):
同一个页面---同一请求下(地址不换)--同一浏览器下---所有页面都可以用
例如:
pageContext.setAttribute(String,object);
pageContext.getAttribute(String, object);
6. EL表达式
在<%@page isELIgnored="false"%>---默认为支持EL表达式
${EL表达式}---操作数不能被声明
操作数只能应用在 请求参数 和 作用域
//请求参数下:接收的都是字符串
${param[‘a’]+param[‘b’]}
//作用域下(pageContext,request,session ,application)--接收的可以是普通数 /对象 /集合 /map映射
<%
pageContext.setAttribute(“m”,100)
pageContext.setAttribute(“n”,100)
DUser user=new DUser();
user.setUname("zhangsan");
user.setSex(“男”);
request.setAttribute(“a”,user);
List<DUsers> list = new ArrayList<DUsers>();
list.add(user);
request.setAttribute("b", list);
Map<String,DUsers> map = new HashMap<String,DUsers>();
map.put("key1", user);
map.put("key2", user2);
request.setAttribute("c", map);
%>
普通数---${ pageScope.m + pageScope.n }
对象--${ requestScope.a.uname }
${ requestScope.a.sex }
集合--- ${requestScope.b[0].sex}
Map--- ${requestScope.c.key1.mc}
7.标签指令(taglib)
---标签和EL表达式结合
为了避免出现大量的java代码,更符合前端的书写方式,要使用taglib
JSP的标准标签库----JSTL(JavaServer Page Standard Tag Library)
在使用taglib指令前需要引入两个jar包---standard.jar和jstl.jar
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
(1)
核心标签库 | ||
通用标签(set/out/remove) | 条件标签(if/choose) | 迭代标签(forEach/) |
(2)
//设值和作用域
<c:set var=”变量名” value=”100” scope=””></c:set>
<c:set var=”” value=”${ param[‘age’]}” scope=””></c:set>
<c:setvar=”c”value=”${requestScope.a+requestScope.b}”scope=””></c:set>
//输出
<c:out value=”${requestScope.a}”></c:out>
${requestScope.c}
//移除---移除之后什么也不显示
<c:remove var=”a” scope=”session”></c:remove>
(3)条件标签(if/choose)
<c:if test=”${requestScope.a>40}”><div>此数大于40</div></c:if>
//多重if...else
<c:choose >
<c:when test=”${requestScope.a>40}”>...</c:when>
<c:when test=”${requestScope.a>40}”>...</c:when>
<c:otherwise ”>...</c:otherwise>
</c:choose >
(4)迭代标签(forEach)
//相当于for循环(begin<=t<=end)
<c:forEach var=”t” begin=”1” end=”100” step=”步长”>
${t}
</c:forEach>
//对象的遍历
<c:forEach var=”m” items=”requestScope.list” varStatus=”vs”>
${vs.index}---序号,从0开始
${m.name}
</c:forEach>