一.如何接受各种不同表单参数
页面显示:
<form action="/s1" method="post">
<!-- name 是参数名 -->
<input type="date" name="birthday" value="2018-09-15">
<hr>
男
<!-- MALE FEMALE -->
<input type="radio" name="sex" value="男" checked>
女
<input type="radio" name="sex" value="女">
<hr>
唱歌<input type="checkbox" name="hobby" value="1">
跳舞<input type="checkbox" name="hobby" value="2">
睡觉<input type="checkbox" name="hobby" value="3">
玩游戏<input type="checkbox" name="hobby" value="4">
<hr>
<!-- option 标签如果不提供 value属性, 把标签之间的文本当成value
如果提供了value属性,以value为准
-->
<select name="city">
<option>北京</option>
<option>天津</option>
<option value="shanghai">上海</option>
<option>武汉</option>
</select>
<hr>
个人简介:
<textarea name="intro" cols="30" rows="10"></textarea>
<input type="submit" value="提交">
</form>
后台接受:
@WebServlet(urlPatterns = "/s1")
public class Servlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理汉字乱码
req.setCharacterEncoding("utf-8");
// 1) 日期类型的接收,需要注意转换字符串为java中的Date类型
String birthday = req.getParameter("birthday");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(birthday);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
// 2) 处理单选按钮
String sex = req.getParameter("sex");
System.out.println(sex);
// 3) 处理复选框, 注意处理null值(都没有勾选时,就是null值)
String[] hobbies = req.getParameterValues("hobby");
// System.out.println(Arrays.toString(hobbies));
if(hobbies != null) {
for (String hobby : hobbies) {
System.out.println(hobby);
}
}
// 4)处理下拉列表
String city = req.getParameter("city");
System.out.println(city);
// 5)处理文本域
String intro = req.getParameter("intro");
System.out.println(intro);
}
}
二.jstl标签
1.选择语句(c:choose):
<c:choose>
<c:when test="条件1">内容1</c:when>
<c:when test="条件2">内容2</c:when>
...
<c:when test="条件n">内容n</c:when>
<c:otherwise>以上条件都不成立时</c:otherwise>
</c:choose>
2.输出特殊内容(c:out)
作用:可以对${}输出的内容进行控制,可以控制是否忽略html代码,例:
<c:out escapeXML="false" value="${作用域变量}">//不忽略html
<c:out escapeXML="true" value="${作用域变量}"> //忽略html,(当做普通文本)
3.格式化日期(fmt:formatDate)
<fmt:formatDate value="日期对象" pattern="日期格式"/>
4.格式化数字(fmt:formatNumber)
<fmt:formatNumber value="数字对象" pattern="数字格式"/>
三.jsp遗留语言
1.jsp的脚本
<% 任意java代码 %>
弊端:当代码越来越多时,使用jsp脚本的方式,会造成项目代码难以维护
2.jsp表达式
<%=表达式%>
作用:向页面显示值, 表达式不能以;
结束
3.jsp指令
3.1 <%@ page contentType="页面的内容类型和编码"
import="要导入的java类"
isELIgnored="是否忽略EL表达式的处理"
errorPage="出现错误时,要跳转的页面"
isErrorPage="用在错误页面上,取值为true表示是错误页面,这时候才能在页面中使用exception变量" %>
3.2 导入标签库
<%@ taglib prefix="前缀" uri="标签的唯一标识" %>
3.3 重用页面上的一些标签和代码
<%@ include file="另一个jsp页面" %>
4.jsp声明
原理:(本质是一个Servlet)
1.当首次访问此jsp时,tomcat会把jsp转译为*.java的类(间接继承自HttpServlet);
2.再把*.java类编译为*.class字节码;
3.把加载到虚拟机执行,生命周期类似于servlet的生命周期
例:
public class 类名 extends HttpJspBase{ // HttpJspBase 又是继承了HttpServlet
public int i = 100;
public int sum(int a, int b) {
return a+b;
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response) {
int i = 10;
out.println(i++);
}
}
5.9大隐式对象(无需声明即可使用)
request 代表请求对象(可以获取请求参数,将变量存入request作用域)
response 代表响应对象(返回响应)
out 代表响应的字符输出流
pageContext 页面上下文对象,可以间接获得request等对象,并可以将变量存入page作用域
config jsp的配置信息
page 当前jsp对象(this)
exception 代表的是异常信息(当页面isErrorPage="true"时有效)
session 变量作用范围是一次会话内有效
application 变量作用范围是整个应用程序有效
page作用域: 变量作用范围仅限于当前页面
request作用域: 变量的作用范围在一次请求内有效
5.jsp forward 6.jsp 两个页面使用的是同一个请求
servlet
servlet forward x.jsp servlet与jsp使用的是同一个请求