1、接收不同表单的方法
49行
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/9/15
Time: 21:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/a1" method="post">
<!-- name 是参数名 -->
<input type="date" name="birth" value="2017-08-08">
<hr color="red">
男
<!-- MALE FEMALE -->
<input type="radio" name="sex" value="男" >
女
<input type="radio" name="sex" value="女" checked>
<hr color="green">
听歌<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 color="yello">
<!-- option 标签如果不提供 value属性, 把标签之间的文本当成value
如果提供了value属性,以value为准
-->
<select name="city">
<option>西安</option>
<option>咸阳</option>
<option value="tongchuan">铜川</option>
<option>汉中</option>
</select>
<hr color="black">
个人简介:
<textarea name="intro" cols="30" rows="8"></textarea>
<input type="submit" value="提交">
</form>
</body>
</html>
53行
package web;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
@WebServlet(urlPatterns = "/a1")
public class Servlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理汉字乱码
req.setCharacterEncoding("utf-8");
// 日期类型接收时,需要进行格式化
String birth = req.getParameter("birth");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(birth);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
// 处理单选按钮
String sex = req.getParameter("sex");
System.out.println(sex);
// 处理复选框, 都没有勾选时,就是null值,可以加if条件判断
String[] hobbies = req.getParameterValues("hobby");
// System.out.println(Arrays.toString(hobbies));
if(hobbies != null) {
for (String hobby : hobbies) {
System.out.println(hobby);
}
}
// 处理下拉列表
String city = req.getParameter("city");
System.out.println(city);
// 处理文本域
String intro = req.getParameter("intro");
System.out.println(intro);
}
}
2、jstl标签
b1:choose 类似于 if elseif else
32行
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/9/15
Time: 21:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="b1" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<b1:choose>
<b1:when test="${sal<4000}">低收入</b1:when>
<b1:when test="${sal>=4000&&sal<=6000}">中收入</b1:when>
<b1:when test="${sal>6000}">低收入</b1:when>
</b1:choose>
<!-- escapeXML 表示是否忽略html代码,false表示不会忽略 -->
<b1:out value="${text}" escapeXml="false"></b1:out>
<hr>
<fmt:formatDate value="${birth}" pattern="yyyy-MM-dd HH:mm:ss.SSS"></fmt:formatDate>
<hr>
<!-- 表示小数部分保留三位 -->
<fmt:formatNumber value="${number}" pattern="#,###.###"></fmt:formatNumber
<!-- 表示整数部分位数不够的话前边补0 -->
<fmt:formatNumber value="${number}" pattern="000,000.###"></fmt:formatNumber>
</body>
</html>
24行
package web;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;
@WebServlet(urlPatterns = "/a")
public class Servlet2 extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
req.setAttribute("sal",4000);
req.setAttribute("text", "<span style='font-size:32px;'>你好,世界</span>");
req.setAttribute("birth", new Date());
req.setAttribute("number", 4342.7554754);
// 跳转至jsp
req.getRequestDispatcher("2.jsp").forward(req,res);
}
}
3、jsp遗留语法
1)jsp的脚本及jsp表达式
19行
任意Java代码,不建议使用,当java代码过多时,会造成项目代码维护困难
<%
int i=1/0;
Connection conn=Utils.connection();
PreparedStatement stmt=conn.prepareStatement
("select tid,tname from teacher");
ResultSet rs=stmt.executeQuery();
while (rs.next()){
//System.out.println(rs.getInt("tid")+""+rs.getString("tname"));
//out.println(rs.getInt("tid")+""+rs.getString("tname")+"<br>");
%>
<%= rs.getString("tname")%><br>//表达式,功能是向浏览器页面显示值
<%
}
rs.close();
stmt.close();
conn.close();
%>
2)jsp指令
7行
<%@ page contentType="text/html;charset=UTF-8" language="java"
import="web.Utils" isELIgnored="false" errorPage="err.jsp" isErrorPage="true" %>
//import中是要导入的java类,方便代码的书写;isELIgnored中是:是否忽略EL表达式,
//如果是true,就是将el表达式看成一个字符串输出,不后悔进行解析;errorPage中是
//出现错误时要跳转的页面,比如出现除0异常时;isErrorPage中是:用在错误页面上,
取值为true表示是错误页面,这时候才能在页面中使用exception变量
//标签页面的重用
12行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%@ include file="menu.jsp"%>
<hr>
文本一
</body>
</html>
12行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%@ include file="menu.jsp"%>
<hr>
文本二
</body>
</html>
10行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
公共部分...
</body>
</html>
3)jsp声明
21行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%!//声明部分的i,是实例变量,优先级低于局部变量
int i=34;
public int sum(int a,int b){
return a+b;
}
%>
<%//脚本部分的i变量,是一个局部变量
int i=21;
%>
<%= i%>
<hr color="red">
<%= i++%>
</body>
</html>
工作原理
12行
public class 类名 extends HttpJspBase{ // HttpJspBase 又是继承了HttpServlet
public int i = 34;
public int sum(int a, int b) {
return a+b;
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response) {
int i = 21;
out.println(i++);
}
}
当首次访问此jsp时,tomcat会把jsp转译为*.java的类(间接继承自HttpServlet)
,再把*.java类编译为*.class字节码, 把加载到虚拟机执行,生命周期与servlet的生命周期相似。
jsp的本质上仍是一个servlet
4)9大隐式对象
request 代表请求对象(可以获取请求参数,将变量存入request作用域)
response 代表响应对象(返回响应)
out 代表响应的字符输出流
pageContext 页面上下文对象,可以间接获得request等对象,并可以将变量存入page作用域
23行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//page作用域存变量
pageContext.setAttribute("a","hello");
//requst作用域存变量
request.setAttribute("b","world");
%>
<%//pageContext只能作用在当前页面,不能进行控制权的转移
Object a = pageContext.getAttribute("a");
out.println(a);
//转移至5jumppag.jsp
request.getRequestDispatcher("5jumppag.jsp").forward(request,response);
%>
</body>
</html>
17行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//从pag作用域获得信息
Object a = pageContext.getAttribute("a");
out.println(a);
//从request作用域获取信息
Object b = request.getAttribute("b");
out.println(b);
%>
</body>
</html>
config jsp的配置信息
page 当前jsp对象(this)
exception 代表的是异常信息(当页面isErrorPage="true"时有效)
11行
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
显示错误页面!
<%= exception%>
</body>
</html>
page作用域:变量作用范围仅限于当前页面
request作用域: 变量的作用范围在一次请求内有效
request.getRequestDispatcher("5jumppag.jsp").forward(request,response);
从5.jsp 跳转到 5jumppag.jsp 两个页面使用的是同一个请求
接下来的两种,后边讲:
session 变量作用范围是一次会话内有效
application 变量作用范围是整个应用程序有效