欢迎投稿

今日深度:

Jsp实现简单登录、注册、以及简单计算等功能,

Jsp实现简单登录、注册、以及简单计算等功能,


Jsp老师布置的一个作业,提供了几个题目,让我们用Jsp实现一些简单的功能,新手上路,做的比较菜,如果大家有需要的欢迎大家浏览,如果觉得我的代码里面有什么错误清大家指正,感谢!

目录

一、登录界面

二、用户注册

三、主要可进行的操作

1、操作选择界面

2、查看账号密码(Cookie)

3、选择选修课程

4、计算n的阶乘

5、计算器(加减乘除)

6、计算x的y次方

四、结语

五、参考文章


一、登录界面

主要是三块:1、登录界面;2、验证码部分;3、LoginServlet判断用户名密码是否正确。

完整代码如下:

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>登录界面</title>

  </head>
  <body>
  <%
  	if(session.getAttribute("count")==null) {
  		session.setAttribute("count", 0);
  		application.setAttribute("flag", 0);
  	}
	Cookie[] cookies = request.getCookies();
	int flag;
	try {
		flag = (int)application.getAttribute("flag");
	}catch(Exception e) {
		flag = 0;
	}
	if(flag == 1)
	{
		String cookieName = (String)session.getAttribute("cookieName");
		for(Cookie user :cookies) {
			if(user.getName().equals(cookieName)) {
				response.sendRedirect(request.getContextPath()+"/sucLogin.jsp?userName="+cookieName); 			
			}
		}
	}
	else {
	%>
	<center>
		<h1>欢迎使用 </h1>
		<form action="<%=request.getContextPath()%>/LoginServlet" method="post">
			<table>
				<tr>
			  		<td>用户名:</td>
			  		<td><input type="text" name="userName"  value="${param.userName}"></td>
			  	</tr>
			  	<tr>
			  		<td>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:</td>
			  		<td><input type="password" name="passWord" ></td>
			  	</tr>
			  	<tr>
			  		<td>验证码:</td>
			  		<td>
			  			<input type="text" name="validateCode" >
			  			<img id="validateCode" src="validateCode.jsp" οnclick="javascript:document.getElementById('validateCode').src='validateCode.jsp?'+Math.random();" />
			  		</td>
			  	</tr>
			  	<tr>
				  	<font color="red">
						<%
							if(request.getAttribute("message")!= null){
								out.print(request.getAttribute("message"));
							}
						%>
					</font>
				</tr>
			  	<tr>
			  		<td colspan="2" align="center">
			 			<input type="submit" value=" 登录 "/>
			  		</td>
			  	</tr>
			  </table>
		  </form>
		  <form action="register.jsp" method="post" >
				<input type="submit" value=" 注册 "/>
		  </form>
	 <%} %>
	</center>
  </body>
</html>

validateCode.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Random"%>
<%@ page import="java.io.OutputStream"%>
<%@ page import="java.awt.Color"%>
<%@ page import="java.awt.Font"%>
<%@ page import="java.awt.Graphics"%>
<%@ page import="java.awt.image.BufferedImage"%>
<%@ page import="javax.imageio.ImageIO"%>
<%
	int width = 60;
	int height = 20;
	BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);		//创建图片
	Graphics grap = image.getGraphics();
	Random random = new Random();
	// 创建背景颜色
	grap.setColor(new Color(random.nextInt(50)+200,random.nextInt(50)+200,random.nextInt(50)+200));
	grap.fillRect(0, 0, width, height);
	// 画出边界
	grap.setColor(Color.black);
	grap.drawRect(0, 0, width-1, height-1);
	String key = "";		// 存放生成随机4位验证码
	for(int i=0;i<4;i++)
		key = key + random.nextInt(10);
	//制作干扰
	for (int i=0; i<5; i++) {
		int x1 = random.nextInt(width);
		int x2 = random.nextInt(width);
		int y1 = random.nextInt(height);
		int y2 = random.nextInt(height);
		grap.drawLine(x1, y1, x2, y2);	
	}
	session.setAttribute("key", key);		//将验证码存储到session中
	grap.setColor(new Color(0, 100, 0));
	grap.setFont(new Font("Candara", Font.BOLD, 24));
	grap.drawString(key, 8, 16);
	grap.dispose();
	response.setContentType("image/jpeg");
	out.clear();
	out = pageContext.pushBody();
	OutputStream strm = response.getOutputStream();
	ImageIO.write(image, "jpeg", strm);
	strm.close();
