<!--注释内容-->
<%
//单行注释
/*多行注释*/
%>
隐式注释客户端无法看见
<%%>:主要用于定义局部变量、编写语句
<%!%>:主要用于定义全局变量、方法、类,不能出现其他语句
尽量不要在JSP中定义类和方法
<%=%>:表达式输出
<% String info = "www.baidu.com"; %>
<h1>website=<%=info%></h1>
scriptlet标签使用效果和<%%>一样
<jsp:scriptlet>
String url="www.baidu.com";
</jsp:scriptlet>
<h2><%=url%></h2>
MIME表示打开文件的应用程序类型,
page指令中,contentType可以指定文件的显示方式
例如:
<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@ page language="java" contentType="application/word;charset=GBK"%>
charset是指服务器发送给客户端的内容编码,pageEncoding指的是JSP文件本身的编码。如果pageEncoding存在,那么JSP编码由pageEncoding决定,否则由charset决定,如果两个属性都不存在,则默认为ISO-8859-1
例如:
<%@ page language="java" contengType="text/html;pageEncoding=GBK"%>
一般一个JSP页面只需要按照网页显示(text/html),则使用pageEncoding设置编码即可。
错误页设置两步骤:
1. errorPage属性指定错误出现时的跳转页;
2. isErrorPage属性指定错误页标识
例如:
错误页中:
<%@ page language="java" contengType="text/html;pageEncoding=GBK"%>
<%@page errorPage="error.jsp"%><!--一出现错误即跳转到错误处理页-->
错误处理页中:
<%@ page language="java" contengType="text/html;pageEncoding=GBK"%>
<%@ page isErrorPage="true"%><!--表示该页面用于处理错误-->
错误页跳转输入服务器端跳转
可以修改Web.xml文件,实现在虚拟目录指定全局的错误处理
<error-page>
<error-code>500</error-code>
<location>/ch05/error.jsp</location>
</error-page>
依然服务器端跳转
在page指令中可以使用import导入所需要的java开发包,导入java.sql包,进行数据库开发。
配置数据库的驱动程序,将mysql的驱动程序mysql-connector-java-5.0…复制到tomcat6.0\lib目录中,并重启服务器
例如:使用JSP列出emp表数据
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>
<html>
<head><title>www.bruce.com</title></head>
<body>
<%! //定义数据库驱动程序 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; public static final String DBURL = "jdbc:mysql://localhost:3306/mldn"; public static final String DBUSER = "root"; public static final String DBPASS = "mysqladmin"; %>
<% Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; %>
<% try{ Class.forName(DBDRIVER); conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS); String sql = "SELECT empno,ename,job,sal,hiredate FROM emp"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); %>
<center>
<table border="1" width="80%">
<tr>
<td>雇员编号</td>
<td>雇员姓名</td>
<td>雇员工作</td>
<td>雇员工资</td>
<td>雇员日期</td>
</tr>
<% while(rs.next()){ int empno = rs.getInt(1); String ename = rs.getString(2); String job = rs.getString(3); float sal = rs.getFloat(4); java.util.Date date = rs.getDate(5); %>
<tr>
<td><%=empno%></td>
<td><%=ename%></td>
<td><%=job%></td>
<td><%=sal%></td>
<td><%=date%></td>
</tr>
<% } %>
</table>
</center>
<% }catch(Exception e){ e.printStack(); }finally{ rs.close(); pstmt.close(); conn.close(); } %>
</body>
</html>
没有Java代码的页面写成静态页面的后缀,可以适当提升运行速度
语法:<%@ include file = "要包含的文件路径"%>
包含的文件可以是JSP,HTML,文本,或者是一段Java程序。包含操作实际上是将被导入的文件内容导入,一起进行编译,最后再将一份整体的内容展现给用户
例如:
<body>
<%@include file="info.html"%>
</body>
语法:
1. 不传递参数:
<jsp:include page="{要包含的文件路径\<%=表达式%>}" flush="true\false"/>
<jsp:include page="{要包含的文件路径\<%=表达式%>}" flush="true\false">
<jsp:param name="参数名" value="参数内容"/>
//可以传递多个参数
</jsp:include>
例如:
包含页:include_demo.jsp
<jsp:include page="receive_param.jsp">
<jsp:param name="name" value="<%=username>">
<jsp:param name="info" value="Bruce">
</jsp:include>
被包含页:receive_param.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<h1>参数1:<%=request.getParameter("name")%></h1>
<h1>参数2:<%=request.getParameter("info")%></h1>
false表示完全被读进来再输出,true表示buffer满了就输出,一般都设置为true,默认为true
动态包含是先处理再输出
语法:
1. 不传递参数:
<jsp:forward page="{要包含的文件路径\<%=表达式%>}"/>
2. 传递参数:
<jsp:forward page="{要包含的文件路径\<%=表达式%>}">
<jsp:param name="" value=""/>
//可以传递多个参数
</jsp:forward>
上述跳转属于服务器端跳转
内置对象 | 类型 | 描述 |
---|---|---|
pageContext | javax.servlet.jsp.PageContext | 页面容器 |
request | javax.servlet.HttpServletRequest | 请求 |
response | javax.servlet.HttpServletResponse | 回应 |
session | javax.servlet.HttpSession | 保存 |
application | javax.servlet.ServletContext | 共享信息 |
config | javax.servlet.ServletConfig | 服务器配置,可以取得初始化参数 |
out | javax.servlet.jspWriter | 页面输出 |
page | java.lang.Object | |
exception | java.lang.Throwable |
属性名 | 属性范围 |
---|---|
page | 只在一个页面中保存属性 |
request | 一次请求中保存属性,服务器跳转后仍有效 |
session | 一次会话范围中保存,任何跳转都有效,重新打开浏览器无效 |
application | 整个服务器保存,所有用户都可以使用 |
4个内置对象都支持以下操作方法:
public void setAttribute(String name,Object o)
public Object getAttribute(String name)
public void removeAttribute(String name)
可以使用如下的方法修改page属性范围:
public void setAttribute(String name,int scope)
request对象主要作用是接收客户端发送来的请求,是javax.servlet.http.HttpServletRequest接口的实例化对象
常用方法 | 描述 |
---|---|
public String getParameter(String name) | 接收请求参数 |
public String[] getParameterValues(String name) | 接收一组请求参数 |
public Enumeration getParameterNames() | 取得请求参数名 |
public String getRemoteAddr() | 取得客户端IP地址 |
void setCharacterEncoding(String env)throws UnsupportedEncodingException | 设置统一的请求编码 |
public boolean isUserInRole(String role) | 用户身份认证 |
public Httpsession getSession() | 取得当前的session对象 |
pubic StringBuffer getRequestURL() | 返回正在请求的路径 |
pubic Enumeration getHeaderNames() | 取得全部头信息的名称 |
pubic Enumeration getHeader(String name) | 根据名称取得头信息的内容 |
public String getMethod() | 取得用户的提交方式(get/post) |
public String getServletPath() | 取得访问的路径 |
public String getContextPath() | 取得上下文资源路径 |
例如:
<body>
<% request.setCharacterEncoding("GBK"); %>
</body>
例如:接收表单全部内容
定义表单页:request_form.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>request_form.html</title>
</head>
<body>
<form action="request_demo.jsp" method="post"><!-- 用post,否则乱码 -->>
姓名:<input type="text" name="uname"><br /> 兴趣:<input type="checkbox" name="**inst" value="唱歌">唱歌<input type="checkbox" name="**inst" value="跳舞">跳舞<input type="checkbox" name="**inst" value="游泳">游泳<br /> 自我介绍:
<textarea cols="30" rows="3" name="note"></textarea>
<input type="hidden" name="uid" value="1"> <input type="submit" value="提交"> <input type="reset" value="重置">
<br />
</form>
</body>
</html>
定义读取页:request_demo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'request_demo.jsp' starting page</title>
</head>
<body>
<% request.setCharacterEncoding("GBK");//不能少,否则容易乱码 %>
<table border="1">
<tr>
<th>参数名称</th>
<th>参数内容</th>
</tr>
<% Enumeration enu = request.getParameterNames(); while (enu.hasMoreElements()) { String paramName = (String) enu.nextElement(); %>
<tr>
<td><%=paramName%></td>
<td>
<% if (paramName.startsWith("**")) { String paramValue[] = request .getParameterValues(paramName); for (int i = 0; i < paramValue.length; i++) { %> <%=paramValue[i]%>、
<% } } else { String paramValue = request.getParameter(paramName); %>
<%=paramValue%>
<% } %>
</td>
</tr>
<% } %>
</table>
</body>
</html>
浏览器默认的是UTF-8
现阶段每一个JSP页面都写上编码设置
参数传递有post和get方式两种
例如:
<%@ page contextType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>取得头信息的名称和内容</title></head>
<body>
<% Enumeration enu = request.getHeaderNames(); while(enu.hasMoreElements()){ String headerName = (String)enu.nextElement(); String headerValue = request.getHeader(headerName); %>
<h5><%=headerName%>--><%=headerValue%></h5>
<% } %>
</body>
</html>
增加新用户需要修改conf/tomcat-user.xml文件。
例如:
<user username="10202357" password="Tu86511620" roles="admin" />
用户的角色会自动创建
配置完之后还需要配置web.xml文件,在web.xml文件中加入对某一资源的验证操作
角色验证即在JSP页面中调用request.isUserInRole(“”)
例如:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>获得IP\访问路径\提交方式</title>
</head>
<body>
<% String method = request.getMethod(); String ip = request.getRemoteAddr(); String path = request.getServletPath(); String contextPath = request.getContextPath(); %>
<h3>
请求方式:<%=method%></h3>
<h3>
IP地址:<%=ip%></h3>
<h3>
访问路径:<%=path%></h3>
<h3>
上下文名称:<%=contextPath%></h3>
</body>
</html>
request内置对象在实际开发中使用最多,当服务器端需要得到客户端的相关信息时就会用到request对象完成
response对象的主要作用是对客户端请求的响应,是javax.servlet.http.HttpServletResponse接口的实例
常用方法 | 描述 |
---|---|
public void addCookie(Cookie cookie) | 给客户端增加Cookie |
public void setHeader(String name,String value) | 设置回应的头信息 |
public void sendRedirect(String location)throws IOException | 页面跳转 |
例如:
设置自动刷新:
<%
reponse.setHeader("refresh","2")
%>
定时跳转:
<%
reponse.setHeader("refresh","2";URL="hello.html")
%>
定时跳转(JSP response\HTML方式)都属于客户端跳转
使用HTML完成跳转功能:
<html>
<head>
<title>测试html页面的跳转</title>
<META HTTP-EQUIV="refresh" CONTENT="3;URL=hello.html">
</head>
<body>
<h3>
3秒后跳转到hello.html页面,如果没有跳转请按<a href="hello.html">这里</a>!
</h3>
</body>
</html>
当一个页面中没有JSP代码又想执行定时跳转的时候才使用HTML形式的设置跳转头信息
例如:
<% response.sendRedirect("01.html"); %>
与<jsp:forward>
不同,response属于客户端跳转,要在整个页面执行完以后才执行跳转。
<jsp:forward>
可以方便地进行参数传递,而且服务器端跳转要比客户端跳转更常用
Cookie的常用方法 | 描述 |
---|---|
public Cookie(String name,String value) | |
public String getName() | |
public String getValue() | |
public void setMaxAge(int expiry) | 设置Cookie的保存时间,以秒为单位 |
Cookie是服务器给客户端增加的,所以使用reponse对象
例如:
<%
Cookie c1 = new Cookie("Tu","Bruce");//第一个参数是属性名,第二个参数是属性值
c1.setMaxAge(60);//Cookie保存60秒
response.addCoolie(c1);//向客户端增加Cookie
%>
例如:取出Cookie
<% Cookie c[] = request.getCookies(); for(int x = 0; x < c.length; x++){ %>
<h3><%=c[x].getName()%>--><%=c[x].getValue()%></h3>
<% } %>
在开发中session对象最主要的用处是完成用户的登录、注销等常见功能。
常用方法 | 描述 |
---|---|
public String getId() | 取得Session Id |
public long getCreationTime() | 取得Session的创建时间 |
public long getLastAccessedTime() | 取得Session的最后一次操作时间 |
public boolean isNew() | 判断是否是新的Session |
public void invalidate() | 让Session失效 |
public Enumeration getAttributeNames() | 得到全部属性的名称 |
例如:
<% String id = session.getId(); %>
<h3>
session id:<%=id%>
</h3>
服务器重启,session id一般就会消失。tomcat可以通过配置server.xml文件加入保存session操作
实例:
编写表单并进行验证login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
<title>登录注销</title>
</head>
<body>
<form action="login.jsp">
用户名:<input type="text" name="uname" /></br> 密 码:<input type="password" name="upass"> <input type="submit" value="登录">
<input type="reset" value="重置">
</form>
<% String name = request.getParameter("uname"); String password = request.getParameter("upass"); if (!(name == null || "".equals(name) || password == null || "" .equals(password))) { if ("Bruce".equals(name) && "2222".equals(password)) { response.setHeader("refresh", "2,URL=welcome.jsp"); session.setAttribute("userid", name); %>
<h3>用户登录成功,两秒后跳转到欢迎页!</h3>
<h3>
如果没有跳转,请点击<a href="welcome.jsp">这里</a>
</h3>
<% } else { %>
<h3>错误的用户名和密码</h3>
<% } } %>
</body>
</html>
登录成功欢迎页welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
<title>'welcome.jsp'</title>
</head>
<body>
<% if (session.getAttribute("userid") != null) { %>
<h3>
欢迎<%=session.getAttribute("userid")%>光临本系统,<a href="logout.jsp">注销</a>
</h3>
<% } else { %>
<h3>
请先进行系统的<a href="login.jsp">登录</a>
</h3>
<% } %>
</body>
</html>
登录注销logout.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head>
<title>'logout.jsp'</title>
</head>
<body>
<% response.setHeader("refresh", "2;login.jsp"); session.invalidate(); %>
<h3>你已经成功注销,两面后自动跳转回首页</h3>
<h3>
如果没有跳转,请点击<a href="login.jsp">这里</a>
</h3>
</body>
</html>
<%
session.isNew();
%>
<%
long start = session.getCreationTime();
long end = session.getLastAccessedTime();
long time = (end-start)/1000;//得出操作的秒
%>
常用方法 | 描述 |
---|---|
String getRealPath(String path) | 得到虚拟目录对应的绝对路径 |
public Enumeration getAttributeNames() | 得到所有属性的名称 |
public String getContextPath() | 取得当前的虚拟路径名称 |
例如:
<%
String path1 = application.getRealPath("/");
String path2 = this.getServletContext().getRealPath("/");//两个方法的结果一样
%>
例如:保存表单内容在Web项目的根目录中的note文件夹中
表单递交页面form.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>form.html</title>
</head>
<body>
<form action="input.jsp">
输入文件名称:<input type="text" name="filename"> 输入文件内容:
<textarea name="filecontent" cols="30" rows="3"></textarea>
<input type="submit" value="保存"> <input type="reset" value="重置">
</form>
</body>
</html>
处理页面input.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>My JSP 'input.jsp' starting page</title>
</head>
<body>
<% String realPath = this.getServletContext().getRealPath("/"); %>
<h3><%=realPath%></h3>
<% String name = request.getParameter("filename"); String content = request.getParameter("filecontent"); String fileName = this.getServletContext().getRealPath("/") + "note" + File.separator + name; File file = new File(fileName); if (!(file.getParentFile().exists())) { file.getParentFile().mkdir(); } PrintStream ps = new PrintStream(new FileOutputStream(file)); ps.println(content); ps.close(); %>
</body>
</html>
类似用FileOutputStream也可以完成创建文件并写入,body体改为
<body>
<% String realPath = this.getServletContext().getRealPath("/"); %>
<h3><%=realPath%></h3>
<% String name = request.getParameter("filename"); String content = request.getParameter("filecontent"); String fileName = this.getServletContext().getRealPath("/") + "note" + File.separator + name + ".txt"; File file = new File(fileName); if (!(file.getParentFile().exists())) { file.getParentFile().mkdir(); } FileOutputStream fo = new FileOutputStream(file); byte b[] = content.getBytes(); fo.write(b); fo.close(); %>
</body>
结果一样。
代码如下:
<%@page import="java.io.*"%>
<%@page import="java.math.*"%>
<%@page import="java.util.*"%>
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'Count.jsp' starting page</title>
</head>
<body>
<%!BigInteger count = null;%>
<%!//为了方便,方法直接定义放在在JSP文件中 public BigInteger load(File file) { BigInteger count = null; try { if (file.exists()) { Scanner scan = new Scanner(new FileInputStream(file)); if (scan.hasNext()) { count = new BigInteger(scan.next()); scan.close(); } }else { count = new BigInteger("0"); save(file, count); } } catch (Exception e) { e.printStackTrace(); } return count; } public void save(File file, BigInteger count) { try { PrintStream ps = null; ps = new PrintStream(new FileOutputStream(file)); ps.println(count); ps.close(); } catch (Exception e) { e.printStackTrace(); } }%>
<% String filename = this.getServletContext().getRealPath("/") + "count.txt"; File file = new File(filename); if (session.isNew()) { synchronized (this) { count = load(file); count = count.add(new BigInteger("1")); save(file, count); } } %>
<h2>
您是第<%=count%>位访客!
</h2>
</body>
</html>
取得全部application的属性:
<% Enumeration<?> enu1 = this.getServletContext().getAttributeNames(); while (enu1.hasMoreElements()) { String name = (String) enu1.nextElement(); %>
<h4><%=name%>--><%=this.getServletContext().getAttribute(name)%></h4>
<% } %>
节点的主要功能是连接和节点,此节点的名称只在配置文件的内部起作用
例如:
<servlet>
<servlet-name>he</servlet-name>
<jsp:file>/WEB-INF/hello.jsp</jsp.file>
</servlet>
<servlet-mapping>
<servlet-name>he</servlet-name>
<url-pattern>/hello.mldn</url-pattern>
</servlet-mapping>
使用config对象中的getInitParameter()方法可以取得初始化的配置参数,所有配置参数在web.xml文件中进行配置。
方法|描述
----|----
public String getInitParameter(String name)|
public Enumeration getInitParameterNames()|
## 2.8 out对象
方法|描述
----|----
public int getBufferSize()|
public int getRemaining()|
## 2.9 pageContext对象
pageContext对象可以取得ServletRequest\ServletResponse\ServletConfig\ServletContext接口的实例
方法|描述
----|----
public abstract void forward(String relativeUrlPath)throws ServletException,IOException|
public void include(String relativeUrlPath)throws ServletException,IOException|
public ServletConfig getServletConfig()|
public ServletRequest getRequest()|
public ServletResponse getResponse()|
public HttpSession getSession()|
=================================================================================
# JavaBean
## 3.1 JavaBean基本要求
- 所有类属性封装并编写对应的getter和setter方法
- 所有类至少存在一个无参构造方法
- 所有类必须放在一个包中
- 所有类声明成public class
## 3.2 JSP中使用JavaBean
### 3.2.1 Web开发的标准目录结构
编译好的class文件或jar包应该放在WEB-INF\classes文件夹中,可以根据命令
javac -d. SimpleBean.java
命令根据package的定义打包编译
*tomcat安装目录的lib、WEB-INF\classes和WEB-INF\lib文件夹实际上都表示了classpath,直接将类或jar包或class文件复制到这些文件夹下即可使用*
### 3.2.2 使用JSP的page指令导入所需要的JavaBean
例如:
<%@page import="cn.mldn.lxh.demo.*"%>
### 3.3.3 使用<jsp:useBean>指令导入所需要的JavaBean
例如:
<jsp:useBean id="simple" scope="page" class="cn.mldn.lxh.demo.SimpleBean"/>
ps:此方法省略了手工实例化对象的过程
## 3.3 JavaBean与表单
实例:
输入表单input.html:
input.html
姓名:
年龄:
接收内容表单input.jsp
例如:修改input.jsp接收表单全部内容
# 3.4 设置属性:<jsp:serProperty>
4种设置属性操作:
//自动匹配 //指定对象的属性名称,自动找表单中同名名称赋值给该属性(自动匹配) //指定参数,参数名称是原表单传递过来的参数名称 //指定内容
# 3.5 取得属性:<jsp:getProperty>
语法:
*实际上调用的是JavaBean的getter()方法,所以类定义的时候一定要有getter()和setter()方法*
# 3.6 JavaBean的保存范围
例如:session范围的JavaBean
在src文件夹中建立此类
package cn.mldn.lxh.demo; public class Count { private int count = 0; public Count() { System.out.println(“————一个对象产生————–”); } public int getCount() { return ++this.count; } }
写如下页面session.jsp:
结果:在一个session下的刷新操作,count会一直向上计数。
类似的,application范围的JavaBean对象,除非服务器关闭,对象才会消失。
# 3.7 JavaBean的删除
例如:
3.6页面改动为 ## 3.8 实例:注册认证
## 3.9 DAO设计模式
# 文件上传 ## 4.1 SmartUpload ## 4.2 FileUpload # Servlet程序开发 ## 5.1 Servlet简介 Servlet(服务器端小程序) ## 5.2 第一个Servlet程序 处理HTTP请求的Servlet程序,必须继承HttpServlet类,而且自定义的Servlet类至少还要覆写HttpServlet类中提供的doGet()方法 doGet()方法中定义了两个参数:HttpServletRequest和HttpServletResponse,用来接收和回应用户的请求 示例: 用Servlet输出helloworld(实际上Servlet并不适合输出显示)
package org.lxh.servletdemo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head><title>Bruce</title></head>");
out.println("<body>");
out.println("<h1>HELLO WORLD</h1>");
out.println("</body>");
out.println("</head>");
}
}
编译完成后可以将程序打包保存在WEB-INF\classes文件夹下即可,或者放在jdk目录下的jre\lib\ext中
配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
<display-name></display-name>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.lxh.servletdemo.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
*用户输入地址对于Servlet而言就属于一种get请求* ## 5.3 Servlet与表单 ## 5.4 Servlet生命周期 ## 5.5 取得初始化配置信息 ## 5.6 取得其他内置对象 ## 5.7 Servlet跳转 ## 5.8 Web开发模式:Mode 1与Mode 2 # 表达式语言 ## 6.1 表达式语言的特点 如果输出的内容为null,则会自动使用空字符串”“表示。 语法 `${属性名称}` ## 6.2 表达式语言的内置对象 表达式语言的内置对象|说明 —–|—– pageContext| pageScope| requestScope| sessionScope| applicationScope| param| paramValues| header| headerValues| cookie| initParam| ### 6.2.1 访问4种属性范围的内容 1. 优先访问范围小的属性 2. 使用xxxxScope访问特定属性值 如:
pageContext对象可以取得request,session,application的实例。
如:
${pageContext.request.remoteAddr}
${pageContext.session.id}
${pageContext.session.isNew}
语法:
接收一个参数:
${param.属性名称}
接收一组参数:
${paramValues.属性名称}
接收一组参数并取出时,还是需要分别指定下标。
如:
主要接收:
1. Collection接口
2. Map集合
中的内容
例如:
接收Collection接口的内容
<% List all = new Arraylist(); all.add("one"); all.add("two"); all.add("three"); request.setAttribute("info",all); %>
<h3>${info[0]}</h3>
<h3>${info[1]}</h3>
<h3>${info[2]}</h3>
例如: 输出Map集合的内容
例如:
<%
Dept dept = new Dept();
dept.setDeptno(10);
dept.setDname(“deptthree”);
request.setAttribute(“info”,dept);
%>
<
JSTL主要有核心标签库、国际化标签库、SQL标签库、XML标签库和函数标签库等。
4个基本标签 |
---|
2个流程控制标签 |
---|
2个迭代标签 |
---|
其他 |
---|
2个国际化标签 |
---|
3个信息显示标签 |
---|
6个数字及日期格式化标签 |
---|
—–|—–
|
|
|
|
并不建议通过JSTL操作数据库,在MVC设计模式中,JSP页面主要用于显示
—–|—–
|
|
|
|
|
|
|
|
未完待续