习气不正,治学不端,不可达也,知行合一,不骄不躁。自主学习,及时学习,及时反思。
jsp内置对象request
request.getParamter(String s)该页面获取它的上一个jsp提交的数据。
jsp页面是通过form表单的action来跳转页面,form里可以插入点击事件
登陆
完了之后它里面的按按钮又可以插入响应事件或者按钮。
request和session都是jsp内置对象
session.setAttribute将数据保存在session,在用的时候通过getAttribute获取,session是tomcat响应浏览器http请求而为每一个浏览器分配session对象,保存它所申请的数据信息,它是服务器创建返回给浏览器的,浏览器只进行了保存。
注意:你所编写的代码都是要经过tomcat服务器再反映到浏览器的,session作用对象是服务器,而浏览器只是显示而已
Login.jsp
<% String path = request.getContextPath();%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录系统</title>
</head>
<body>
<form method="get" id="form" action="http://localhost:8080/example8_1_war_exploded/LoginServlet1?user=admin&password=666">
<!--嵌入外部代码-->
<tr>
<td>用户名</td>
<td><input type="text" id="username" name="username" value="${username}" placeholder="请输入用户名"/></td>
</tr>
<tr>
<br><br><td>密码</td>
<td><input type="password" id="password" name="password" placeholder="请输入密码"/></td>
</tr>
<br><td>验证码</td>
<td><input type="text" name="yzm" id="yz">
<img alt="验证码看不清,换一张" src="YZMServlet" id="yzm" onclick="changeImg()">
<a href="#" onclick="changeImg()">看不清,换一张</a></td>
<br><button type="button" name="button" value="提交" onclick="loginVerify()">登陆</button>
${error}
</form>
</body>
</html>
<script>
<!--嵌入外部代码-->
function loginVerify(){
var username=document.getElementById("username").value;
var password=document.getElementById("password").value;
var yam=document.getElementById("yz").value;
if(username ==''){
alert('用户名不能为空,请您输入');
return;
}
if(password ==''){
alert('密码不能为空,请您输入');
return;
}
if(yam ==''){
alert('验证码不能为空,请您输入');
return;
}
<!-- -->
document.getElementById("form").submit();
}
function changeImg()
{
document.getElementById("yzm").src="YZMServlet?i="+Math.random();
}
</script>
</script>
中间无界面servlet
package org.example;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
//@WebServlet(name = "LoginServlet1", value = "/LoginServlet1")
public class LoginServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String yzm = request.getParameter("yzm");
//HttpSession session = request.getSession();
//获取session标记的值,即服务端生成的验证码的值
//String yzm2 = (String) session.getAttribute("str");
response.setContentType("text/html;charset=utf-8");
//客户端那边输入的验证码
String cCode = request.getParameter("yzm");
//生成验证码页面放入域中的验证码
String sCode = (String) request.getSession().getAttribute("code");
if (cCode.equals(sCode)) {
if ("admin".equals(username) && "666".equals(password)) {
//密码正确,跳转
request.setAttribute("username", username);
request.getRequestDispatcher("/index.jsp").forward(request, response);
} else {
request.setAttribute("username", username);
request.setAttribute("error", "用户名或密码错误,请重新输入!");
request.getRequestDispatcher("/Login.jsp").forward(request, response);//其中/为系统设置的最初的页面
}
}
else{
response.getWriter().print("验证码错误!!1!");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
验证码
package org.example;
import javax.imageio.ImageIO;
import javax.servlet.;
import javax.servlet.http.;
import javax.servlet.annotation.;
import java.awt.;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
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.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
//@WebServlet(name = “YZMServlet”, value = “/YZMServlet”)
public class YZMServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final int WIDTH = 120;//生成图片的宽度
public static final int HEIGHT = 30;//生成图片的高度
public static final int WORDS_NUMBER = 4;//验证码中字符的个数
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
String createTypeFlag = req.getParameter("createTypeFlag");//接收客户端传递的createTypeFlag标识
//在内存中创建一张图片
BufferedImage bi = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_3BYTE_BGR);
//得到图片
Graphics g = bi.getGraphics();
//设置图片的背景色
setBackGround(g);
//设置图片的边框
setBorder(g);
//在图片上画干扰线
drawRandomLine(g);
//在图片上放上随机字符
String randomString = this.drawRandomNum((Graphics2D)g, createTypeFlag);
//将随机数存在session中
req.getSession().setAttribute("code", randomString);
System.out.println(randomString);
//设置响应头通知浏览器以图片的形式打开
resp.setContentType("image/jpeg");
//设置响应头控制浏览器不要缓存
resp.setDateHeader("express", -1);
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Pragma", "no-cache");
//将图片传给浏览器
ImageIO.write(bi, "jpg", resp.getOutputStream());
}
//设置图片背景色
//@param g
private void setBackGround(Graphics g) {
//设置颜色
g.setColor(Color.WHITE);
//填充区域
g.fillRect(0, 0, WIDTH, HEIGHT);
}
/*
* 设置图片的边框
* @param g
* */
private void setBorder(Graphics g) {
//设置边框颜色
g.setColor(Color.BLUE);
//边框区域
g.drawRect(1, 1, WIDTH - 2, HEIGHT -2);
}
/*
* 在图片上画随机线条
* @param g
* */
private void drawRandomLine(Graphics g) {
//设置颜色
g.setColor(Color.GREEN);
//设置线条个数并画线
for ( int i = 0 ; i < 3 ; i++ ) {
int x1 = new Random().nextInt(WIDTH);
int y1 = new Random().nextInt(HEIGHT);
int x2 = new Random().nextInt(WIDTH);
int y2 = new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
/*
* 在图片上画随机字符
* @param g
* @param createTypeFlag
* @return String
* */
private String drawRandomNum(Graphics g,String createTypeFlag) {
//设置颜色
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD,20));
//数字字母的组合
String baseNumLetter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
String baseNum = "0123456789";
String baseLetter = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
if ( createTypeFlag != null && createTypeFlag.length() > 0 ) {
if( createTypeFlag.equals("nl") ) {
//截取数字和字母的组合
return createRandomChar((Graphics2D) g,baseNumLetter);
} else if ( createTypeFlag.equals("n") ) {
//截取数字的组合
return createRandomChar((Graphics2D) g,baseNum);
} else if ( createTypeFlag.equals("l") ) {
//截取字母的组合
return createRandomChar((Graphics2D) g,baseLetter);
}
} else {
//截取数字和字母的组合
return createRandomChar((Graphics2D) g,baseNumLetter);
}
return "";
}
/*
* 创建随机字符
* @param g
* @param baseChar
* @return String
* */
private String createRandomChar(Graphics2D g , String baseChar) {
StringBuffer b = new StringBuffer();
int x = 5;
String ch = "";
for ( int i = 0 ; i < WORDS_NUMBER ; i++ ) {
//设置字体的旋转角度
int degree = new Random().nextInt() % 30;
ch = baseChar.charAt(new Random().nextInt(baseChar.length())) + "";
b.append(ch);
//正向角度
g.rotate(degree * Math.PI / 180 , x,20);
g.drawString(ch, x, 20);
//反向角度
g.rotate(-degree * Math.PI / 180 , x,20);
x+=30;
}
return b.toString();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(req, resp);
}
}
web.xml