%>

LoginServlet.java(包:Servlet)

package Servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class LoginServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		this.doPost(req, resp);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		String userName = request.getParameter("userName");				//接收用户名
		String passWord = request.getParameter("passWord");				//接收密码
		String validateCode = request.getParameter("validateCode");		//接收验证码
		//默认的初始账号
		String myUser1 = "admin";
		String myPassword1 = "123abc";
		//判断账号密码是否正确
		if((userName.equals(myUser1)&&passWord.equals(myPassword1)) ) {//判断默认账号
			if(validateCode.equals((String)request.getSession().getAttribute("key"))) {
				Cookie cookie = new Cookie(userName, passWord);
				response.addCookie(cookie);
				response.sendRedirect(request.getContextPath()+"/sucLogin.jsp?userName="+userName);
				return;
			}
			else {
				request.setAttribute("message", "验证码输入错误,请重新输入<br>");
				request.getRequestDispatcher("/login.jsp").forward(request, response);
				return;
			}
		}
		else {
			int count = (int)request.getSession().getAttribute("count");	//接收注册的用户数量
			String[][] user = null;
			if(count!=0) {				//接收所有注册的用户的账号和密码
				user = new String[count][2];
				for(int i=0;i<count;i++) {
					user[i][0] = (String)request.getSession().getAttribute("registerUserName"+i);
					user[i][1] = (String)request.getSession().getAttribute("registerPassword"+i);
				}
			}
			if(count!=0) {		//判断注册账号
				for(int i=0;i<count;i++) {
					if(userName.equals(user[i][0])&&passWord.equals(user[i][1])) {
						if(validateCode.equals((String)request.getSession().getAttribute("key"))) {
							Cookie cookie = new Cookie(userName, passWord);
							response.addCookie(cookie);
							response.sendRedirect(request.getContextPath()+"/sucLogin.jsp?userName="+userName);
							return;
						}
						else {
							request.setAttribute("message", "验证码输入错误,请重新输入<br>");
							request.getRequestDispatcher("/login.jsp").forward(request, response);
							return;
						}
					}
				}
			}
			request.setAttribute("message", "账号或密码错误,请重新输入<br>");
			request.getRequestDispatcher("/login.jsp").forward(request, response);
		}
		
	}
 
}

LoginServlet的web.xml配置

 <servlet>
      <servlet-name>LoginServlet</servlet-name>
      <servlet-class>Servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>LoginServlet</servlet-name>
      <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

二、用户注册

这一部分类似于登录页面的设计主要的是两块:1、注册界面;2、注册信息是否正确的判断。

register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>注册</title>

  </head>
  
  <body>
    <center><h1>注册 </h1></center>
  </body>
  <body>
	<center>
		<form action="registerLoading.jsp" method="post">
			<table>
				<tr>
			  		<td align="right">用户名:</td>
			  		<td><input type="text" name="regUserName" value="${param.userName}" ></td>
			  	</tr>
			  	<tr>
			  		<td align="right">设置密码:</td>
			  		<td><input type="password" name="passWord" ></td>
			  	</tr>
			  	<tr>
			  		<td align="right">再次输入密码:</td>
			  		<td><input type="password" name="rePassWord" ></td>
			  	</tr>
			  	<tr>
			  		<td align="right">验证码:</td>
			  		<td>
			  			<input type="text" name="validateCode" >
			  			<img id="loginform:vCode" src="validateCode.jsp" />
			  		</td>
			  		
			  	</tr>
			  	<tr>
				  	<font color="red">
						<%
							if(request.getAttribute("message")!= null){
								out.print(request.getAttribute("message"));
							}
						%>
					</font>
				</tr>
			  	<tr>
			  		<td colspan="2" align="center">
				  			<input type="submit" value=" 确认 "/>
			  		</td>
			  	</tr>
			  </table>
		  </form>
		  <a href="<%=request.getContextPath()%>/login.jsp">返回登录界面</a>
	</center>
  </body>
