第一讲

struts基本概念

1.struts是一个框架frame
2.struts是一个web框架
3.struts是一个开源的框架

why struts?

mvc是一种模式
model view control

struts是基于mvc的web框架
mvc只告诉你怎么做,但还是有很大的区别
把数据的输入jsp、数据的处理控制器调用model,再输出到jsp

sun公司提供了基于mvc的web框架,
程序开发更加规范了,
程序开发的效率跟高了
程序的可读性提高了
程序的可维护性提高了

缺点是
form有点鸡肋
action是单态的(对网站的并发性有影响),
单态是指在整个程序的运行过程中始终是一个对象
框架提高了程序的规范,但也约束了程序员的自由。

struts-config.xml未必一定要放在WEB-INF,同时也要更改web.xml中的配置

在一个项目中可以有多个struts-config.xml配置文件

struts的运行原理
,以用户登录验证来讲解。

struts快速入门案例

,以用户登陆验证为例,使用手动配置的方式配置

开发步骤
需要struts开发包,建立一个web工程,引入包…写login.jsp
写ActonForm,必须继承actionForm,写Action,写struts-

config.xml
配置web.xml文件,写ok.jsp,写err.jsp

增加功能,在登陆成功后的页面显示用户名,
使用filter解决中文乱码问题

增加到数据库中验证用户是否合法的功能
在mysql中创建一个用户表
创建domain对象

手动开发struts 登录系统源码


web.xml

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><jsp:include page="/WEB-INF/login.jsp"></jsp:include></body>
</html>

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>
<form-bean name="userForm" type="com.xing.form.UserForm"/>
</form-beans>
<action-mappings>
<!-- scope="request" 相当于 request=request.setAttribute("userForm",userForm) -->
<!-- scope="session" 相当于 session=request.getSession().setAttribute("userForm",userForm) -->
<!-- scope 默认是session -->
<action path="/login" name="userForm" scope="request" type="com.xing.action.LoginAction">
<forward name="ok" path="/WEB-INF/ok.jsp"/>
<forward name="err" path="/WEB-INF/err.jsp"/>
</action>
</action-mappings>
</struts-config>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><jsp:include page="/WEB-INF/login.jsp"></jsp:include></body>
</html>

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'login.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></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"></form></body>
</html>

ok.jsp

<%@ page language="java" import="java.util.*,com.xing.form.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'ok.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h1>WELCOME <%=((UserForm)request.getAttribute("userForm")).getUsername() %></h1><br><a href="/strutslogin/">返回重新登录</a></body>
</html>

err.jsp


<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'err.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>This is my JSP page. <br></body>
</html>

Users.java

package com.xing.domain;public class Users {private int user_id;private String user_pwd;private String user_name;private String user_email;public String getUser_email() {return user_email;}public void setUser_email(String user_email) {this.user_email = user_email;}public int getUser_id() {return user_id;}public void setUser_id(int user_id) {this.user_id = user_id;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}public String getUser_pwd() {return user_pwd;}public void setUser_pwd(String user_pwd) {this.user_pwd = user_pwd;}
}

UserForm.java


/** this is a actionForm used to fill data*/
package com.xing.form;import org.apache.struts.action.ActionForm;public class UserForm extends ActionForm {//定义属性,按照jsp控件名称定义,这是规范,应保证set和get方法和属性名称存在关联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;}
}

SqlHelper.java

/** 对数据库操作的类* 对数据库的操作,就是crud* 调用存储过程* *注意:如果连接数据库时出现如下异常则表示未引入三个JAR驱动包,另外一个原因就是SQL语句有语法错误*java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDviver* */
package com.xing.util;
import java.util.*;
import java.sql.*;
public class SqlHelper {//定义需要的对象Connection ct=null;PreparedStatement ps=null;ResultSet rs=null;String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=testdb";String user="sa";String passwd="tingwei";//构造函数,初始化ctpublic SqlHelper(){try {//加载驱动Class.forName(driver);//得到连接ct=DriverManager.getConnection(url,user,passwd);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}//[]paras,通过?赋值方式可以防止漏洞注入方式,保证安全性public ArrayList query(String sql,String []paras){try {ps=ct.prepareStatement(sql);//对sql的参数赋值for(int i=0;i<paras.length;i++){ps.setString(i+1, paras[i]);}//执行查询rs=ps.executeQuery();} catch (Exception e) {e.printStackTrace();// TODO: handle exception}//返回结果集ArrayList<ResultSet> al=new ArrayList<ResultSet>();al.add(rs);System.out.println(al.size()+" sdsfdsfs ");return al;}//关闭资源的方法public void close(){try {if(rs!=null) rs.close();if(ps!=null) ps.close();if(ct!=null) ct.close();} catch (Exception e) {e.printStackTrace();// TODO: handle exception}}
}

UsersService.java

