The first adapter is set to NAT (that will give you the internet connection).
The second adapter is set to host only.
Start the virtual machine and assign a static IP for the second adapter in Ubuntu (for instance 192.168.56.56). The host Windows will have 192.168.56.1 as IP for the internal network (VirtualBox Host-Only Network is the name in network connections in Windows). What this will give you is being able to access the apache server on ubuntu, from windows, by going to 192.168.56.56. Also, Ubuntu will have internet access, since the first adapter (set to NAT) will take care of that.
Now, to make the connection available both ways (accessing the windows host from the ubuntu guest) there's still one more step to be performed. Windows will automatically add the virtualbox host-only network to the list of public networks and that cannot be changed. This entails that the firewall will prevent proper access.
To overcome this and not make any security breaches in your setup:
go to the windows firewall section, in control panel,
click on advanced settings. In the page that pops up,
click on inbound rules (left column), then on new rule (right column). Chose custom rule, set the rule to allow all programs, and any protocol. For the scope, add in the first box (local IP addresses) 192.168.56.1, and in the second box (remote IP) 192.168.56.56. Click next, select allow the connection, next, check all profiles, next, give it a name and save.
That's it, now you have 2 way communication, with apache/any other service available as well as internet.
The final step is to setup a share. Do not use the shared folders feature in virtualbox, it's quite buggy especially with windows 7 (and 64 bit). Instead use samba shares - fast and efficient.
The best way to do this is to use a Bridge Adapter in virtualbox. In virtual box go to the settings for your machine->Network->Adapter 1 and select Bridged Adapter. This will make you virtual machine part of your main network.
If you have a dhcp server it should supply an address etc. to the virtual machine which will allow it to communicate with the rest of your systems and vice versa.
However, I have found that sometimes no settings through virtualbox have any effect whatsoever, and when that has been the case, I've solved this directly in the Linux guest via the command line.
Change Virtualbox settings to bridged and use VB's recommended settings.
In the Linux guest, via the command line as root / sudo, run nmtui which will bring up a user interface. Of the 3 options select "Activate a connection" and choose the name of the network adapter that VB assigned to the guest. If your host is permissive enough, this should set everything up. If not, you may need to select "Edit a connection" instead to manually input DNS servers, IP addresses, DHCP vs Static, gateway, etc. Don't forget to select "Automatically connect" in the edit screen.
When all else has failed, this has always been the answer for me.