</html>

registerLoading.jsp

<%@page import="java.sql.Time"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>加载中</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
	<center><h2>正在加载中,请耐心等待...... <br></h2></center>
	<%
		String userName = request.getParameter("regUserName");			//接收注册的用户名
		String passWord = request.getParameter("passWord");				//接收输入的密码
		String rePassWord = request.getParameter("rePassWord");			//接收再次输入的密码
		String validateCode = request.getParameter("validateCode");		//接收输入的验证码
		String key = (String)request.getSession().getAttribute("key");	//接收正确的验证码输入
		if(validateCode.equals(key)) {
			if(!rePassWord.equals(passWord)) {
				request.setAttribute("message", "两遍密码不一致,请重新输入<br>");
				request.getRequestDispatcher("/register.jsp").forward(request, response);
			}
			else if(userName.equals("admin")) {
				request.setAttribute("message", "该用户名已被注册,请重新输入<br>");
				request.getRequestDispatcher("/register.jsp").forward(request, response);
			}
			else {
				int count = (int)request.getSession().getAttribute("count");	//接收注册的用户数量
				String[] user = null;
				if(count!=0) {					//接收所有注册的用户的账号和密码
					user = new String[count];
					for(int i=0;i<count;i++) {
						user[i] = (String)request.getSession().getAttribute("registerUserName"+i);
					}
				}
				for(int i=0;i<count;i++) {
					if(userName.equals(user[i])) {
						request.setAttribute("message", "该用户名已被注册,请重新输入<br>");
						request.getRequestDispatcher("/register.jsp").forward(request, response);
					}
				}
				request.setAttribute("message", "恭喜您注册成功!<br>");
				session.setAttribute("registerUserName"+count, userName);		//上传账号
				session.setAttribute("registerPassword"+count, passWord);		//上传密码
				session.setAttribute("count", count+1);				//注册用户数+1
				request.getRequestDispatcher("/login.jsp").forward(request, response);
			}
		}
		else {
			request.setAttribute("message", "验证码输入错误,请重新输入<br>");
			request.getRequestDispatcher("/register.jsp").forward(request, response);
		}
	 %>
  </body>
</html>

三、主要可进行的操作

1、操作选择界面

做了一个操作选择界面,总共实现了如下的几个操作:

sucLogin.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>功能选择</title>
	</head>
	
	<body>
		<center>
			<h2 >
				尊敬的
				<%
				String userName = request.getParameter("userName");
				if(userName==null) {
					userName = (String)session.getAttribute("cookieName");
				}
				out.print(userName);
				%>
				,您好!<br>
			</h2>
			<%
				if((int)application.getAttribute("flag") == 0){
					session.setAttribute("cookieName", userName);
					application.setAttribute("flag", 1);
				}
			 %>
			 <h3>
				 <table border="1" >
				 	<tr>
				 		<td align="center">请选择要进行的操作:</td>
				 	</tr>
				 	<tr>
				 		<td align="center"><a href="<%=request.getContextPath()%>/getCookies.jsp">查看账号密码(Cookie)</a></td>
				 	</tr>
				 	<tr>
				 		<td align="center"><a href="<%=request.getContextPath()%>/courseSelection.jsp">选择选修的课程</a></td>
					</tr>
					<tr>
				 		<td align="center"><a href="<%=request.getContextPath()%>/factorialInput.jsp">计算n的阶乘</a></td>
					</tr>
					<tr>
				 		<td align="center"><a href="<%=request.getContextPath()%>/calculatorInput.jsp">计算器(加减乘除)</a></td>
					</tr>
					<tr>
				 		<td align="center"><a href="<%=request.getContextPath()%>/powerInput.jsp">计算x的y次方</a></td>
					</tr>
				 </table>
			</h3>
			 <a href="<%=request.getContextPath()%>/exitLogin.jsp"><br>退出登录</a>
		</center>
	</body>
</html>

 

2、查看账号密码(Cookie)

getCookies.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>Cookies表单</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
	  <center>
	    <%
	    Cookie[] cookies = request.getCookies();
	    String userName = (String)session.getAttribute("cookieName");
		for(Cookie user :cookies) {
			if(user.getName()!=null && user.getValue()!=null && user.getName().equals(userName))
				out.println("<br>用户名:"+user.getName()+",密码:"+user.getValue()+"<br>");	
		}
	     %>
	     <br><a href="<%=request.getContextPath()%>/sucLogin.jsp">返&nbsp;&nbsp;回</a>
	  </center>
  </body>
</html>

 

3、选择选修课程

共两块:1、输入和选择;2、显示

courseSelection.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>Course Selection</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  <body>
    <center>
    	<%request.setCharacterEncoding("utf-8");%>
    	<form action="showCourses.jsp" method="post">
			  <table border="1">
	    		<tr>
	    			<td align="center">真实姓名:</td>
	    			<td><input type="text" name="name" value="${param.userName}"></td>
	    		</tr>
	    		<tr>
					<td align="center">性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:</td>
					<td>
						<input type="radio" name="sex" value="男" checked="checked">男
						<input type="radio" name="sex" value="女">女
					</td>
				</tr>
				<tr>
					<td align="center">所在系部:</td>
					<td>
						<select name="sdept">	
							<option>信息系</option>	<option>经管系</option>
							<option>文法系</option>   <option>资土系</option>
							<option>机电系</option>
						</select>
					</td>
				</tr>
				<tr>
					<td align="center">所选课程:</td>
					<td>
						<input type="checkbox" name="course" value="高等数学" id="1">高等数学<br>
						<input type="checkbox" name="course" value="大学英语" id="2">大学英语<br>
						<input type="checkbox" name="course" value="JSP程序设计" id="3">JSP程序设计<br>
						<input type="checkbox" name="course" value="Java程序设计" id="4">Java程序设计<br>
						<input type="checkbox" name="course" value="计算机网络" id="4">计算机网络
					</td>
				</tr>
				<tr>
					<td colspan="2" align="center">
						<input type="submit" value=" 提&nbsp;&nbsp;交 ">
					</td>
				</tr>
	    	</table>
		 </form>
    </center>
  </body>
</html>

showCourses.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>选课信息</title>

  </head>
  
  <body>
  	<%request.setCharacterEncoding("utf-8");%>
    <center>
    	<table border="1">
    		<tr>
    			<td align="center">真实姓名:</td>
    			<td><%out.print(request.getParameter("name"));%></td>
    		</tr>
    		<tr>
				<td align="center">性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:</td>
				<td><%out.print(request.getParameter("sex"));%></td>
			</tr>
			<tr>
				<td align="center">所在系部:</td>
				<td><%out.print(request.getParameter("sdept"));%></td>
			</tr>
			<tr>
				<td align="center">所选课程:</td>
				<td>
					<%String [] courses=request.getParameterValues("course");
					  if(courses!=null) {
						  for(int i=0, length=courses.length;i<length;i++) {
						  	if(courses[i]!=null) {
							 	out.print(courses[i]+"<br>");
							}
						 }
					 }
					%>
				</td>
			</tr>
    	</table>
    	<a href="<%=request.getContextPath()%>/sucLogin.jsp">返&nbsp;&nbsp;回</a>
    </center>
  </body>
</html>

 

4、计算n的阶乘

两部分:1、输入;2、显示

