浅识Servlet(二)

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 变量作用范围是整个应用程序有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值