简易Struts2登录实现
简易Struts2登录实现
1. Struts2简介:
Struts有两个版本。
Struts1是最早的基于MVC模式的轻量级web框架,它能够合理地划分代码结构,并包含验证框架,国际化框架等多种实用工具框架。
随着技术的进步,Struts1的局限性也越多的暴露出来。Struts2是Struts1的下一代产品, 实在Struts1和webwork技术的基础上进行合并后的全新框架。
事实上,Struts1和Struts2在设计思想上是很不相同的。Struts2是以webwork为核心的,采用拦截器的机制来处理用户的请求。
所以,Struts2可以理解为是webwork的更新产品。
2. struts运行流程:
jsp请求à xml.xml(过滤)àstruts .xml(action请求路径)àjava(路径对应的控制器)à
struts.xml(result请求路径)àjsp(反馈请求结果)
3. 整个项目图:
使用到的相关知识:
驱动模型,JDBC,properties,struts标签
4. 源代码:
1. 导入jar包
2. Web.xml核心过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"version="2.5">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- struts核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3. 数据库->user表
create table user(
id int primary key auto_increment,
username varchar(20) unique,
password varchar(18)
);
insert intouser(username,password) values('ww','123');
select * from user where username='ww' and password='123';
4.entity->User.java:
package entity;
public class User{
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "User [id=" + id+ ", username=" + username + ", password="
+ password +"]";
}
}
5.utils->JDBCUtils
package utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtils {
private staticProperties prop;
static {
prop =new Properties();
/*InputStream in3=new FileInputStream(new File("./src/db.properties"));*/
try {
prop.load(JDBCUtils.class.getClassLoader().getResourceAsStream(
"db.properties"));
Class.forName(prop.getProperty("driver"));
}catch (Exception e) {
thrownew RuntimeException(e);
}
}
public staticConnection getConnection() {
try{
returnDriverManager.getConnection(prop.getProperty("url"),
prop.getProperty("username"),prop.getProperty("password"));
}catch (SQLException e) {
thrownew RuntimeException(e);
}
}
public staticvoid close(Connection conn,PreparedStatement prep,ResultSet rs){
if(rs !=null){
try{
rs.close();
}catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
if(prep!= null){
try{
prep.close();
}catch (SQLException e) {
e.printStackTrace();
}finally{
prep = null;
}
}
if(conn!= null){
try{
conn.close();
}catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
}
6.config->db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
username=root
password=root
7.dao->UserDao.java
package dao;
import entity.User;
public interface UserDao {
public User getUser(String username,String password);//查找这个用户
}
8.dao.Impl->UserDaoImpl.java
package dao.impl;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importutils.JDBCUtils;
importdao.UserDao;
importentity.User;
public classUserDaoImpl implements UserDao{
private Connection conn;
private PreparedStatement prep;
private ResultSet rs;
public User getUser(String username,Stringpassword) {
try {
String sql="select * fromuser where username=? and password=?";
conn=JDBCUtils.getConnection();
prep=conn.prepareStatement(sql);
prep.setString(1, username);
prep.setString(2, password);
rs=prep.executeQuery();
if (rs.next()) {
User user=new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
}else {
return null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}finally{
JDBCUtils.close(conn, prep,rs);
}
}
}
9.service->UserService.java
package service;
import entity.User;
public interfaceUserService {
public User getUser(String username,String password);//查找这个用户
}
10.service.impl->UserServiceImpl.java
package service.impl;
importdao.UserDao;
import dao.impl.UserDaoImpl;
importservice.UserService;
importentity.User;
public classUserServiceImpl implements UserService{
private UserDao userDao=new UserDaoImpl();
public User getUser(String username,String password) {
return userDao.getUser(username,password);
}
}
11.action->LoginAction.java
package action;
importservice.UserService;
importservice.impl.UserServiceImpl;
importcom.opensymphony.xwork2.ActionSupport;
importcom.opensymphony.xwork2.ModelDriven;
importentity.User;
public classLoginAction extends ActionSupport implements ModelDriven<User>{
private static final longserialVersionUID = 1L;
private UserService userService=newUserServiceImpl();
private User user=new User();
@Override
public String execute() throws Exception{
System.out.println(user.getUsername());
System.out.println(user.getPassword());
UseruserInfo=userService.getUser(user.getUsername(),user.getPassword());
System.out.println(userInfo);
if (userInfo!=null) {
return SUCCESS;
}else {
return ERROR;
}
}
public User getModel() {
return user;
}
}
12.config->user.xml
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPEstruts PUBLIC
"-//Apache Software Foundation//DTDStruts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="user"namespace="/" extends="struts-default">
<global-results>
<resultname="error">/error.jsp</result>
</global-results>
<action name="login"class="action.LoginAction">
<resultname="success">/success.jsp</result>
</action>
</package>
</struts>
13.src->struts.xml
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPEstruts PUBLIC
"-//Apache Software Foundation//DTDStruts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constantname="struts.i18n.encoding"value="UTF-8"></constant>
<constant name="struts.devMode"value="true"></constant>
<includefile="user.xml"></include>
</struts>
14.webRoot->login.jsp
<%@ pagelanguage="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@ tagliburi="/struts-tags" prefix="s" %>
<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<s:formaction="login.action">
<s:label>用户登录</s:label>
<s:textfield name="username"label="用户名"></s:textfield>
<s:textfield name="password"label="密码"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>
</body>
</html>
15.webRoot->success.jsp
<%@ pagelanguage="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@ tagliburi="/struts-tags" prefix="s" %>
<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录成功</title>
</head>
<body>
用户信息:
用户名: <s:propertyvalue="username"/><br>
密码:<s:propertyvalue="password"/>
</body>
</html>
16.webRoot->error.jsp
<%@ pagelanguage="java" import="java.util.*"pageEncoding="UTF-8"%>
<%@tagliburi="/struts-tags" prefix="s" %>
<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>错误信息</title>
</head>
<body>
用户名或密码不正确
</body>
</html>
5. 运行结果:
登录页面:
成功页面:
错误页面:
此时,一个比较综合的Struts框架的登录页面就算完成了。可以根据自身需求不断扩展功能。
本内容由安康学院“雨季”原创!