- 浏览: 105775 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u011227256:
...
Spring Framework 3.0.5+Spring Security 3.0.5+ mybatis 3.0.5+ Struts 2.2.3整合代码 -
请教我送温暖:
非常感谢,解决了一个大问题
java 下载图片代码 -
rochou:
为什么login.jsp里面的form表单没有submit动作 ...
Spring Framework 3.0.5+Spring Security 3.0.5+ mybatis 3.0.5+ Struts 2.2.3整合代码 -
testspringmail:
http://czpae86.iteye.com/blog/1 ...
extjs 4.0 做的 Excel 小功能 -
junjun16818:
<div class="quote_title ...
Spring Framework 3.0.5+Spring Security 3.0.5+ mybatis 3.0.5+ Struts 2.2.3整合代码
Spring Framework 3.0.5+Spring Security 3.0.5+ mybatis 3.0.5+ Struts 2.2.3整合代码
- 博客分类:
- java
简单的权限控制,密码使用sha加密
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"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <!-- default: /WEB-INF/applicationContext.xml --> </listener> <!-- --> <!-- spring security --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:applicationContext*.xml </param-value> </context-param> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- <filter> <filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSessionInView</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> <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>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" /> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 配置事务管理器,注意这里的dataSource和SqlSessionFactoryBean的dataSource要一致,不然事务就没有作用了 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- myBatis文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis.xml" /> <property name="mapperLocations" value="classpath*:com/glen/model/*.xml" /> <property name="dataSource" ref="dataSource" /> </bean> <!-- <bean id="accountDao" class="com.glen.dao.AccountDao"> <property name="sessionFactory" ref="sqlSessionFactory" /> </bean> <bean id="accountService" class="com.glen.service.AccountService"> <property name="accountDao" ref="accountDao" /> </bean> --> <context:annotation-config /> <context:component-scan base-package="com.glen" /> </beans>
applicationContext-security.xml
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> <!-- auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session). access-denied-page:出错后跳转到的错误页面; --> <http auto-config="true" access-denied-page="/common/403.jsp"> <!-- intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略 --> <intercept-url pattern="/index.jsp" access="ROLE_USER,ROLE_ADMIN" /> <intercept-url pattern="/login.jsp" filters="none" /> <intercept-url pattern="/common/**" filters="none" /> <intercept-url pattern="/script/**" filters="none" /> <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" /> <intercept-url pattern="/user.jsp" access="ROLE_USER" /> <!-- session-management是针对session的管理. 这里可以不配置. 如有需求可以配置. --> <!-- id登陆唯一. 后登陆的账号会挤掉第一次登陆的账号 error-if-maximum-exceeded="true" 禁止2次登陆; session-fixation-protection="none" 防止伪造sessionid攻击. 用户登录成功后会销毁用户当前的session. 创建新的session,并把用户信息复制到新session中. --> <session-management session-fixation-protection="none"> <concurrency-control /> </session-management> <!-- login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面. default-target-url:成功登陆后跳转页面 --> <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp" default-target-url="/index.jsp" /> <!-- logout-success-url:成功注销后跳转到的页面; --> <logout logout-success-url="/login.jsp" /> <http-basic /> </http> <!-- 权限管理操作 --> <authentication-manager> <authentication-provider> <!-- 使用固定的用户名和密码及权限来做验证. --> <!-- <user-service> <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" /> <user name="user" password="user" authorities="ROLE_USER" /> </user-service> --> <jdbc-user-service data-source-ref="dataSource" users-by-username-query="select username,password,enabled from account where username=?" authorities-by-username-query="select username,authority from authorities where username=?" /> <password-encoder hash="sha"/> </authentication-provider> </authentication-manager> <!-- <beans:bean id="userDetailsServiceImpl" class="com.demo.test.service.impl.UserDetailsServiceImpl" /> --> </beans:beans>
mybatis.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> </configuration>
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.i18n.encoding" value="UTF-8" /> <package name="User" extends="json-default"> <action name="user" class="com.glen.action.AccountAction"> <result type="json" /> </action> </package> </struts>
account-mapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="account"> <!-- <select id="getList" parameterType="com.glen.model.Account" resultType="list" resultMap="accountMap.accountResultMap"> select * from account where username like '%' #{username} '%' </select> --> <select id="getAllAccount" resultType="list" resultMap="accountMap.accountResultMap"> select * from account </select> <!-- accountResultMap是account-resultmap.xml中定义的resultmap --> <select id="get" parameterType="com.glen.model.Account" resultType="com.glen.model.Account" resultMap="accountMap.accountResultMap"> <![CDATA[ select * from account where id = #{id} ]]> </select> <!-- 自动生成id策略 --> <insert id="add" useGeneratedKeys="true" keyProperty="id" parameterType="com.glen.model.Account"> insert into account(id, username, password) values(#{id,jdbcType=BIGINT}, #{username}, sha(#{password})) <!--将最后插入的逐渐返回到java对象--> <selectKey resultType="int" keyProperty="id"> SELECT LAST_INSERT_ID() </selectKey> </insert> <update id="edit" parameterType="com.glen.model.Account"> update account set username = #{username}, password = #{password} where id = #{id} </update> <delete id="remove" parameterType="com.glen.model.Account"> delete from account where id = #{id} </delete> </mapper>
account-resultMap.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="accountMap"> <resultMap type="com.glen.model.Account" id="accountResultMap"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> <result property="enabled" column="enabled"/> </resultMap> </mapper>
Account.java
package com.glen.model; import java.io.Serializable; public class Account implements Serializable { private static final long serialVersionUID = -7970848646314840509L; private Integer id; private String username; private String password; private int enabled; public Account() { super(); } public Integer getId() { return id; } public void setId(Integer 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; } public int getEnabled() { return enabled; } public void setEnabled(int enabled) { this.enabled = enabled; } }
AccountDao.java
package com.glen.dao; import java.util.List; import javax.annotation.Resource; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.stereotype.Repository; import com.glen.model.Account; @Repository public class AccountDao { @Resource private SqlSessionFactory sessionFactory; public SqlSessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SqlSessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public int insert(Account account) { SqlSession session = sessionFactory.openSession(); return session.insert("account.add", account); } public void remove(Account account) { SqlSession session = sessionFactory.openSession(); session.delete("account.remove", account); } public Account getAccountById(Account account) { SqlSession session = sessionFactory.openSession(); Account accountFromDb = (Account) session.selectOne("account.get", account); return accountFromDb; } @SuppressWarnings("unchecked") public List<Account> getAllAccount(){ SqlSession session = sessionFactory.openSession(); List<Account> accountFromDb = (List<Account>) session.selectList("account.getAllAccount"); return accountFromDb; } }
AccountService.java
package com.glen.service; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Repository; import com.glen.dao.AccountDao; import com.glen.model.Account; @Repository public class AccountService { @Resource private AccountDao accountDao; public int insertAccount(Account account) { return accountDao.insert(account); } public int remove(String removeNumbers) { String arrs[] = removeNumbers.split("\\|"); for (String string : arrs) { System.out.println(string); Account account = new Account(); account.setId(Integer.parseInt(string)); accountDao.remove(account); } return arrs.length; } public Account getAccountById(Account account) { return accountDao.getAccountById(account); } public List<Account> getAllAccount() { return accountDao.getAllAccount(); } public AccountDao getAccountDao() { return accountDao; } public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } }
AccountAction.java
package com.glen.action; import java.io.IOException; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.apache.struts2.ServletActionContext; import org.springframework.stereotype.Component; import com.glen.model.Account; import com.glen.service.AccountService; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") @Component public class AccountAction extends ActionSupport{ @Resource private AccountService accountService; private List<Account> list; private HttpServletResponse response ; private String removeNumbers; private Account account; private String level; @Override public String execute() throws Exception { // TODO Auto-generated method stub response = ServletActionContext.getResponse(); list = accountService.getAllAccount(); String jsonStr=""; for (Account account2 : list) { JSONObject jo = JSONObject.fromObject(account2); jsonStr+=","+ jo.toString(); } jsonStr = jsonStr.substring(1,jsonStr.length()); try { // 返回成功标识 response.getWriter().println(jsonStr); response.getWriter().flush(); System.out.println("haha"); } catch (IOException e) { e.printStackTrace(); } finally { try { response.getWriter().close(); } catch (IOException e) { e.printStackTrace(); } } return null; } public String addUser() throws Exception{ response = ServletActionContext.getResponse(); account.setEnabled(1); accountService.insertAccount(account); try { // 返回成功标识 response.getWriter().println("{success:true,userID:"+account.getId()+"}"); response.getWriter().flush(); System.out.println("haha"); } catch (IOException e) { e.printStackTrace(); } finally { try { response.getWriter().close(); } catch (IOException e) { e.printStackTrace(); } } return null; } public String removes(){ System.out.println(removeNumbers); response = ServletActionContext.getResponse(); int count = accountService.remove(removeNumbers); try { // 返回成功标识 response.getWriter().println(count); response.getWriter().flush(); System.out.println("haha"); } catch (IOException e) { e.printStackTrace(); } finally { try { response.getWriter().close(); } catch (IOException e) { e.printStackTrace(); } } return null; } public HttpServletResponse getResponse() { return response; } public void setResponse(HttpServletResponse response) { this.response = response; } public AccountService getAccountService() { return accountService; } public void setAccountService(AccountService accountService) { this.accountService = accountService; } public List<Account> getList() { return list; } public void setList(List<Account> list) { this.list = list; } public Account getAccount() { return account; } public void setAccount(Account account) { this.account = account; } public String getRemoveNumbers() { return removeNumbers; } public void setRemoveNumbers(String removeNumbers) { this.removeNumbers = removeNumbers; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } }
login.js
/** * @author joo */ Ext.require( [ 'Ext.form.*', 'Ext.window.*' ]) Ext.onReady(function() { var form = Ext.create('Ext.form.Panel', { border : false, url : 'j_spring_security_check', method : 'post', fieldDefaults : { labelWidth : 50 }, bodyPadding : '30 60 10 60', items : [ { id:'loginUsername', xtype : 'textfield', fieldLabel : '用户名', name : 'j_username', anchor : '100%', shadow : true }, { xtype : 'textfield', id:'loginPassword', fieldLabel : '密码', name : 'j_password', anchor : '100%', padding : '20 0 0 0' } ] }) var win = Ext.create('Ext.window.Window', { title : 'Resize Me', width : 400, height : 200, layout : 'fit', x:500, y:200, plain : true, items : form, buttons : [ { text : '登陸', handler : function() { var username = Ext.getCmp('loginUsername').value; var password = Ext.getCmp('loginPassword').value; $('#bestLoginUsername').val(username); $('#bestLoginPassword').val(password); $('#submitForm').submit(); } }, { text : '取消' } ] }); win.show(); });
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' 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"> --> <link rel="stylesheet" type="text/css" href="ext-4.0/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="ext-4.0/examples/shared/example.css" /> <script type="text/javascript" src="ext-4.0/bootstrap.js"></script> <script type="text/javascript" src="jquery-1.4.1.js"></script> <script type="text/javascript" src="login.js" charset="utf-8"></script> </head> <body> <div align="center" style="padding-top: 200px;padding-left:100px"> <form id="submitForm" action="<%=path %>/j_spring_security_check" method="post"> USERNAME:<input type="text" name="j_username" id="bestLoginUsername" value="" /><br/> PASSWORD:<input type="password" name="j_password" id="bestLoginPassword" value="" /><br/> </form> </div> </body> </html>
user.js
/** * @author joo */ Ext.require([ 'Ext.dd.*', 'Ext.data.*', 'Ext.grid.*', 'Ext.ModelManager.*' ]) Ext.define('DataObject',{ extend:'Ext.data.Model', fields:['id','username','password'] }); function strToJson(str){ var json = eval('(' + str + ')'); return json; } var auth ; function getGrid(firstGridStore){ var Levelstates = Ext.create('Ext.data.Store', { fields: ['level', 'value'], data: [{ "level": "ROLE_USER", "value": "ROLE_USER" }, { "level": "ROLE_ADMIN", "value": "ROLE_ADMIN" } // ... ] }); var columns = [ {text:'用户名',flex:1,sortable:true,dataIndex:'username'}, {text:'密码',winth:70,sortable:true,dataIndex:'password'} ] firstGrid = Ext.create('Ext.grid.Panel',{ multiSelect:true, viewConfig:{ plugins:{ ptype:'gridviewdragdrop', dragGroup:'firstGridDDGroup', dropGroup:'secondGridDDGroup' }, listeners: { drop: function(node, data, dropRec, dropPosition) { var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view'; Ext.example.msg("Drag from right to left", 'Dropped ' + data.records[0].get('name') + dropOn); } } }, store:firstGridStore, columns:columns, title:'用户列表', stripeRows:true, margins:'0 4 0 0' }) var secondGridStore = Ext.create('Ext.data.Store',{ model:DataObject }) secondGrid = Ext.create('Ext.grid.Panel',{ viewConfig:{ plugins:{ ptype:'gridviewdragdrop', dragGroup:'secondGridDDGroup', dropGroup:'firstGridDDGroup' }, listeners: { drop: function(node, data, dropRec, dropPosition) { var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view'; Ext.example.msg("Drag from left to right", 'Dropped ' + data.records[0].get('name') + dropOn); } } }, store:secondGridStore, stripeRows:true, columns:columns, title:'删除列表' }) var displayPanel = Ext.create('Ext.Panel',{ width:650, height:300, layout:{ type:'hbox', align:'stretch', padding:5 }, defaults:{flex:1}, items:[firstGrid,secondGrid], renderTo:'panel', dockedItems:{ xtype:'toolbar', dock:'bottom', items:[{ text:'添加', handler:function(){ if(auth=='[ROLE_ADMIN]') win.show(); if(auth=='[ROLE_USER]') Ext.Msg.alert('用户','您没有权限') } },'->',{ text:'删除', handler:function(){ if(auth=='[ROLE_USER]'){ Ext.Msg.alert('用户','您没有权限') return; } var store = (secondGrid.getStore()); if(store.getCount()<=0){ Ext.Msg.alert('消息', '请拖动数据到删除列表..'); return } var val = ""; for(var i=0;i<store.getCount();i++){ val += "|"+(store.getAt(i).get('id')) } val=val.substring(1, val.length); Ext.Ajax.request({ url: 'user!removes.action', success:function(response,opts){ Ext.Msg.alert('消息', '删除成功:共删除了'+response.responseText+'条内容'); secondGridStore.removeAll() }, failure:function(response,opts){ Ext.Msg.alert('消息', '删除失败'); }, params:{removeNumbers:val} }); //; } }] } }) var addUserForm = Ext.create('Ext.form.Panel',{ border:false, fieldDefaults:{ labelWidth:50 }, bodyPadding:'30 60 10 60', items:[{ xtype:'textfield', fieldLabel:'姓名', name:'account.username', anchor:'100%', shadow :true, id:'username', },{ xtype:'textfield', fieldLabel:'密碼', name:'account.password', anchor:'100%' , padding:'20 0 0 0', id:'password' } ] }) var win = Ext.create('Ext.window.Window', { title: 'Resize Me', width: 400, height:300, layout: 'fit', plain: true, items:addUserForm, buttons: [{ text: '添加', handler:function(){ var store = firstGrid.getStore(); //var loginForm = Ext.getCmp('login-form').form; addUserForm.form.doAction('submit', { url:'user!addUser.action', method:'POST', waitMsg:'正在添加...', timeout:10000,//10秒超时, //params:loginForm.getValues(), success:function(form, action){ //alert(action.result.userID); var user = Ext.ModelManager.create({ username : Ext.getCmp('username').value, password : Ext.getCmp('password').value, id : action.result.userID, }, 'DataObject'); store.insert(store.getCount(),user); }, failure:function(form, action){ alert('添加失败'); } }); win.hide(); } },{ text: '取消', handler:function(){ win.hide() } }] }); } Ext.onReady(function(){ //您的权限为 auth = $('#authHidden').val(); if(auth=='[ROLE_ADMIN]') Ext.Msg.alert('管理员','您的权限为管理员') if(auth=='[ROLE_USER]') Ext.Msg.alert('用户','您的权限为普通用户') Ext.Ajax.request({ url: 'user.action', success:function(response,opts){ var data = ('['+response.responseText+']'); var onepiece=strToJson(data); var firstGridStore = Ext.create('Ext.data.JsonStore',{ model:DataObject, data:onepiece }) getGrid(firstGridStore) }, failure:function(response,opts){ Ext.Msg.alert('消息', '错误'); }, params:{page:1} }); });
index.jsp
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <% 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> <link rel="stylesheet" type="text/css" href="ext-4.0/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="ext-4.0/examples/shared/example.css" /> <script type="text/javascript" src="ext-4.0/bootstrap.js"></script> <script type="text/javascript" src="ext-4.0/examples/shared/examples.js"></script> <script type="text/javascript" src="user.js" charset="utf-8"></script> <script type="text/javascript" src="jquery-1.4.1.js"></script> <SCRIPT type="text/javascript"> </SCRIPT> <body> <INPUT type="hidden" id="authHidden" value ="<sec:authentication property="principal.authorities"/>"/> <div align="center" style="padding-top:120px;" id="panel"></div> </body> </html>
- Permissions.rar (9.8 MB)
- 下载次数: 956
评论
5 楼
u011227256
2015-03-12
4 楼
rochou
2013-12-18
为什么login.jsp里面的form表单没有submit动作 难道是写到js里面了? 望速回啊
3 楼
junjun16818
2013-05-27
yuncpu 写道
openSessionInView
这里用的是hibernate的延迟加载方式
哪来到hibernate
不是mybatis吗?
这里用的是hibernate的延迟加载方式
哪来到hibernate
不是mybatis吗?
从别的项目copy过来的,这不是注释掉了么,
2 楼
yuncpu
2013-05-20
openSessionInView
这里用的是hibernate的延迟加载方式
哪来到hibernate
不是mybatis吗?
这里用的是hibernate的延迟加载方式
哪来到hibernate
不是mybatis吗?
1 楼
funnyone
2012-01-19
发表评论
-
Struts2在Action中获得Response对象的四种方法
2011-06-29 09:29 1108在struts1.x Action类的execute方法中 ... -
java 读取文件
2011-06-16 17:30 10261、按字节读取文件内容2、按字符读取文件内容3、按行读取文件内 ... -
Spring 定时任务
2011-06-16 17:24 2091所需要的jar包: spring.jar;quar ... -
java 匿名内部类的使用方法
2011-06-16 11:42 1277public interface Contents { ... -
java 内部类使用方法
2011-06-16 10:06 1399public interface Contents ... -
Java图片缩小后不失真的代码(缩略图)
2011-02-21 17:22 3660public static void reduceImg(S ... -
java 下载图片代码
2011-02-12 12:18 15467package webcon; import java ... -
获取网页源代码
2011-02-12 12:15 1558package webcon; import ja ...
相关推荐
友价免签约支付接口插件最新版
基于java的微信小程序跳蚤市场设计与实现答辩PPT.pptx
程序员面试求职指南 程序员简历制作指南 面试常见词汇扫盲 项目经验指南
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
JSP基于SSM旅游景点预订html5网站毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
open3d-0.15.2-cp38-cp38-win_amd64.whl open3d cuda的python包 import open3d as o3d print(o3d.cuda.Device().is_cuda_available() )# 检查是否支持CUDA
环境说明: 开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 5.7+ 数据库工具:Navicat11 开发软件:PyCharm
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
宠物综合服务平台 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
本资源提供了一个使用Java语言实现的完整游戏引擎示例,旨在帮助开发者学习和理解游戏引擎的基本架构和核心功能。该资源包含了从图形渲染、物理模拟到用户输入处理等多个模块的实现代码,以及相关的文档和注释,便于开发者进行学习和研究。通过本资源,你可以深入了解如何利用Java语言构建一个可扩展的游戏引擎框架,包括场景管理、实体组件系统(ECS)的设计,以及如何集成第三方库来增强游戏引擎的功能。此外,资源中还提供了一些简单的游戏示例,帮助你快速上手并实践所学知识。请注意,本资源是一个学习资源,适合有一定编程基础并对游戏开发感兴趣的开发者使用。通过研究和分析这些代码,你将能够更好地掌握游戏引擎的开发技巧,为未来的项目打下坚实的基础。
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
青大校园预点餐系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
基于java的微信小程序健身房私教预约系统答辩PPT.pptx
安装前的准备 1、安装Python:确保你的计算机上已经安装了Python。你可以在命令行中输入python --version或python3 --version来检查是否已安装以及安装的版本。 个人建议:在anaconda中自建不同python版本的环境,方法如下(其他版本照葫芦画瓢): 比如创建python3.8环境,anaconda命令终端输入:conda create -n py38 python==3.8 2、安装pip:pip是Python的包管理工具,用于安装和管理Python包。你可以通过输入pip --version或pip3 --version来检查pip是否已安装。 安装WHL安装包 1、打开命令行(或打开anaconda命令行终端): 在Windows上,你可以搜索“cmd”或“命令提示符”并打开它。 在macOS或Linux上,你可以打开“终端”。 2、cd到whl文件所在目录安装: 使用cd命令导航到你下载的whl文件所在的文件夹。 终端输入:pip install xxx.whl安装即可(xxx.whl指的是csdn下载解压出来的whl) 3、等待安装完成: 命令行会显示安装进度,并在安装完成后返回提示符。 以上是简单安装介绍,小白也能会,简单好用,从此再也不怕下载安装超时问题。 使用过程遇到问题可以私信,我可以帮你解决! 收起
基于VB的程序实例,可供参考学习使用
本资源为“基于Java GUI编程实现的贪吃蛇小游戏”,是一款经典的编程入门游戏,适合初学者通过实践掌握Java编程语言、图形用户界面设计以及游戏逻辑实现。项目利用Java Swing库构建用户界面,涵盖了游戏窗口、得分显示、键盘输入等关键元素。学习者将了解如何使用Swing组件创建游戏界面,处理键盘事件控制贪吃蛇移动,并通过定时器实现动画与刷新机制。此外,还需掌握数据结构(如队列)存储贪吃蛇身体,以及算法实现贪吃蛇移动和食物生成逻辑。本项目不仅巩固了Java编程基础,还锻炼了面向对象思维和问题解决能力,是练手学习和课程设计的绝佳选择。
升官图游戏 java.zip