factorialInput.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
    <base href="<%=basePath%>">
    <title>计算阶乘</title>
  </head>
  
  <body>
    <center>
  		<form action="FactorialServlet">
  			<table border="1">
  				<tr>
  					<br>
  					<td align="right" >请输入要计算的数:</td>
  					<td><input type="text" name="num" ></td>
  					<td><input type="submit" value=" 提交 "></td>
  				</tr>
  			</table>
  		</form>
  	</center>
  </body>
</html>

FactorialServlet.java(包:Servlet)

package Servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/FactorialServlet")
public class FactorialServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String num = req.getParameter("num");
		int number = Integer.parseInt(num);
		int factorial = 1;
		for(int i=2;i<=number;i++)
			factorial*=i;
		resp.setContentType("text/html;charset=utf-8");
		req.setCharacterEncoding("utf-8");
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.print("<title>阶乘结果</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<h2>");
		out.println("<br>"+number+"的阶乘为:"+factorial+"<br>");
		out.println("</h2>");
		out.println("<a href=\"sucLogin.jsp\"><br>返&nbsp;&nbsp;&nbsp;回</a>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.flush();
	}
	
}

5、计算器(加减乘除)

两部分:1、输入;2、显示

calculatorInput.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>计算器</title>

  </head>
  
  <body>
    <form action="CalculateServlet" method="post">
	    <center>
	    	<table>
	    		<tr>
	    			<td>请输入要计算的式子:</td>
	    			<td><input type="text" name="formula" ></td>
	    			<td><input type="submit" value="提交"></td>
	    		</tr>
	    		<tr>
	    			<td colspan="3" align="center">
	    				注:仅能运算加(+)、减(-)、乘(*)、除(/),且不能有括号。
	    			</td>
	    		</tr>
	    	</table>
	    </center>
    </form>
  </body>
</html>

CalculateServlet.java(包:Servlet)

package Servlet;

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 CalculateServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		this.doPost(req, resp);
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		String formula = req.getParameter("formula");					//接收需要计算的公式
		int j = 0;
		while(formula.indexOf("/")!=-1 || formula.indexOf("*")!=-1) {		//因为乘除优先级高,所以首先对所有的'*'和'/'进行处理
			if(formula.indexOf("/")!=-1 && formula.indexOf("*")!=-1)
				j = Math.min(formula.indexOf("/"),formula.indexOf("*"));	//乘除同级别,从左到右顺序计算,谁在前先算谁
			else if(formula.indexOf("/")!=-1 && formula.indexOf("*")==-1)
				j = formula.indexOf("/");
			else if(formula.indexOf("/")==-1 && formula.indexOf("*")!=-1)
				j = formula.indexOf("*");
			if(j!=-1) {												//在找到一个乘号或者一个除号的时候
				String tmp1 = "";
				int k = 1;
				while(j-k>=0 && formula.charAt(j-k)>='0' && formula.charAt(j-k)<='9') {		//找到符号前面的数,j-k是为防止检索到-1越界
					tmp1 = formula.charAt(j-k)+tmp1;
					k++;
				}
				String tmp2 = "";
				k = 1;
				while(j+k<formula.length() && formula.charAt(j+k)>='0' && formula.charAt(j+k)<='9') {	//找到符号后面的数,j+k是为防止检索到str.length()越界
					tmp2 += formula.charAt(j+k);
					k++;
				}
				//用计算的结果替换原来乘法或者除法的运算
				if(formula.charAt(j)=='/') {
					String restr = (Integer.parseInt(tmp1) / Integer.parseInt(tmp2))+"";
					formula = formula.replaceAll(tmp1+formula.charAt(j)+tmp2, restr);
				}
				else if(formula.charAt(j)=='*') {
					String newFormula = (Integer.parseInt(tmp1) * Integer.parseInt(tmp2))+"";
					String oldFormula = tmp1+formula.charAt(j)+tmp2;
					formula = formula.replace(oldFormula, newFormula);
				}
					
			}
		}
		//在上面的操作完成后剩下得只有加减法运算,优先级同级顺序运算即可。
		int tmp = 0;
		int Sum = 0;
		char f = '+';		//因为Sum=0,第一个操作是Sum一定是加第一个数,所以设符号f为'+'
		for(j=0;j<formula.length();j++) {
			if(formula.charAt(j)>='0' && formula.charAt(j)<='9') {
				tmp = tmp*10 + (formula.charAt(j)-'0');
			}
			else {	//在找到下一个符号的时候完成上一个符号的加减操作然后用新找到符号替换原符号
				if(f == '+')
					Sum += tmp;
				else 
					Sum -= tmp;
				f = formula.charAt(j);
				tmp = 0;
			}
			if(j==formula.length()-1) {		//Sum +或-最后一个数
				if(f == '+')
					Sum += tmp;
				else 
					Sum -= tmp;
			}	
		}
		//输出结果
		resp.setContentType("text/html;charset=utf-8");
		req.setCharacterEncoding("utf-8");
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>计算器</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<h2>");
		out.println("<br>"+req.getParameter("formula")+"的结果为:"+Sum+"<br>");
		out.println("</h2>");
		out.println("<a href=\"sucLogin.jsp\"><br>返&nbsp;&nbsp;&nbsp;回</a>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.flush();
	}
}

CalculateServlet的web.xml配置 

<servlet>
      <servlet-name>CalculateServlet</servlet-name>
      <servlet-class>Servlet.CalculateServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>CalculateServlet</servlet-name>
      <url-pattern>/CalculateServlet</url-pattern>
  </servlet-mapping>

6、计算x的y次方

两部分:1、输入;2、显示

powerInput.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>幂运算</title>

  </head>
  
  <body>
    <center>
      	<br>
  		<form action="PowerServlet">
  			<table border="1">
  				<tr>
  					<td align="right">请输入x:
  					<input type="text" name="x" ></td>
  					<td align="right">请输入y:
  					<input type="text" name="y" ></td>
  					<td><input type="submit" value=" 提交 "></td>
  				</tr>
  			</table>
  		</form>
  	</center>
  </body>
</html>

PowerServlet.java(包:Servlet)

package Servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/PowerServlet")
public class PowerServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String X = req.getParameter("x");
		String Y = req.getParameter("y");
		int x = Integer.parseInt(X);
		int y = Integer.parseInt(Y);
		int result = (int)Math.pow(x, y);
		resp.setContentType("text/html;charset=utf-8");
		req.setCharacterEncoding("utf-8");
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.print("<title>幂运算结果</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<h2>");
		out.println("<br>"+x+"<sup>"+y+"</sup>的结果为:"+result+"<br>");
		out.println("</h2>");
		out.println("<a href=\"sucLogin.jsp\"><br>返&nbsp;&nbsp;&nbsp;回</a>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.flush();
	}
	
}

四、结语

刚学了Jsp大概一个月的时间,上课有些时候听不太懂,其实还是有很多的东西不太明白。总的来说这是一次不错的经历吧,刚刚开始的时候的确有很多的东西不会写,页面跳转也一直出问题,整个项目完整做完大概用了接近5天的时间,主要大多数的时间都花在了怎么写cookie,就是实现如果前面登陆过,并未在操作选择界面点击退出登录,那么在浏览器中再次打开登录界面时会实现自动的登录。可能写的很多东西并不符合现在真正Jsp开发的习惯写法,说实在的没有什么做项目的经验,有机会的话还是希望再有这样的机会吧。

五、参考文章

登录界面的写法:https://blog.csdn.net/qq_37306786/article/details/80484200

验证码的写法:https://blog.csdn.net/roc_wl/article/details/82425200

文章最后发布于: 2019-10-21 17:02:41

www.htsjk.Com true http://www.htsjk.com/shujukunews/37805.html NewsArticle Jsp实现简单登录、注册、以及简单计算等功能, Jsp老师布置的一个作业,提供了几个题目,让我们用Jsp实现一些简单的功能,新手上路,做的比较菜,如果大家有需要的欢迎大家浏览,...
相关文章
    暂无相关文章
评论暂时关闭