刚开始接触JSP,打算写写博客记录记录,大佬可以不用看了…
1、JSP
在编写登录界面之前需要安装服务器(这里使用的是Tomcat)并且安装IDE以及进行相关的部署。这里就不进行赘述了。
(1)JSP的基本语法
①JSP注释语法:
<%-- 注释内容 -->
②Java注释语法:
//注释内容
/* 多行注释*/
(2)JSP声明
在JSP程序段中,变量必须要先定义,后使用。
<%!
String str = "XXX";
%>
(3)JSP动作
JSP动作是指使用XML语法格式的标记来控制服务器的行为。
<jsp:动作名 属性1 = "属性值1".../>
或者
<jsp:动作名 属性1 = "属性值1"...>相关内容</jsp:动作名>
JSP动作包括:
(1) jsp:include ---------- 当页面被请求的时候引入一个文件
(2)jsp:forward ---------- 将请求转到另外一个页面
(3)jsp:useBean --------- 获得JavaBean的一个实例
(4)jsp:setProperty ----- 设置JavaBean的属性
(5)jsp:getProperty ----- 获得JavaBean
(6)jsp:plugin ----------- 根据浏览器类型,为Java插件生成OBJECT或EMBED两种标记。
(4)JSP内置对象
jsp的九大内置对象,pageContext,request,response,session,application,config,out,page,exception;前五个熟练掌握
jsp四种数据保存范围
page:只在一个页面中保存数据
request:只在一个请求中保存数据
session:在一次会话范围内保存数据,仅供单个用户使用
application:在整个服务器上保存数据,所有用户共享
response对象:
response内置对象用于响应客户请求,向客户端输出信息
功能1自动刷新应用
功能2页面重定向应用,客户端跳转
功能3操作cookie应用
功能4cookie信息是存在客户端的,session信息是存在服务器的。
2、代码展示
1、创建相关的数据库以及表数据,我使用的是Orcale,图形化界面用的是PLSQL(其实表登录只需要MEMBER表即可,其余表是其他用途)。
2、第二开始开发,采用mvc的设计模式,分开进行设计;
首先package com.shopping.model;对User类进行封装数据。为了后面方便使用;注意是在不同的包中的。
package com.shopping.model;
public class User {
private String memberNo;
private String memberPassword;
private String nameId;
private String memberName;
private String sex;
private String birthday;
private String pwd;
private String phone;
private String type;
private String address;
private String regDate;
private String email;
private String id;
private String grade;
public User() {
super();
}
public User(String username, String password) {
super();
nameId = username;
memberPassword = password;
}
public String getMemberPassword() {
return memberPassword;
}
public void setMemberPassword(String memberPassword) {
this.memberPassword = memberPassword;
}
public String getNameId() {
return nameId;
}
public void setNameId(String nameId) {
this.nameId = nameId;
}
}
其次对连接数据库进行封装,方便后面调用连接数据库,这里封装好数据库并进行测试是否连接成功,并且需要导入odbc.jar文件;注意是在不同的包中的。
package com.shopping.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DbUtil {
private String url="jdbc:oracle:thin:@IP地址:IP端口号:数据库名";
private String user = "账号";
private String password = "密码";
private String driver = "oracle.jdbc.OracleDriver";
public Connection getCon() throws Exception{
Class.forName(driver);
Connection con = DriverManager.getConnection(url, user, password);
return con;
}
public static void getClose(Connection con)throws SQLException{
if(con!=null) {
con.close();
}
}
public static void main(String[] args) {
DbUtil db = new DbUtil();
try {
db.getCon();
System.out.println("测试连接数据库,连接成功");
}catch (Exception e) {
e.printStackTrace();
System.out.println("测试连接数据库,连接失败");
}
}
}
对数据封装好,对连接数据库封装好,接下来封装对数据库的操作;注意是在不同的包中的。
package com.shopping.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.shopping.model.User;
public class UserDao {
public User login(Connection con,User user)throws SQLException{
User resultUser = null;
String sql = "select * from Member where nameId=? and memberPassword=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, user.getNameId());
ps.setString(2, user.getMemberPassword());
ResultSet rs = ps.executeQuery();
if(rs.next()) {
resultUser = new User();
resultUser.setNameId(rs.getString("nameId"));
resultUser.setMemberPassword(rs.getString("memberPassword"));
}
return resultUser;
}
}
封装好上面的接下来就进行主要代码的开发,使用Servlet对数据进行处理和操作;注意在不同的包中。
package com.shopping.web;
import java.io.IOException;
import java.sql.Connection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.shopping.dao.UserDao;
import com.shopping.model.User;
import com.shopping.util.DbUtil;
public class LoginServlet extends HttpServlet{
DbUtil db=new DbUtil();
UserDao userDao=new UserDao();
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
Connection con=null;
try {
User user=new User(username,password);
con=db.getCon();
User currentUser=userDao.login(con, user);
if(currentUser==null){
//System.out.println("no");
request.setAttribute("error", "用户名或者密码错误");
request.setAttribute("username", username);
request.setAttribute("password", password);
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{
//System.out.println("yes");
HttpSession session=request.getSession();
session.setAttribute("currentUser",currentUser);
response.sendRedirect("main.jsp");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
设置好Servlet的类文件后需要配置xml,代码如下。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>The Shopping</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.shopping.web.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
最后进行主页面的开发,创建jsp页面。需要注意的是action的值是xml的<url-pattern>/login</url-pattern>中/login的值,这点需要注意。
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>网络在线商城登陆界面</title>
</head>
<body>
<form action="login" method="post">
<table>
<tr>
<th colspan="2">网络在线商城登陆界面</th>
</tr>
<tr>
<td>账号</td>
<td><input type="text" id="username" name="username" value="${username}"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" id="password" name="password" value="${password}"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><font color="red">${error}</font></td>
</tr>
</table>
</form>
</body>
</html>
最后一个为了优化,更好的可视化,一个登录成功的验证页面,如下:
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Insert title here</title>
</head>
<body>
<p>登录成功</p>
当前用户:${currentUser.nameId}<br/>
当前密码:${currentUser.memberPassword}<br/>
</body>
</html>
工程截图: