文章目录
1.在JSP页面showPriceSum.jsp…
(1)在JSP页面showPriceSum.jsp中定义一个方法public double getPriceSum(String input),该方法可以返回参数input含有的各个数字的代数和。比如String str=”麻辣豆腐:20.6元,红烧肉:68.9元”,那么getPriceSum(str)返回的值是89.5。
(2)Java程序片中用String对象str封装表示菜单的字符序列。
(3)使用Java程序片显示str以及getPriceSum(mess)返回的值。
Show.jsp
<%@ page import="java.util.regex.Pattern" %>
<%@ page import="java.util.regex.Matcher" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<%!
public double getPriceSum(String input){
Pattern pattern;
Matcher matcher;
String regex="-?[0-9][0-9]*[.]?[0-9]*";
pattern=Pattern.compile(regex);
matcher=pattern.matcher(input);
double sum=0;
while (matcher.find()){
String str=matcher.group();
sum +=Double.parseDouble(str);
}return sum;
}
%>
<body bgcolor="#8a2be2">
<p style="font-family: 黑体;font-size: 20px;">
<br>张三的菜单:</br>
<%String str="麻辣豆腐:20.6元,红烧肉:68.9元";%>
<br><%=str%>
<br><b><i>消费总和:<%=getPriceSum(str)%></i></b></br>
<br>李四的菜单:</br>
<% str="鱼头:62.9元,烤鸭:199元,红焖大虾:289.9元";%>
<br><%=str%>
<br><b><i>消费总和:<%=getPriceSum(str)%></i></b></br>
</p>
</body>
</html>
2.time.jsp
(1)页面time.jsp负责显示该页面被访问时的日期时间。
(2)编写JSP页面userTime.jsp,要求useTime.jsp使用include指令标记在当前页面中嵌入time.jsp.
userTime.jsp
<%@ page import="java.time.LocalTime" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%@include file="time.jsp"%>
</body>
</html>
time.jsp
<%@ page import="java.time.LocalDate" %>
<%@ page import="java.time.LocalTime" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
%>
用户在
<%=date.getYear()%>/
<%=date.getMonthValue()%>/
<%=date.getDayOfMonth()%>
<br>
<%=time.getHour()%>:
<%=time.getMinute()%>:
<%=time.getSecond()%>访问了网页
</body>
</html>
3.编写三个JSP页面:main.jsp、circle.jsp、ladder.jsp
编写三个JSP页面:main.jsp、circle.jsp、ladder.jsp,将三个JSP页面保存在同一web服务目录中。main.jsp使用include动作标记加载circle.jsp和ladder.jsp页面。circle.jsp页面可以计算并显示圆的面积。ladder.jsp页面可以计算并显示梯形的面积。当circle.jsp和ladder.jsp被加载时获取main.jsp页面include动作标记的param子标记提供的圆的半径以及梯形的上底、下底和高的值。(根据要求自己编码实现)
circle.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%! public String getArea(double r)
{
if(r>0)
{
double area=r*r*3.14;
return ""+area;
}
else{
return("半径为"+r+"不能为大于0以外的数字,无法计算面积");
}
}
%>
<%
String sideR=request.getParameter("sideR");
double r=Double.parseDouble(sideR);
%>
<br><br>我是被加载的文件,负责计算圆的面积<br>
给我传递的半径是:<%=r%>
<br>圆的面积是:<%=getArea(r) %>
</body>
</html>
ladder.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%! public String getArea(double r)
{
if(r>0)
{
double area=r*r*3.14;
return ""+area;
}
else{
return("半径为"+r+"不能为大于0以外的数字,无法计算面积");
}
}
%>
<%
String sideR=request.getParameter("sideR");
double r=Double.parseDouble(sideR);
%>
<br><br>我是被加载的文件,负责计算圆的面积<br>
给我传递的半径是:<%=r%>
<br>圆的面积是:<%=getArea(r) %>
</body>
</html>
Main.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
double r=3,a=2,b=5,c=2;
%>
<br>加载circle.jsp计算半径为<%=r %>的圆的面积:
<jsp:include page="circle.jsp">
<jsp:param value="<%=r %>" name="sideR"/>
</jsp:include>
<br>加载ladder.jsp计算上底、下底、高为<%=a %>,<%=b %><%=c %>的梯形面积
<jsp:include page="ladder.jsp">
<jsp:param value="<%=a %>" name="sideA"/>
<jsp:param value="<%=b %>" name="sideB"/>
<jsp:param value="<%=c %>" name="sideC"/>
</jsp:include>
</body>
</html>
4.编写input.jsp…
(1)编写input.jsp,该页面提供一个form表单,该form表单提供两个text文本框,用于用户输入数字,提供一个select下拉列表,该下拉列表有加、减、乘、除四个选项,供用户选择运算符号。用户在form表单中数学的数字,选择运算符号,单击submit提交键将这些数据提交给computer.jsp页面。
(2)computer.jsp页面获取input.jsp提交的数据,计算出相应的结果显示给用户。如果computer.jsp页面没有获取到数据,就将用户重新定向到input页面。
Input.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor=#ffccff>
<form action="computer.jsp" method=post name=form>
<p style ="font-family:宋体;font-size:18;color:blue">
输入运算数,选择运算符号:<br>
<input type=text name="numberOne" size=6/>
<select name="operator">
<option selected="selected" value="+">加
<option value="-">减
<option value="*">乘
<option value="/">除
</select>
<input type=text name="numberTwo" size=6/>
<br><input type="submit" name="submit" value="提交"/>
</p >
</form>
</body>
</html>
Computer.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor =cyan>
<p style ="font=family:宋体;font-size:18;color:black">
<%
String numberOne=request.getParameter("numberOne");
String numberTwo=request.getParameter("numberTwo");
String operator=request.getParameter("operator");
if(numberOne == null||numberOne.length()==0){
response.sendRedirect("input.jsp");
return;
}
try{
double a=Double.parseDouble(numberOne);
double b=Double.parseDouble(numberTwo);
double r=0;
if(operator.equals("+"))
r=a+b;
else if(operator.equals("-"))
r=a-b;
else if(operator.equals("*"))
r=a*b;
else if(operator.equals("/"))
r=a/b;
out.print(a+""+operator+""+b+"="+r);
}
catch(Exception e){
out. println("请输入数字字符");
}
%>
</body>
</html>
5.编写choiceGrage.jsp,该页面中的form…
(1)编写choiceGrage.jsp,该页面中的form表单中使用radio(单选按钮)提供选择记忆测试级别:初级、中级和高级。初级需要记忆一个长度为5个字符的字符序列(例如,☆□☆△○),中级需要记忆一个长度为7个字符的字符序列,高级需要记忆一个长度为10个字符的字符序列。在choiceGrage.jsp页面选择级别后,单击form表单的提交键,提交给giveTest.jsp页面。
(2)编写giveTest.jsp页面,该页面获取choiceGrage.jsp页面提交的级别后,根据级别随机显示一个字符序列,比如,对于中级,这个字符序列的长度为7个字符。然后提示用户在5秒内记住这个字符序列。5秒后,该页面将自动定向到answerTest.jsp页面。
(3)编写answerTest.jsp页面,该页面的form表单提供用户给出答案的界面,即使用radio标记让用户选择字符序列中的各个字符,以此代表用户认为自己记住的字符序列。单击提交键,将选择提交给judgeAnswer.jsp页面
(4)编写judgeAnswer.jsp页面,该页面负责判断用户是否记住了giveTest.jsp页面给出的字符序列。
(5)运行choiceGrage.jsp页面。
giveTest.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Random" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor="orange">
<style>
#textStyle{
font-family: 宋体;font-size: 36px;color: plum;
}
</style>
<%!
static ArrayList<String> list=new ArrayList<String>();
static {
list.add("W");
list.add("Y");
list.add("S");
list.add("Z");
list.add("L");
}
String getNextTestString(int length){
StringBuffer buffer = new StringBuffer();
Random random = new Random();
for (int i = 0; i <length ; i++) {
int index = random.nextInt(list.size());
String str = list.get(index);
buffer.append(str);
}return new String(buffer);
}
%>
<%
String grade = request.getParameter("grade");
if (grade==null){
grade = (String)session.getAttribute("grade");
}
int number = Integer.parseInt(grade);
session.setAttribute("grade",grade);
String testString=null;
String yesORNo=null;
yesORNo=(String) session.getAttribute(yesORNo);
if (yesORNo==null){
testString=getNextTestString(number);
session.setAttribute("yesORNo","yes");
session.setAttribute("testString",testString);
}else if (yesORNo.equals("yes")){
response.sendRedirect("answer.jsp");
return;
}
else if (yesORNo.equals("no")){
testString=getNextTestString(number);
session.setAttribute("yesORNo","yes");
session.setAttribute("testString",testString);
}
%>
<p id="textStyle">给5秒记住您看到的字符序列:<br>
<%=testString%>
<br>5秒后,将转到答题页
<%
response.setHeader("refresh","5");
%>
</p>
</body>
</html>
choiceGrade.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor="orange">
<style>
#textStyle{
font-family: 宋体;font-size: 26px;color: plum;
}
</style>
<form action="giveTest.jsp" id="textStyle" method="post" name="form">
<input type="radio" name="grade" value="5"/> 初级
<input type="radio" name="grade" value="7" checked="ok"/> 中级
<input type="radio" name="grade" value="10"/> 高级
<br>
<input type="submit" name="submit" id="textStyle" value="提交"/>
<input type="reset" id="textStyle" value="重置"/>
</form>
</body>
</html>
answerTest.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor="orange">
<style>
#textStyle{
font-family: 宋体;font-size: 26px;color: plum;
}
</style>
<form>
<%
int n = Integer.parseInt((String) session.getAttribute("grade"));
session.setAttribute("yesORNo","no");
for (int i = 0; i <n ; i++) {
out.print("<br>第"+i+"个字符");
out.print(
"<input type=radio name=R"+i+"value='W'/>W"+
"<input type=radio name=R"+i+"value='Y'/>Y"+
"<input type=radio name=R"+i+"value='S'/>S"+
"<input type=radio name=R"+i+"value='Z'/>Z"+
"<input type=radio name=R"+i+"value='L'/>L"
);
}
%>
<br>
<input type="submit" name="submit" id="textStyle" value="提交"/>
<input type="reset"id="textStyle" value="重置"/>
</form>
</body>
</html>
judgeAnswer.jsp
<%@ page import="com.sun.org.apache.xpath.internal.operations.String" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor="white">
<p style="font-family: 宋体;font-size: 26px ;color:plum" >
<%
session.setAttribute("yesORNo","no");
request.setCharacterEncoding("utf-8");
int n=Integer.parseInt((String)session.getAttribute("grade"));
StringBuffer buffer = new StringBuffer();
for (int i = 0; i <n ; i++) {
buffer.append(request.getParameter("R"+i));
out.print(""+request.getParameter("R"+i));
}
String userAnswer = new String(buffer);
String testString = (String)session.getAttribute("testString");
if (testString.equals(userAnswer)){
out.print("您的记忆真不错");
}else {
out.print("您没有记忆住,答案是:<br>"+testString);
}
%>
<br><a href="giveTest.jsp">返回,继续记忆</a>
<br><a href="choiceGrade.jsp">返回,继续记忆</a>
</p>
</body>
</html>
6、双色球福利彩票
(1)编写buyLottery.jsp,用户在该页面输入双色球彩票的6个红球和一个蓝球的号码,代表用户购买的彩票,然后单击form表单的提交键,请求名字是lottery的servlet。
(2)编写创建servlet的Servlet类,该类创建的servlet可以判断用户的中奖情况。
(3)部署servlet。
(4)运行buyLottery.jsp页面
BuyLottery.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<style>
#red{
font-family: 宋体;font-size: 26px;color: red;
}
</style>
<style>
#blue{
font-family: 宋体;font-size: 26px;color: deepskyblue;
}
</style>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor="aqua">
<form action="lottery" method="post">
<br>输入6个红球号码(1-33)逗号或非数字字符分隔:<br>
<textarea name="digitRedball" id=red rows=1 cols=30></textarea>
<br>输入1个蓝球号码(1-16):<br>
<input type="text" name="digitBlueball" maxlength=2 size=2/>
<input type=submit value="提交"/>
</form>
</body>
</html>
Lottery_Servlet.java
public class Lottery_Servlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("Text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body bgcolor=cyan>");
String digitRedball = request.getParameter("digitRedball");
String digitBlueball = request.getParameter("digitBlueball");
if (digitRedball.length()==0||digitBlueball.length()==0) {
response.sendRedirect("/buyLottery.jsp");
return;
}
//用户买的全部红、蓝球号码
HashSet<Integer> userRedball=getUserDigit(digitRedball);
HashSet<Integer> userBlueball=getUserDigit(digitBlueball);
if (userRedball.size()!=6||userBlueball.size()!=1) {
response.sendRedirect("/buyLottery.jsp");
return;
}
HashSet<Integer> drawLotteryRedBall=dawLottery(6,33);
HashSet<Integer> drawLotteryBlueBall=dawLottery(1,16);
out.print("<h1>摇奖出的红球br>"+drawLotteryRedBall.toString()+"<br>");
out.print("摇奖出的蓝球"+drawLotteryBlueBall.toString()+"</h1>");
out.print("摇奖出的蓝球"+drawLotteryBlueBall.toString()+"</h1>");
drawLotteryRedBall.removeAll(userRedball);//摇奖红球去除用户红球
drawLotteryBlueBall.removeAll(userBlueball);//去除用户蓝球
int leftRedball=drawLotteryRedBall.size();//剩余红球数量
int leftBlueball=drawLotteryBlueBall.size();//剩余蓝球数量
if(leftRedball==0&&leftBlueball==0) {
out.println("<h1>头奖</h1>");
}
else if(leftRedball==0&&leftBlueball==1) {
out.println("<h1>二等奖</h1>");
}
else if(leftRedball==1&&leftBlueball==0) {
out.println("<h1>三等奖</h1>");
}
else {
out.println("<h1>没中奖</h1>");
}
out.print("<h1>用户买的红球<br>"+userRedball.toString()+"<br>");
out.print("用户买的蓝球"+userBlueball.toString()+"</h1>");
}
public HashSet<Integer> getUserDigit(String input){
HashSet<Integer> set = new HashSet<>();
Pattern pattern;
Matcher matcher;
String regex="[0-9][0-9]*";//匹配正整数的正则表达式
pattern=Pattern.compile(regex);
matcher = pattern.matcher(input);
double sum=0;
while (matcher.find()) {
String str = matcher.group();
set.add(Integer.parseInt(str));//用户买的彩票放入集合
}
return set;
}
public HashSet<Integer> dawLottery(int count,int allNumber){
LinkedList<Integer> saveNumber = new LinkedList<Integer>();
HashSet<Integer> set = new HashSet<>();
for (int i = 1; i <=allNumber ; i++) {//1-allNumber球号
saveNumber.add(i);
}
Random random = new Random();
while (count>0) {
int index = random.nextInt(saveNumber.size());
Integer number = saveNumber.remove(index);//抽取一个球不放回
count--;
set.add(number);//开奖号码放入集合
}
return set;
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>lottery</servlet-name>
<servlet-class>com.exercise.demo1.Lottery_Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>lottery</servlet-name>
<url-pattern>/lottery</url-pattern>
</servlet-mapping>
</web-app>
7.查询成绩
(1)启动数据库服务器,创建exercise数据库,创建表scoreReport,此表的列及意义如下:
id(char):存放学号,主键
name(char):存放姓名
mathScore(int):存放数学成绩
englishScore(int):存放英语成绩
(2)向数据表中输入数据。
(3)编写两个JSP页面inputNumber.jsp和queryShow.jsp。inputNumber.jsp页面提供1个form表单,该表单提供用户输入要查询的学生的学号或姓名,然后单击名字是“按学号查询”或“按姓名查询”提交键,请求queryShow.jsp页面,queryNumber.jsp负责连接数据库,查询学生的成绩并显示查询结果,其中按姓名查询是模糊查询,按学号查询是精准查询。
queryShow.jsp
<%@ page import="java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<style>
#tom{
font-family: 宋体;font-size: 20px;color: black;
}
</style>
<html><body bgcolor="beige">
<div>
<% //获取提交的属性值
request.setCharacterEncoding("utf-8");
String mess=request.getParameter("mess");
mess=mess.trim();
String submit=request.getParameter("submit");
if(mess.length()==0){
response.sendRedirect("inputNumber.jsp");
return;
}
//连接数据库
Connection con=null;
Statement sql;
ResultSet rs;
try{
//加载jabc-mysql 8.0 连接器
Class.forName("com.mysql.cj.jdbc.Driver");
}
//返回连接异常信息
catch(Exception e){
out.print("<p id=tom>"+e);
}
String url="jdbc:mysql://localhost:3306/exercise?"+
"useSSL=false&serverTimezone=CST&characterEncoding=utf-8";
String user="root";
String password="root";
out.print("<table border=1>");
out.print("<tr>");
out.print("<th id=tom width=100>"+"学号"+"</th>");
out.print("<th id=tom width=100>"+"姓名"+"</th>");
out.print("<th id=tom width=100>"+"数学成绩"+"</th>");
out.print("<th id=tom width=100>"+"英语成绩"+"</th>");
out.print("</tr>");
//连接数据库
try{con = DriverManager.getConnection(url,user,password);
sql=con.createStatement();
String SQL=null;
if(submit.contains("姓名")){
SQL="SELECT * FROM scorereport WHERE name like '%"+mess+"%'";
}
else if(submit.contains("学号")){
SQL="SELECT * FROM scorereport WHERE id='"+mess+"'";
}
rs=sql.executeQuery(SQL);
while(rs.next()){
out.print("<tr>");
out.print("<td id=tom>"+rs.getString(1)+"</td>");
out.print("<td id=tom>"+rs.getString(2)+"</td>");
out.print("<td id=tom>"+rs.getInt(3)+"</td>");
out.print("<td id=tom>"+rs.getInt(4)+"</td>");
out.print("</tr>");
}
out.print("</table>");
con.close();
}
catch(SQLException e){
out.print("<h3>"+e+"</h3>");
}
%>
</div>
</body></html>
inputNumber.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<style>
#tom{
font-family: 宋体;font-size: 28px;color: black;
}
</style>
<html>
<head>
<title>Title</title>
</head>
<body bgcolor="#da70d6">
<form action="queryShow.jsp" method="post">
请输入学号或姓名查询成绩:<br>
<input type="text" name="mess"/><br>
<input type="submit" name="submit" value="按照姓名查询"/>
<input type="submit" name="submit" value="按照学号查询"/>
</form>
</body>
</html>