在strut2中所以的值都在值棧中存放,在頁面中加入<s:debug></s:debug>標簽,就可以點擊顯示出當前值棧中的所有值,如圖

可以通過 <s:property value="name"/>標簽得到值棧中的值,value的值是PropertyName,就可以得到對應的value
在action中session,request,application都是Map數據類型的
private Map session;
private Map request;
private Map application;
session = ActionContext.getContext().getSession();
request = (Map) ActionContext.getContext().get("request");
application = ActionContext.getContext().getApplication();
session.put("sk", "sv");
request.put("rk", "rv");
application.put("ak", "av");
想在頁面中取到相應的值;
<s:property value="#session.sk"/>
<s:property value="#request.rk"/>
<s:property value="#application.ak"/>
使用<s:debug></s:debug>觀看他們都是存放在棧區,#+名稱就可以取到值
namespace決定來了action的訪問路徑,當namespace=“”時,可以接受所有路徑的action,namespace=“/”,
或者"/xxx,或者"/xxx/yyy",對應的action訪問路徑是/index.action,或者/xxx/index.action,或
者/xxx/yyy/index.action.
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort
()+path+"/";
%>
<base href="<%=basePath%>">
在使用namespace時容易出現路徑問題,在會出現路徑問題的jsp頁面中加上base標簽,就不會了。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.add(Calendar.DATE, -7);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date sTime = calendar.getTime();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Date eTime = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s = sdf.format(sTime) + " 00:00:00";
String e = sdf.format(eTime) + " 23:59:59";
System.out.println(s);
System.out.println(e);
}
}
摘要: 在struts2中的攔截器的定義是先定義一個類實現Interceptor接口,重寫intercept方法。下面是實現登錄驗證的攔截器。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts C...
閱讀全文
Typeof()返回值有6中可能:number,string,boolean,object,function,undefined
Prompt(“請輸入名稱”)返回字符
eval(“”)可以把“”中的字符串執行
在java中繼承的構造方法的規則:
1. 子類的構造的過程中必須調用其父類的構造方法。
2. 子類可以在自己的構造方法中使用super(argument—list)調用父類的構造方法。
3. 使用this(argument—list)調用自己的另外的構造方法。
4. 如果調用super,必須卸載子類構造方法的第一行。
5. 如果子類的構造方法中沒有顯示調用父類工作服,系統默認調用父類無參數的構造方法。
6. 如果子類構造方法中沒有顯示調用父類的構造方法,而父類中又沒有無參數的構造方法,編譯出錯。
哈希編碼:每個對象都有一個獨一無二的哈希編碼,通過這個哈希編碼可以找到這個對象。
多態中動態綁定規則;1.有繼承,2.有重寫(子類重寫父類中的方法),3.父類引用指向子類對象。
Public void getId(final int i){}表示i在此方法中不同被修改
<!--?啟動時刪數據庫中的表,然后創建,退出時不刪除數據表
<property?name="hibernate.hbm2ddl.auto">create</property>-->
<!--?啟動時刪數據庫中的表,然后創建,退出時自動刪除所有表
<property?name="hibernate.hbm2ddl.auto">create-drop</property>-->
<!--?自動修改,如果表結構與實體類不一致,那么就修改表使它們一致,數據會保留
<property?name="hibernate.hbm2ddl.auto">update</property>-->
<!--?自動校驗,如果表結構與實體類不一致,那么不做任何操作,報錯
<property?name="hibernate.hbm2ddl.auto">validate</property>-->
public class ReadSql {
public static void readsql(String filePath) throws Exception{
String encoding = "gbk";
File file = new File(filePath);
if(file.isFile()&&file.exists()){
InputStreamReader reader = new InputStreamReader(new FileInputStream(file),encoding);
BufferedReader bufferedReader = new BufferedReader(reader);
String line = null;
while ((line = bufferedReader.readLine())!=null) {
System.out.println(line.toString());
}
reader.close();
}
}
public static void main(String[] args) throws Exception {
System.out.println("=================================================");
ReadSql.readsql("c:/rr.txt");
System.out.println("=================================================");
}
}
阿里云服務平臺注冊相當于申請到了一臺服務器主機,想運行java web項目很簡單,安裝jdk,tomcat,數據庫,把編譯好的項目放在tomcat中,啟動tomcat,在外網直接訪問阿里云主機ip和端口,項目名稱,就可以了
在網絡編程中,先啟動service,再啟動clent。
1.tcp
服務端
public class Service {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
System.out.println("等待");
while (true) {
Socket socket =ss.accept();
InputStream is = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(is);
System.out.println(dataInputStream.readUTF());
dataInputStream.close();
socket.close();
}
}
}
客戶端
public class CientSocket {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1",6666);
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF("333333333");
dataOutputStream.flush();
dataOutputStream.close();
socket.close();
}
}
udp通信,是不區分客戶端和服務端的
public class Service {
public static void main(String[] args) throws Exception {
byte buf[] = new byte[1024];
DatagramPacket dPacket = new DatagramPacket(buf, buf.length);
DatagramSocket dSocket = new DatagramSocket(5678);
while (true) {
dSocket.receive(dPacket);
System.out.println(new String(buf,0,dPacket.getLength()));
}
}
}
public class UdpClient {
public static void main(String[] args) throws Exception{
while (true) {
byte[] buf = (new String("hello")).getBytes();
DatagramPacket dpPacket = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
//自己占用9999端口
DatagramSocket dSocket = new DatagramSocket(9999);
dSocket.send(dpPacket);
dSocket.close();
}
}
}
當我們去啟動一個 WEB 項目的時候, 容器(包括 JBoss, Tomcat 等)首先會去讀項目的 web.xml 配置文件里面的信息,
當這一步驟沒有出錯并且完成之后, 項目才能正常的被啟動起來。
1> 首先是, 容器會先讀 <context-param></context-param> 節點, 并創建一個 ServletContext 實例, 以節點的 name 作為鍵, value 作為值,
存儲到上下文環境中。
2> 接著, 容器會去讀 <listener></listener> 節點, 根據配置的 class 類路徑來創建監聽。
3> 接著, 容器去讀 <filter></filter> 節點, 根據指定的類路徑來實例化過濾器。
以上都是在 WEB 項目還沒有完全啟動起來的時候就已經完成了的工作。如果系統中有用到 Servlet, 則 Servlet 是在第一次發起請求的時候被實例化的,
且一般不會被容器銷毀, 它可以服務于多個用戶的請求。所以, Servlet 的初始化都要比上面提到的那幾個要遲。
總的來說, web.xml 的加載順序是: context-param --> listener --> filter --> servlet
其中, 如果 web.xml 中出現了相同的節點, 則是按照在配置文件中出現的先后順序來加載的。
下面引入一個小列子來說明:
<?xml version="1.0" encoding="UTF-8"?>
<listener>
<listener-class>net.yeah.fancydeepin.listener.AppStartListener</listener-class>
</listener>
<!-- 為了更好的說明, 特意將 context-param 放在 listener 后面 -->
<context-param>
<param-name>technology</param-name>
<param-value>java,javascript,ajax,css,html</param-value>
</context-param>
<filter>
<filter-name>ReDespatcherFilter</filter-name>
<filter-class>net.yeah.fancydeepin.filter.ReDespatcherFilter</filter-class>
<init-param>
<param-name>it</param-name>
<param-value>android, python, c</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ReDespatcherFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>ReDespatcherFilter2</filter-name>
<filter-class>net.yeah.fancydeepin.filter.ReDespatcherFilter2</filter-class>
<init-param>
<param-name>mail</param-name>
<param-value>fancydeepin@yeah.net</param-value>
</init-param>
</filter>
</web-app>
package net.yeah.fancydeepin.listener;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class AppStartListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent contextEvent) {
System.out.println("********************************************");
ServletContext context = contextEvent.getServletContext();
List<String> params = Arrays.asList(context.getInitParameter("technology").split(","));
for(String param : params){
System.out.print(param + "\t");
}
System.out.println("\n********************************************");
}
public void contextDestroyed(ServletContextEvent contextEvent) {
}
}
package net.yeah.fancydeepin.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ReDespatcherFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("============================================");
System.out.println(filterConfig.getInitParameter("it"));
System.out.println("============================================");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{
chain.doFilter(request, response);
}
public void destroy() {
}
}
package net.yeah.fancydeepin.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ReDespatcherFilter2 implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("++++++++++++++++++++++++++++++++++++++++++++");
System.out.println(filterConfig.getInitParameter("mail"));
System.out.println("++++++++++++++++++++++++++++++++++++++++++++");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{
chain.doFilter(request, response);
}
public void destroy() {
}
}
后臺啟動輸出結果:
