共享医院用户管理系统

下载链接https://download.csdn.net/download/mmzian/12058806

项目涵盖知识点

  1. Struts2框架运行原理

  首先,判断请求是否需要Struts2管理,然后获得核心配置文件信息,请求相关的action信息交给拦截器组,之后经过拦截器过滤获得string类型的结果,根据string类型的返回结果与核心配置文件中的相匹配,最后,经过拦截器将最终结果返回给客户。

     2. Action访问Servlet API

struts2中,虽然 Action 已经与Servlet API完全分离,但在实现业务逻辑时,还是经常要访问servlet API 中的对象。通常开发时需要访问Servlet API中的 HttpServletRequest、HttpSession 和 ServletContext 三个接口,它们分别对应JSP内置对象 request、session 和 application。在 Struts2 中,访问 Servlet API 通常采用两种方式,分别是通过 ActionContext 访问和通过 ServletActionContext 访问,本节将针对这两种访问方式进行讲解。一种是通过actioncontext访问:ActionContext 是 Action 执行的上下文对象,在 ActionContext 中保存了 Action 执行所需要的所有对象,包括 request、session 和 application 等。另一种是通过servletactioncontext访问,该类中的方法都是静态方法。

     3.时间戳:获取系统当前时间

我们在jsp页面获取当前时间的函数,用的是.date函数(并将服务器的时间格式化)。代码 :

 function disptime()
         {
            var today=new Date();
        	var year = today.getFullYear();
            var month=today.getMonth()+1;
            var day=today.getDate();
            var hh=today.getHours();
            var mm=today.getMinutes();
            var ss=today.getSeconds();
            if(month<10)
            {
            	month="0"+month;
            }
            if(day<10)
            {
            	day="0"+day;
            }
            if(mm<10)
            {
            	mm="0"+mm;
            }
            if(ss<10)
            {
            	ss="0"+ss;
            }
            if(ss%2==0){
        document.getElementById("myclock").innerHTML="<font color='green'>"+year+"-"+month+"-"+day+
        "    "+hh+":"+mm+":"+ss+"</font>";
        }else
        {
        	document.getElementById("myclock").innerHTML="<font color='red'>"+year+"-"+month+"-"+day+
            "    "+hh+":"+mm+":"+ss+"</font>";
        }
        
         }
       var mytime=setInterval("disptime()",1000);

 

 

      4.批量删除:全选和反选

通过JS技术的selectall()和selectother()来实现全选和反选,代码如图2-2:

 

<!--全选或全不选-->
 function selectAll(){
	 var items = document.getElementsByName("checkItem");
	 var checkAll = document.getElementById("checkAll");
	 var checkOther = document.getElementById("checkOther");
	 checkOther.checked = false;
	 for(var i=0;i<items.length;i++){
		 items[i].checked = checkAll.checked;
	 }
 }
 <!--反选-->
 function selectOther(){
	 var items = document.getElementsByName("checkItem");
	 var checkAll = document.getElementById("checkAll");
	 var checkOther = document.getElementById("checkOther");
	 checkAll.checked = false;
	 for(var i=0;i<items.length;i++){
		 items[i].checked = !items[i].checked;
	 }
 }

5.不同用户登录进行判断

	public boolean login(User user) {
		// TODO Auto-generated method stub
		boolean flag=false;
		con=BaseDao.getConnection();
		try {
			ps=con.prepareStatement("select * from t_users where username=? and password=?");
		
			ps.setString(1, user.getUsername());//设置第一个变量
			ps.setString(2,user.getPassword());//设置第二个变量
			rs=ps.executeQuery();
			if(rs.next())
			{
				  user.setId(rs.getInt(1));
				  user.setUsername(rs.getString(2));
			      user.setPassword(rs.getString(3));
			      user.setName(rs.getString(4));
			      user.setNic(rs.getString(5));
			      user.setSex(rs.getString(6));
			      user.setAge(rs.getInt(7));
			      user.setEmail(rs.getString(8));
			      user.setPhone(rs.getString(9));
			      user.setSelfshow(rs.getString(10));
			      user.setRoleId(rs.getInt(11));//给user对象赋值
				flag=true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			BaseDao.cloasAll(rs, ps, con);//关闭数据库的连接
		}
		 return flag;
	}

6.文件上传

上传界面

<s:form action="upload"
	enctype="multipart/form-data">

	<s:textfield name="title" label="身份证正面证件号"/>
	<s:file name="upload" label="选    择    正    面    文    件"/><br/><br>
		<s:textfield name="title1" label="身份证反面有效期"/>
	<s:file name="upload" label="选    择    反    面    文    件"/>

	<s:submit value="上传"/>
</s:form>

上传成功界面

 添加成功!<br/>
	证件号码:<s:property value=" + title"/><br/>
	正面为:<img src="<s:property value="'uploadFiles/' 
		+ uploadFileName"/>"/><br/>
	有效日期:<s:property value=" + title1"/><br/>
	正面为:<img src="<s:property value="'uploadFiles/' 
		+ uploadFileName"/>"/><br/>

 上传文件执行的后台bean

public class UploadAction extends ActionSupport
{
	// 封装文件标题请求参数的属性
	private String title;
	// 封装文件标题请求参数的属性
		private Date date;
	// 封装上传文件域的属性
	private File upload;
	// 封装上传文件类型的属性
	private String uploadContentType;
	// 封装上传文件名的属性
	private String uploadFileName;
	// 直接在struts.xml文件中配置的属性
	private String savePath;
	// 接受struts.xml文件配置值的方法
	public void setSavePath(String value)
	{
		this.savePath = value;
	}
	// 获取上传文件的保存位置
	private String getSavePath() throws Exception
	{
		return ServletActionContext.getServletContext()
			.getRealPath(savePath);
	}

	// title的setter和getter方法
	public void setTitle(String title)
	{
		this.title = title;
	}
	public String getTitle()
	{
		return (this.title);
	}
	// title1的setter和getter方法
		public void setDate(Date date)
		{
			this.date = date;
		}
		public Date getDate()
		{
			return (this.date);
		}
	// upload的setter和getter方法
	public void setUpload(File upload)
	{
		this.upload = upload;
	}
	public File getUpload()
	{
		return (this.upload);
	}

	// uploadContentType的setter和getter方法
	public void setUploadContentType(String uploadContentType)
	{
		this.uploadContentType = uploadContentType;
	}
	public String getUploadContentType()
	{
		return (this.uploadContentType);
	}

	// uploadFileName的setter和getter方法
	public void setUploadFileName(String uploadFileName)
	{
		this.uploadFileName = uploadFileName;
	}
	public String getUploadFileName()
	{
		return (this.uploadFileName);
	}

	@Override
	public String execute() throws Exception
	{
		// 以服务器的文件保存地址和原文件名建立上传文件输出流
		FileOutputStream fos = new FileOutputStream(getSavePath()
			+ "\\" + getUploadFileName());
		FileInputStream fis = new FileInputStream(getUpload());
		byte[] buffer = new byte[1024];
		int len = 0;
		while ((len = fis.read(buffer)) > 0)
		{
			fos.write(buffer , 0 , len);
		}
		fos.close();
		return SUCCESS;
	}
}

7.添加用户验证

<!-- 校验用户名 -->
     <field name="admin.username">
         <field-validator type="requiredstring">
           <param name="trim">true</param>
           <message>用户名不能为空</message>          
         </field-validator>        
         <field-validator type="regex">       
          <param name="expression"><![CDATA[(\w{6,25})]]></param>
          <message>用户名长度必须在6到25之间,且必须是字母和数字</message>
         </field-validator>   
     </field>
 <!-- 校验用户密码 -->    
     <field name="admin.password">
         <field-validator type="requiredstring">
           <param name="trim">true</param>
           <message>密码不能为空</message>          
         </field-validator>       
         <field-validator type="regex">        
          <param name="expression"><![CDATA[(\w{6,25})]]></param>
          <message>用户密码长度必须在6到25之间,且必须是字母和数字</message>
         </field-validator>     
     </field>
     
<!-- 校验用户昵称 --> 
     <field name="admin.nic">
        <field-validator type="requiredstring">
           <param name="trim">true</param>
           <message>用户昵称不能为空</message>
        </field-validator>
        
     </field>   
     <!-- 校验用户真实姓名 -->
     <field name="admin.name">
        <field-validator type="requiredstring">
           <param name="trim">true</param>
           <message>真实姓名不能为空</message>
        </field-validator>   
     </field>     
 <!-- 校验年龄 -->
        <field name="admin.age">
           <field-validator type="int">
             <param name="min">1</param>
             <param name="max">100</param>
            <message>请输入合法的年龄 范围:1-100</message>
           </field-validator>
        </field>
        
   <!-- 校验email -->
   <field name="admin.email">
      <field-validator type="email">
         <message>请填写正确的email格式</message>
      </field-validator>
   </field>     
      

整体页面展示 

 

  • 运用标签列表

1、控制标签

1.1 If/elseif/else标签

If/elseif/else标签用来控制选择输出。必须指定test属性,是一个Boolean类型值,决定是否显示if标签内容。

1.2 iterator标签

iterator标签 (迭代)用于遍历集合(java.util.collection)List,Map,数组或枚举值(java.util.iterator)。    

1.3 generator标签

generator标签用来将指定的字符串按规定的分隔符分解为多个字符串,生成的多个字符串可以使用iterator标签输出。separator和val为必填值,都为string类型值。Separator用来指定分解字符串的分隔符,val用来指定被分解的字符串。

2、数据标签

2.1 property标签

property标签可以与<s:bean>标签结合使用,一个是给bean赋值,一个是从bean中读取值。

2.2 URL标签

URL标签用于生成一个URL地址,可以通过param向url标签指定参数,从而指定URL发送请求参数。

2.3 param标签

param标签用于传递参数,比如给<s:bean>标签传递参数。它有两个属性:Name和value。

2.4 debug标签

debug标签主要用于辅助测试,它在页面上生成一个超链接,通过该链接可以查看Value Stack和Stack Context 中的所有值信息。使用debug标签只有一个id属性,这个属性仅仅是该元素一个引用id。在页面上增加<s:debug/>标签,通过debug标签,可以看的系统中Value Stack离得全部信息,并可以看到Stack Context中的属性。

3、表单标签

3.1 Textfield标签

Textfield标签输出一个HTML单行文本输入控件。

3.2 Radio标签

radio标签输出一个HTML单选按钮。

3.3 checkboxlist标签

checkboxlist标签使用一个列表创建一系列复选框,属性设置与<s:select/>和<s:radio/>类相似,只是创建的是HTML复选框。不同的是,checkboxlist标签多选标签。

3.4 Select标签

select标签输出一个HTML列表框。

3.5 Optiontransferselect标签

Optiontransferselect标签会生成连个列表选择框,并生成系列的按钮用于控制各选项在两个列表框之间的移动升级。

3.6 textarea标签

textarea标签输出一个HTML多行文本输入控件。

3.7 其他表单标签

(1)、form标签

(2)、fielderror标签

(3)、submit标签:submit标签输出一个提交按钮,submit标签和form标签一起使用可以提供异步表单提交功能。

(4)、file标签:file标签输出一个HTML文件选择框。

(5)、password标签:password标签输出一个HTML口令输入控件。

 


更多具体代码下载:https://download.csdn.net/download/mmzian/12058806

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值