Jsp老师布置的一个作业,提供了几个题目,让我们用Jsp实现一些简单的功能,新手上路,做的比较菜,如果大家有需要的欢迎大家浏览,如果觉得我的代码里面有什么错误清大家指正,感谢!
目录
一、登录界面
主要是三块:1、登录界面;2、验证码部分;3、LoginServlet判断用户名密码是否正确。
完整代码如下:
login.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
登录界面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 {
%>
欢迎使用
用户名: | |
密 码: | |
验证码: |
|
if(request.getAttribute("message")!= null){
out.print(request.getAttribute("message"));
}
%>
validateCode.jsp
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", "验证码输入错误,请重新输入
");
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
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
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", "验证码输入错误,请重新输入
");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
}
}
}
request.setAttribute("message", "账号或密码错误,请重新输入
");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
LoginServlet的web.xml配置
LoginServlet
Servlet.LoginServlet
LoginServlet
/LoginServlet
二、用户注册
这一部分类似于登录页面的设计主要的是两块:1、注册界面;2、注册信息是否正确的判断。
register.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
注册注册
用户名: | |
设置密码: | |
再次输入密码: | |
验证码: |
|
if(request.getAttribute("message")!= null){
out.print(request.getAttribute("message"));
}
%>
registerLoading.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
加载中正在加载中,请耐心等待......
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", "两遍密码不一致,请重新输入
");
request.getRequestDispatcher("/register.jsp").forward(request, response);
}
else if(userName.equals("admin")) {
request.setAttribute("message", "该用户名已被注册,请重新输入
");
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
user[i] = (String)request.getSession().getAttribute("registerUserName"+i);
}
}
for(int i=0;i
if(userName.equals(user[i])) {
request.setAttribute("message", "该用户名已被注册,请重新输入
");
request.getRequestDispatcher("/register.jsp").forward(request, response);
}
}
request.setAttribute("message", "恭喜您注册成功!
");
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", "验证码输入错误,请重新输入
");
request.getRequestDispatcher("/register.jsp").forward(request, response);
}
%>
三、主要可进行的操作
1、操作选择界面
做了一个操作选择界面,总共实现了如下的几个操作:
sucLogin.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
功能选择尊敬的
String userName = request.getParameter("userName");
if(userName==null) {
userName = (String)session.getAttribute("cookieName");
}
out.print(userName);
%>
,您好!
if((int)application.getAttribute("flag") == 0){
session.setAttribute("cookieName", userName);
application.setAttribute("flag", 1);
}
%>
请选择要进行的操作: |
查看账号密码(Cookie) |
选择选修的课程 |
计算n的阶乘 |
计算器(加减乘除) |
计算x的y次方 |
2、查看账号密码(Cookie)
getCookies.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
Cookies表单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("
用户名:"+user.getName()+",密码:"+user.getValue()+"
");
}
%>
3、选择选修课程
共两块:1、输入和选择;2、显示
courseSelection.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
Course Selection真实姓名: | |
性 别: | 男 女 |
所在系部: | 信息系经管系 文法系资土系 机电系 |
所选课程: | 高等数学 大学英语 JSP程序设计 Java程序设计 计算机网络 |
showCourses.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
选课信息真实姓名: | |
性 别: | |
所在系部: | |
所选课程: | if(courses!=null) { for(int i=0, length=courses.length;i if(courses[i]!=null) { out.print(courses[i]+" } } } %> |
4、计算n的阶乘
两部分:1、输入;2、显示
factorialInput.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
计算阶乘请输入要计算的数: |
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("");
out.println("
");out.print("
阶乘结果");out.println("");
out.println("
");out.println("
out.println("
");
out.println("
"+number+"的阶乘为:"+factorial+"
");
out.println("");
out.println("
返 回");
out.println("
out.println("");
out.println("");
out.flush();
}
}
5、计算器(加减乘除)
两部分:1、输入;2、显示
calculatorInput.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
计算器请输入要计算的式子: | ||
注:仅能运算加(+)、减(-)、乘(*)、除(/),且不能有括号。 |
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='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
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("");
out.println("
");out.println("
计算器");out.println("");
out.println("
");out.println("
out.println("
");
out.println("
"+req.getParameter("formula")+"的结果为:"+Sum+"
");
out.println("");
out.println("
返 回");
out.println("
out.println("");
out.println("");
out.flush();
}
}
CalculateServlet的web.xml配置
CalculateServlet
Servlet.CalculateServlet
CalculateServlet
/CalculateServlet
6、计算x的y次方
两部分:1、输入;2、显示
powerInput.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
幂运算请输入x: | 请输入y: |
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("");
out.println("
");out.print("
幂运算结果");out.println("");
out.println("
");out.println("
out.println("
");
out.println("
"+x+""+y+"的结果为:"+result+"
");
out.println("");
out.println("
返 回");
out.println("
out.println("");
out.println("");
out.flush();
}
}
四、结语
刚学了Jsp大概一个月的时间,上课有些时候听不太懂,其实还是有很多的东西不太明白。总的来说这是一次不错的经历吧,刚刚开始的时候的确有很多的东西不会写,页面跳转也一直出问题,整个项目完整做完大概用了接近5天的时间,主要大多数的时间都花在了怎么写cookie,就是实现如果前面登陆过,并未在操作选择界面点击退出登录,那么在浏览器中再次打开登录界面时会实现自动的登录。可能写的很多东西并不符合现在真正Jsp开发的习惯写法,说实在的没有什么做项目的经验,有机会的话还是希望再有这样的机会吧。
五、参考文章
关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Jsp实现简单登录、注册、以及简单计算等功能]http://www.zyiz.net/tech/detail-93432.html