package com.xing.service;
import com.xing.domain.*;
import com.xing.util.*;
import java.util.ArrayList;
public class UsersService {public boolean checkUser(Users user){String sql="select * from users where username=? and passwd=?";SqlHelper sqlHelper=new SqlHelper();String []paras={user.getUser_name(),user.getUser_pwd()};sqlHelper.query(sql, paras);ArrayList al=sqlHelper.query(sql, paras);if(al.size()==1){return true;}else return false;}
}

LoginAction.java

package com.xing.action;
import com.xing.form.*;
import com.xing.service.*;
import com.xing.domain.*;
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;public class LoginAction extends Action {//重写方法,execute会被自动调用,类似Servlet/service@Overridepublic ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {// TODO Auto-generated method stub//解决中文乱码问题//request.setCharacterEncoding("utf-8");//把form强转为对应的UserForm对象UserForm userForm=(UserForm)form;System.out.println("用户名="+userForm.getUsername()+" 密码="+userForm.getPassword());//把名字存入request对象域//request.setAttribute("username", userForm.getUsername());/*简单验证if("123".equals(userForm.getPassword())){return mapping.findForward("ok");}else{return mapping.findForward("err");}*///使用service来验证,不要在action连接数据库UsersService usersService=new UsersService();Users user=new Users();user.setUser_name(userForm.getUsername());user.setUser_pwd(userForm.getPassword());if(usersService.checkUser(user)){return mapping.findForward("ok");}else{return mapping.findForward("err");}}}

Myfilter1.java

package com.xing.filter;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 stubarg0.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教程笔记1相关推荐

  1. Struts学习笔记--(二)Struts基础

    本文为how2java Struts教程的学习笔记,原教程链接如下:http://how2j.cn/k/struts/struts-jsp/55.html 中文问题 修改addProductjsp 修 ...

  2. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)

    台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...

  3. 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)

    台湾国立大学郭彦甫Matlab教程笔记(21) today: linear equation 线性方程 linear system 线性系统 我们先看第一部分 linear equation 假定一个 ...

  4. 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)

    台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric) symbolic vs. numeric符号法和数值法的区别对比 symbolic 1)advantages ...

  5. 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration

    台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration 数值积分 calculating the numerical value of a definite inte ...

  6. 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation

    台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...

  7. 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分

    台湾国立大学郭彦甫Matlab教程笔记(15) Polynomial integration多项式积分 一个多项式和它的积分如下 MATlAB中如何计算积分? polynomial integrati ...

  8. 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分

    台湾国立大学郭彦甫Matlab教程笔记(14) today: polynomial differentiation and integration多项式微分与积分 numerical differen ...

  9. 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下

    台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...

  10. 台湾国立大学郭彦甫Matlab教程笔记(11) advanced 2D plots 上

    台湾国立大学郭彦甫Matlab教程笔记(11) today: 1.advanced 2D plots 2.color space色彩使用 3.3D plots 图形概览,做研究的时候需要选择图形 sp ...

最新文章

  1. ios11修改微信步数_小程序同步微信步数
  2. Java提升篇:理解String 及 String.intern() 在实际中的应用
  3. 第一章:初识lucene
  4. AppCompatActivity中使用SearchView
  5. 用Html 和 Css来实现一个小小案例
  6. 用DeflateStream和GZipStream压缩数据
  7. 【图像隐写】基于matlab GUI DWT+DCT+PBFO改进图像水印隐藏提取【含Matlab源码 081期】
  8. 快速查找Unity中的死循环
  9. 两张图让你快速读懂JVM字节码指令
  10. php 微信 爬虫 源码,【程序源代码】微信爬虫
  11. 亲测有效 破解 锐捷限制校园网多网卡 win10用校内网在虚拟机里开win7
  12. CG佬的20年:行走于行业的过去与未来
  13. 磨金石教育摄影技能干货分享|那些酷炫的照片是怎么拍出来的?
  14. Octane 2022 预览版来了 -设计师们的福音
  15. Photoshop教程|ps渐变如何使用?如何给图片制作出渐变效果?
  16. 少儿编程scratch与机器人
  17. 二手闲置物品er关系数据图_快来拿!免费赠送二手闲置物品:这是真的吗?
  18. 用51单片机驱动蜂鸣器
  19. dvcs-ripper的安装使用
  20. Snmp学习总结系列

热门文章

  1. 域名注册管理相关的三个机构:ICAAN、interNIC、CNNIC
  2. 那家CTO带头喊麦的直播公司,快要倒闭了
  3. uni-app官方教程学习手记 1
  4. [JAVA]jodd-mail java发送接收电子邮件
  5. 标准I/O缓冲:全缓冲、行缓冲、无缓冲
  6. iOS 6 SDK: 在应用内展示App Store
  7. struts使用拦截器注解
  8. 使用socks5代理实现SSH安全登录
  9. 一个非常经典的erp教程
  10. 易语言-MD5加密16位和32位方法