struts的快速入门案例(用户登录验证)——手动配置方式
2013-06-05 12:43
816 查看
工程结构:
步骤:
1. 先创建一个web工程
2. 把struts的开发包引入到web工程
3. 编写login.jsp
4. 编写ActionForm(用户表单)和Action(小队长→登录小队长)
5. 编写struts-config.xml文件,该文件用于配置Action和ActionForm,对应关系,跳转位置….,一般我们放在/WEB-INF目录下
6. 编写wel.jsp和err.jsp
7. 配置web.xml文件,该文件用于配置ActionServlet
8. 测试
代码如下:
login.jsp:
index.jsp:
mysql.properties:
SqlHelper.java:
Users.java:
UsersService.java:
UserForm.java:
LoginAction.java:
struts-config.xml:
wel.jsp:
err.jsp:
web.xml:
MyFilter1:
以上是手工配置方式实现的struts案例,至于半手工方式和全自动方式在上一节“struts快速入门——笔记”中已经截图解说,提高了开发效率,代码部分则和手工方式一样。
步骤:
1. 先创建一个web工程
2. 把struts的开发包引入到web工程
3. 编写login.jsp
4. 编写ActionForm(用户表单)和Action(小队长→登录小队长)
5. 编写struts-config.xml文件,该文件用于配置Action和ActionForm,对应关系,跳转位置….,一般我们放在/WEB-INF目录下
6. 编写wel.jsp和err.jsp
7. 配置web.xml文件,该文件用于配置ActionServlet
8. 测试
代码如下:
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'login.jsp' starting page</title> </head> <body> <form action="/strutslogin/login.do" method="post"> u:<input type="text" name="username"/><br/> p:<input type="password" name="password"/><br/> <input type="submit" value="login"/><br/> </form> </body> </html>
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <jsp:forward page="/WEB-INF/login.jsp"/> </body> </html>
mysql.properties:
dbUserName=root dbPassword=root dbDriver=com.mysql.jdbc.Driver dbUrl=jdbc\:mysql\://127.0.0.1\:3306/test?useUnicode\=true&characterEncoding\=utf8
SqlHelper.java:
package com.hsp.utils; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import java.sql.*; public class SqlHelper { //定义变量 private static Connection ct = null; //大多数情况下用preparedstatement替代statement private static PreparedStatement ps = null; private static ResultSet rs = null; //连接数据库的参数 private static String url = ""; private static String username = ""; private static String driver = ""; private static String passwd = ""; private static CallableStatement cs = null; public static CallableStatement getCs() { return cs; } private static Properties pp = null; private static InputStream fis = null; //加载驱动,只需要一次,用静态代码块 static { try { //从dbinfo.properties pp = new Properties(); fis=SqlHelper.class.getClassLoader().getResourceAsStream("mysql.properties"); //fis = new FileInputStream(); pp.load(fis); url = pp.getProperty("dbUrl"); driver = pp.getProperty("dbDriver"); username = pp.getProperty("dbUserName"); passwd = pp.getProperty("dbPassword"); Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } finally { try { fis.close();} catch(IOException e) {e.printStackTrace();} fis = null;//垃圾回收站上收拾 } } //得到连接 public static Connection getConnection() { try {ct = DriverManager.getConnection(url,username,passwd);} catch(Exception e) {e.printStackTrace();} return ct; } //*************callPro1存储过程函数1************* public static CallableStatement callPro1(String sql,String[] parameters) { try{ ct = getConnection(); cs = ct.prepareCall(sql); if(parameters!=null){ for(int i=0;i<parameters.length;i++){ cs.setObject(i+1,parameters[i]); } } cs.execute(); } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage());} finally { close(rs,cs,ct);} return cs; } //*******************callpro2存储过程2************************ public static CallableStatement callPro2(String sql,String[] inparameters, Integer[] outparameters) { try { ct = getConnection(); cs = ct.prepareCall(sql); if(inparameters!=null) { for(int i=0;i<inparameters.length;i++) { cs.setObject(i+1,inparameters[i]); } } //cs.registerOutparameter(2,oracle.jdbc.OracleTypes.CURSOR); if(outparameters!=null) { for(int i=0;i<outparameters.length;i++) { cs.registerOutParameter(inparameters.length+1+i,outparameters[i]); } } cs.execute(); } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally { } return cs; } public static ResultSet executeQuery(String sql,String[] parameters) { try { ct=getConnection(); ps=ct.prepareStatement(sql); if(parameters!=null) { for(int i=0;i<parameters.length;i++) { ps.setString(i+1,parameters[i]); } } rs = ps.executeQuery(); } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally { } return rs; } public static Connection getCt() { return ct; } public static PreparedStatement getPs() { return ps; } public static ResultSet getRs() { return rs; } public static void executeUpdate2(String[] sql,String[][] parameters) { try { ct = getConnection(); ct.setAutoCommit(false); for(int i=0;i<sql.length;i++) { if(null!=parameters[i]) { ps = ct.prepareStatement(sql[i]); for(int j=0;j<parameters[i].length;j++) { ps.setString(j+1,parameters[i][j]); } ps.executeUpdate(); } } ct.commit(); }catch (Exception e) { e.printStackTrace(); try { ct.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } throw new RuntimeException(e.getMessage()); }finally { close(rs,ps,ct); } } //先写一个update、delete、insert //sql格式:update 表名 set 字段名 =?where 字段=? //parameter神应该是(”abc“,23) public static void executeUpdate(String sql,String[] parameters) { try { ct=getConnection(); ps = ct.prepareStatement(sql); if(parameters!=null) { for(int i=0;i<parameters.length;i++) { ps.setString(i+1,parameters[i]); } } ps.executeUpdate(); } catch(Exception e) { e.printStackTrace();//开发阶段 //抛出异常 //可以处理,也可以不处理 throw new RuntimeException(e.getMessage()); } finally { close(rs,ps,ct); } } public static void close(ResultSet rs,Statement ps,Connection ct) { //关闭资源(先开后关) if(rs!=null) { try { rs.close(); } catch(SQLException e) { e.printStackTrace(); } rs=null; } if(ps!=null) { try { ps.close(); } catch(SQLException e) { e.printStackTrace(); } ps=null; } if(null!=ct) { try { ct.close(); } catch(SQLException e) { e.printStackTrace(); } ct=null; } } }
Users.java:
package com.hsp.domain; public class Users { private int user_id; private String user_pwd; private String user_name; private String user_email; public int getUser_id() { return user_id; } public void setUser_id(int user_id) { this.user_id = user_id; } public String getUser_pwd() { return user_pwd; } public void setUser_pwd(String user_pwd) { this.user_pwd = user_pwd; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } public String getUser_email() { return user_email; } public void setUser_email(String user_email) { this.user_email = user_email; } }
UsersService.java:
package com.hsp.service; import java.sql.ResultSet; import java.sql.SQLException; import com.hsp.domain.Users; import com.hsp.utils.SqlHelper; public class UsersService { public boolean checkUser(Users user){ String sql="select * from users where user_name=? and user_pwd=?"; String parameters[]={user.getUser_name(),user.getUser_pwd()}; SqlHelper sqlHelper=new SqlHelper(); ResultSet rs=sqlHelper.executeQuery(sql, parameters); try { if(rs.next()){ return true; } else{ return false; } } catch (SQLException e) { e.printStackTrace(); return false; } } }
UserForm.java:
package com.hsp.forms; //这是一个用户表单,用于填充数据 import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm { //定义属性[这里有一个规范,就是我们定义属性名字的时候,应该和jsp页面的控件名称一致 //如果有人提出疑问:表单的属性名字是否必须和控件名一致? //答:否,只要保证set和get方法和属性名存在关联:set属性名,如jsp控件名username,则set方法名必须为setUsername] 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; } }
LoginAction.java:
package com.hsp.actions; //这是一个action(表示小队长,需要继承Action) import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.hsp.domain.Users; import com.hsp.forms.UserForm; import com.hsp.service.UsersService; public class LoginAction extends Action { //我们需要重新编写一个方法:execute会被自动调用,有些类似servlet里的service方法和doGet和doPost方法 @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //把form转成对应的UserForm对象 UserForm userForm=(UserForm)form; //System.out.println("用户名="+userForm.getUsername()); //简单验证 // if("123".equals(userForm.getPassword())){ // //把名字存放到request对象域中 // //request.setAttribute("username", userForm.getUsername()); // //如果密码为123,就认为是合法用户 // return mapping.findForward("ok");//request.getRequestDispatcher.forward(); // }else{ // return mapping.findForward("err"); // } //使用service(士兵到数据库去验证) //创建一个Service UsersService userService=new UsersService(); Users user=new Users(); user.setUser_name(userForm.getUsername()); user.setUser_pwd(userForm.getPassword()); if(userService.checkUser(user)){ return mapping.findForward("ok"); }else{ return mapping.findForward("err"); } } }
struts-config.xml:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <!-- 配置表单 --> <form-beans> <!-- name是表单名字,可以随意写,但是建议取名规范:表单类名首字母小写 --> <!-- type用于指定表单类的全路径 --> <form-bean name="userForm" type="com.hsp.forms.UserForm"/> </form-beans> <!-- 配置action --> <action-mappings> <!-- 配置具体的一个action,path:表示将来访问该action的资源名称,http://localhost:8080/web/path? --> <!-- name:用于关联某个表单 --> <!-- type:用于指定该action类的全路径 --> <!-- scope="request"表示该action对应的表单对象的生命周期是request,相当于总控制器执行request.setAttribute("userForm",userForm); --> <!-- scope="session"表示该action对应的表单对象的生命周期是session,相当于总控制器执行request.getSession.setAttribute("userForm",userForm); --> <!-- scope=""默认是session --> <action path="/login" name="userForm" scope="request" type="com.hsp.actions.LoginAction"> <!-- 配置跳转关系 --> <!-- name表示结果名称,path:转发到哪个页面 --> <forward name="ok" path="/WEB-INF/wel.jsp"/> <forward name="err" path="/WEB-INF/err.jsp"/> </action> </action-mappings> </struts-config>
wel.jsp:
<%@ page language="java" import="java.util.*,com.hsp.forms.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'wel.jsp' starting page</title> </head> <body> wel <%=((UserForm)request.getAttribute("userForm")).getUsername() %><br/> <a href="/strutslogin/">返回重新登录</a> </body> </html>
err.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'err.jsp' starting page</title> </head> <body> err<br> </body> </html>
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 配置ActionServlet --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <!-- 配置struts-config,如果有多份配置文件,则用,分隔 --> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 配置filter --> <filter> <filter-name>MyFilter1</filter-name> <filter-class>com.hsp.filters.MyFilter1</filter-class> </filter> <filter-mapping> <filter-name>MyFilter1</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置首页文件 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
MyFilter1:
package com.hsp.filters; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyFilter1 extends HttpServlet implements Filter { public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub arg0.setCharacterEncoding("utf-8");//设置接收编码 arg2.doFilter(arg0, arg1);//必须有这句话 arg1.setContentType("text/html;charset=utf-8"); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
以上是手工配置方式实现的struts案例,至于半手工方式和全自动方式在上一节“struts快速入门——笔记”中已经截图解说,提高了开发效率,代码部分则和手工方式一样。
相关文章推荐
- struts的快速入门案例(用户登录验证)——手动配置方式
- AR系列路由器使用SSH用户验证方式为password登录路由器的典型配置
- Activemq配置——Jaas方式配置用户登录验证
- 【JSF】快速入门案例(用户登录界面)
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
- Activemq配置——Jaas方式配置用户登录验证
- Activemq配置——Jaas方式配置用户登录验证
- SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法
- 配置SQL Server 2005 Express的身份验证方式,以及如何启用sa登录名(转)
- ASP.NET Core 实现用户登录验证的最低配置
- Spring入门案例 注解方式配置(一)
- SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法
- struts入门实例--用户登录
- ASP.NET2.0快速入门--存储用户配置文件
- struts入门案例 登录
- 交换机配置ssh密码验证登录方式
- SpringMVC入门案例——注解配置方式
- 配置SQL Server 2005 Express的身份验证方式,以及如何启用sa登录名
- Asp.net2.0身份验证技术学习入门---新用户注册,登录,显示用户信息