今天又把jsp注册登录做了一下 从index.jsp写表单开始
action="user.do?method=login" 写注册 需要注意给用户名 密码添加name属性
写完第一个jsp文件 再写servlet 新建new->package->(设置包名为com.servlet)->新建servlet文件
需要注意可以将which method stubs would you like to create?下面的√全取消
设置servlet名字为UserServlet后点击next->设置Servlet/JSP Mapping URL为在原来新建的jsp文件写的user.do就行了
这是我写的UserServlet;
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.UserDAO;
import com.pojo.User;
public class UserServlet extends HttpServlet {
private UserDAO userdao = new UserDAO();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String method = request.getParameter("method");
if("login".equals(method)){
doLogin(request , response);
}
if("regist".equals(method)){
doRegist(request, response);
}
}
private void doRegist(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String repassword = request.getParameter("repassword");
String code = request.getParameter("code");
if(!password.equals(repassword)){
response.getWriter().print("<script>alert('两次密码不一致!');location='regist.jsp'</script>");
return ;
}
String realCode = (String) request.getSession().getAttribute("code");
if(!code.equalsIgnoreCase(realCode)){
response.getWriter().print("<script>alert('验证码不正确!');location='regist.jsp'</script>");
return ;
}
int n = userdao.regist(username, password);
if(n>0){
response.getWriter().print("<script>alert('注册成功!');location='index.jsp'</script>");
}else{
response.getWriter().print("<script>alert('注册失败!');location='regist.jsp'</script>");
}
}
private void doLogin(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userdao.login(username, password);
if(user!=null){
//如果登录成功 在session中存值
request.getSession().setAttribute("user", user);
request.getRequestDispatcher("main.jsp").forward(request, response);
return ;
}
response.sendRedirect("index.jsp");
}
}
这里 虽然很简单 做一个if判断 执行method的方法
这是提前写好的DBUtil.java 连接数据库
package com.util;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class DBUtil {
// 1.实例化连接池
public static Vector<Connection> connectionPool = new Vector<Connection>();
// 2.初始化连接池
static {
try {
Class.forName("com.mysql.jdbc.Driver");
for (int i = 0; i < 15; i++) {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/s69", "root", "admin");
connectionPool.add(connection);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3.取连接
public static Connection getConnection() {
Connection connection = connectionPool.get(0);
connectionPool.remove(0);
return connection;
}
// 4.释放连接
public static void releaseConnection(Connection connection) {
connectionPool.add(connection);
}
// 5.增删改
public static int zsg(String sql, Object... p) {
Connection connection = getConnection();
int n = 0;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
n = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return n;
}
// 查询
public static List query(Class c, String sql, Object... p) {
Connection connection = getConnection();
List list = null;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
list = new ArrayList();
while (rs.next()) {
Object object = c.newInstance();
for (int i = 1; i <= count; i++) {
String fieldname = rsmd.getColumnLabel(i);
Field field = c.getDeclaredField(fieldname);
field.setAccessible(true);
field.set(object, rs.getObject(i));
}
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return list;
}
}
增删改就相当于一个executeUpdate(); 写一个zsg函数返回值设为(String sql,Object... p) 根据不同的sql执行不同的数据库操作
// 5.增删改
public static int zsg(String sql, Object... p) {
Connection connection = getConnection();
int n = 0;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
n = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return n;
}
而查询则返回一个List集合
// 查询
public static List query(Class c, String sql, Object... p) {
Connection connection = getConnection();
List list = null;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
list = new ArrayList();
while (rs.next()) {
Object object = c.newInstance();
for (int i = 1; i <= count; i++) {
String fieldname = rsmd.getColumnLabel(i);
Field field = c.getDeclaredField(fieldname);
field.setAccessible(true);
field.set(object, rs.getObject(i));
}
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return list;
}
有流的操作需要关闭流
field.set(object, rs.getObject(i));
写UserServlet的时候会写到dao层的方法所以在UserDAO.java中
package com.dao;
import java.util.List;
import com.pojo.User;
import com.util.DBUtil;
//第三步
public class UserDAO {
//登录
public User login(String username, String password) {
String sql = "select username , password from userinfo where username = ? and password = ? ";
List<User> list = DBUtil.query(User.class, sql, username,password);
if (list.size() > 0) {
return list.get(0);
}
return null;
}
public static int regist(String username, String password) {
String sql="insert into userinfo(username,password)values(?,?)";
int n=DBUtil.zsg(sql, username,password);
return n;
}
}
将userinfo数据库表中的字段写到com.pojo的User.java中
package com.pojo;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
然后就是其他jsp的界面实现了
main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${not empty user }">
欢迎:${user.username }
</c:if>
<c:if test="${empty user}">
<a href="index.jsp">登录</a>|
<a href="regist.jsp">注册</a>
</c:if>
regist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<form action="user.do?method=regist" method="post">
用户名:<input type="text"name="username"/><br>
密码:<input type="password"name="password"/><br>
确认密码:<input type="password"name="repassword"/><br>
验证码:<input type="text" name="code"/><img src="image.do"/><br>
<input type="submit"value="注册"/>
</form>
哈哈哈 心不静 写不下去了 就到这里吧 对于Jsp的学习我还是感觉是后知后觉的 领悟的太慢了 可能还是对于java的基础知识没那么了解 所以一些方法的使用还是不会 不熟。这是个问题。
哦对了 还有这个验证码的ImageServlet.java:
package com.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImageServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String s="abcdefghijklmnopqrstuvwxyz0123456789";
Random random=new Random();
StringBuffer buffer=new StringBuffer();
for (int i = 0; i <4; i++) { //表示验证码从 36个值中取四个
int index=random.nextInt(36);
char ch=s.charAt(index);
buffer.append(ch);
}
String code=buffer.toString();
request.getSession().setAttribute("code",code);
//画验证码图
BufferedImage bufferedImage=new BufferedImage(100,30,BufferedImage.TYPE_INT_RGB);
Graphics graphics=bufferedImage.getGraphics();
graphics.setColor(Color.RED);
graphics.fillRect(0, 0, 100, 30); //填充矩形区域
graphics.setColor(Color.YELLOW); //设置验证码里面文字颜色
graphics.setFont(new Font("罗体",Font.BOLD,30)); //设置图片里面验证码的字体及大小
graphics.drawString(code.charAt(0)+"", 10, 29);
graphics.drawString(code.charAt(1)+"", 30, 26);
graphics.drawString(code.charAt(2)+"", 50, 27);
graphics.drawString(code.charAt(3)+"", 70, 25);
OutputStream outputStream = response.getOutputStream();
ImageIO.write(bufferedImage, "JPEG", outputStream);
outputStream.close();
}
}
想要做一个好项目 就是很多功能都能实现的那种。以前感觉学习编程会很吃力,其实现在学到了现在才感觉到java的深奥。很多东西都是需要自己一点一滴去学习去领悟的!!!
如果你恰好是初学java的小白,请别放弃。请加把劲。OJBK